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í
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(¶ms)
.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.