HTTP je neuvěřitelně populární metoda pro komunikaci se vzdálenými servery. Použijte tuto vynikající knihovnu Rust ke zjednodušení procesu.

Stejně jako většina programovacích jazyků můžete Rust použít k odesílání a přijímání dat přes HTTP. Když vytváříte webovou službu, často budete muset integrovat jednu nebo více služeb. Často to uděláte zasláním požadavků HTTP.

Rust má vestavěnou funkcionalitu pro HTTP operace. V ekosystému Rust je také mnoho knihoven, které vám pomáhají při interakci s HTTP a vytváření HTTP služeb.

Vytváření HTTP požadavků s Rust

Pro vytváření požadavků HTTP je k dispozici několik knihoven Rust, včetně Reqwest, Hyper, a Surfovat knihovny. Reqwest je mezi vývojáři Rust nejoblíbenější.

Reqwest je klientská knihovna na vysoké úrovni, která poskytuje jednoduché a pohodlné rozhraní API pro vytváření požadavků HTTP. Reqwest poskytuje funkce pro odesílání požadavků a zpracování odpovědí a chyb. Abstrahuje mnoho podrobností za vytvořením požadavku HTTP a podporuje pokročilé funkce, jako jsou asynchronní požadavky pomocí

instagram viewer
tokio runtime. Zvládá také deserializaci JSON, HTTP hlavičky, časové limity připojení a nastavení SSL.

Knihovna Reqwest se vám bude hodit, pokud s Rustem začínáte nebo nemáte zkušenosti se službami HTTP.

Chcete-li začít s Reqwest, přidejte Reqwest a Tokio knihoven na závislosti vašeho projektu. Tokio je asynchronní runtime knihovna, která spolupracuje s Reqwest. Tyto závislosti můžete přidat do svého Cargo.toml soubor po vytvoření projektu Rust.

[závislosti]
tokio = { verze = "1.15", vlastnosti = ["plný"] }
reqwest = { verze = "0.11", vlastnosti = ["json"] }

Jakmile přidáte knihovny Reqwest a Tokio do závislostí svého projektu, Cargo je nainstaluje při sestavování vašeho programu.

HTTP GET požadavky s Reqwest

Budete provádět požadavky GET na načtení dat z webového serveru. Požadavky GET mohou načíst HTML stránky, data JSON, popř binární soubory, jako jsou obrázky nebo videa.

Reqwest umožňuje zadat koncový bod adresy URL jako řetězec spolu s parametry dotazu a záhlavími pro požadavek.

Zde je návod, jak odeslat požadavek HTTP GET na adresu URL:

použití reqwest:: Chyba;

asynchronnífnget_request() -> Výsledek {
nechat odpověď = reqwest:: get(" https://www.example.com").čekat?;
println!("Stav: {}", response.status());

nechat body = odezva.text().čekat?;
println!("Tělo:\n{}", tělo);

OK(())
}

#[tokio:: hlavní]
asynchronnífnhlavní() -> Výsledek {
get_request().čekat?;
OK(())
}

Tento kód definuje asynchronní funkci, get_request, chcete-li vytisknout podrobnosti odpovědi z požadavku na example.com. Volá to reqwest modulů dostat metodu a vytiskne stavový kód odpovědi a tělo.

Zde je výsledek volání get_request funkce z hlavní funkce:

Zpracování chyb HTTP pomocí Reqwest

Budete muset ošetřit chyby z požadavků HTTP, když nastanou. Knihovna Reqwest poskytuje Chyba typ, který můžete použít ke zpracování chyb. Kromě toho mohou stavové kódy HTTP z webového serveru poskytovat informace o stavu požadavku.

Zde je návod, jak můžete zpracovat chyby HTTP pro vaše požadavky pomocí Reqwest:

použití reqwest:: Chyba;

asynchronnífnhandle_error() -> Výsledek {
nechat odpověď = reqwest:: get(" https://www.example.com").čekat?;

zápas response.status().as_u16() {
200..=299 => {
nechat body = odezva.text().čekat?;
println!("Úspěch! Tělo:\n{}", tělo);
}
400..=599 => {
nechat stav = odezva.stav();
nechat error_message = response.text().čekat?;
println!("Chyba {}: {}", stav, chybová_zpráva);
}
_ => {
println!("Neočekávaný stavový kód: {}", response.status());
}
}

OK(())
}

#[tokio:: hlavní]
asynchronnífnhlavní() -> Výsledek {
handle_error().čekat?;
OK(())
}

The handle_error funkce vytvoří požadavek GET na example.coma příkaz match zpracuje všechny chyby na základě kódu stavu odpovědi.

Funkce vytiskne zprávu a stavový kód v závislosti na odpovědi serveru.

Odesílání požadavků HTTP POST pomocí Reqwest

Budete provádět HTTP POST požadavky na odeslání dat na server. Můžete tak učinit pomocí reqwest:: Klient struktura, která vytvoří klienta a použije reqwest:: RequestBuilder struct k vytvoření požadavku.

Zde je návod, jak můžete odeslat požadavek POST Koncový bod požadavku POST HTTPbin s Reqwest:

použití reqwest::{Client, Error};

asynchronnífnOdeslat to() -> Výsledek {
nechat url = " https://httpbin.org/post";
nechat json_data = r#"{"name": "John Doe", "e-mail": "[email protected]"}"#;

nechat client = reqwest:: Client:: new();

nechat odpověď = klient
.post (url)
.header("Typ obsahu", "application/json")
.body (json_data.to_owned())
.poslat()
.čekat?;

println!("Stav: {}", response.status());

nechat response_body = response.text().čekat?;
println!("Tělo odpovědi:\n{}", tělo_odpovědi);

OK(())
}

#[tokio:: hlavní]
asynchronnífnhlavní() -> Výsledek {
Odeslat to().čekat?;
OK(())
}

The json_data proměnná definuje data JSON pro požadavek a klienta proměnná je a reqwest:: Klient instance pro požadavek POST.

The Odezva proměnná je tvůrce požadavku POST. The pošta metoda odešle požadavek POST na adresu URL a záhlaví metoda nastavuje hlavičku HTTP. The tělo metoda nastavuje tělo požadavku a poslat metoda odešle požadavek.

The Odeslat to funkce vytiskne stavový kód odpovědi a tělo do konzole pomocí println! makro:

Zpracování záhlaví a parametrů dotazů vašich požadavků HTTP

Zpracování záhlaví a parametrů dotazu je důležitým aspektem vytváření požadavků HTTP. Záhlaví obsahují další informace, jako jsou ověřovací údaje nebo metadata o požadovaném obsahu.

Parametry dotazu použijete k přidání dalších informací k adrese URL, aby server mohl filtrovat nebo upravit odpověď.

Manipulace s hlavičkami a parametry dotazu probíhá podobně jako při odesílání požadavků na příspěvky. Zde je návod, jak můžete zacházet se záhlavími a parametry dotazu ve svých požadavcích HTTP pomocí Reqwest:

použití std:: sbírky:: HashMap;
použití reqwest::{ Chyba, záhlaví};

#[tokio:: hlavní]
asynchronnífnhlavní() -> Výsledek {
headers_for_requests().čekat?;
OK(())
}

asynchronnífnheaders_for_requests() -> Výsledek {
// Nastavte adresu URL a záhlaví pro požadavek
nechat url = " https://example.com/api";
nechatmut headers = header:: HeaderMap:: new();
headers.insert (header:: USER_AGENT, header:: HeaderValue:: from_static("reqwest"));
headers.insert (header:: CONTENT_TYPE, header:: HeaderValue:: from_static("application/json"));

// Nastavte parametry dotazu pro požadavek
nechatmut params = HashMap:: new();
params.insert("foo", "bar");
params.insert("baz", "qux");

// Zadejte požadavek
nechat response = reqwest:: Client:: new()
.get (url)
.headers (headers)
.query(&params)
.poslat()
.čekat?;

// Zpracovat odpověď
println!("{:#?}", Odezva);

OK(())
}

Vytvoříte hashmap pro parametry dotazu, které pak předáte dotaz metoda. Vytvořte instanci souboru header:: HeaderMap zadejte pro přidání záhlaví.

The headers_for_requests funkce odešle požadavek GET na example.com s více záhlavími a parametry dotazu. Používá se hlavičky a dotaz metody, které přebírají mapy obsahující záhlaví a parametry dotazu.

Můžete vytvořit Full Stack WebApp v Rust s WASM

Vytváření požadavků HTTP je dovednost, která se hodí pro vytváření sofistikovaných aplikací, které integrují funkce z jiných aplikací.

Můžete vytvářet kompletní webové aplikace v Rustu s knihovnami jako Percy, Yew a Sycamore, které abstraktní složitosti pro vynikající vývojářské zkušenosti.