HTTP je izjemno priljubljena metoda za komunikacijo z oddaljenimi strežniki. Za poenostavitev postopka uporabite to odlično knjižnico Rust.
Kot večina programskih jezikov lahko tudi Rust uporabljate za pošiljanje in prejemanje podatkov prek HTTP. Ko gradite spletno storitev, boste pogosto morali integrirati eno ali več storitev. To boste pogosto storili tako, da jim pošljete zahteve HTTP.
Rust ima vgrajeno funkcionalnost za operacije HTTP. V ekosistemu Rust je tudi veliko knjižnic, ki vam pomagajo komunicirati s HTTP in graditi storitve HTTP.
Izdelava HTTP zahtev z Rust
Za izdelavo zahtev HTTP je na voljo več knjižnic Rust, vključno s Reqwest, Hiper, in Surf knjižnice. Reqwest je najbolj priljubljen med razvijalci Rust.
Reqwest je odjemalska knjižnica na visoki ravni, ki ponuja preprost in priročen API za izdelavo zahtev HTTP. Reqwest ponuja funkcionalnost za pošiljanje zahtev ter obravnavanje odgovorov in napak. Abstrahira številne podrobnosti za zahtevo HTTP in podpira napredne funkcije, kot so asinhrone zahteve z uporabo
tokio čas izvajanja. Obravnava tudi deserializacijo JSON, glave HTTP, časovne omejitve povezave in nastavitve SSL.Knjižnica Reqwest se vam bo zdela priročna, če ste novi v Rustu ali nimate izkušenj s storitvami HTTP.
Če želite začeti z Reqwestom, dodajte Reqwest in Tokio knjižnice v odvisnosti vašega projekta. Tokio je asinhrona izvajalna knjižnica, ki deluje z Reqwestom. Te odvisnosti lahko dodate svojemu Cargo.toml datoteko po ustvarjanju projekta Rust.
[odvisnosti]
tokio = { različica = "1.15", funkcije = ["poln"] }
reqwest = { različica = "0.11", funkcije = ["json"] }
Ko dodate knjižnici Reqwest in Tokio v odvisnosti vašega projekta, ju bo Cargo namestil, ko zgradite svoj program.
Zahteve HTTP GET z Reqwest
Pošiljali boste zahteve GET za pridobivanje podatkov s spletnega strežnika. Zahteve GET lahko pridobijo strani HTML, podatke JSON ali binarne datoteke, kot so slike ali videi.
Reqwest vam omogoča, da končno točko URL določite kot niz skupaj s parametri poizvedbe in glavami za zahtevo.
Tukaj je opisano, kako lahko pošljete zahtevo HTTP GET na URL:
uporaba reqwest:: Napaka;
asinhfnget_request() -> Rezultat {
pustiti odgovor = reqwest:: get(" https://www.example.com").čakati?;
println!("Stanje: {}", response.status());pustiti body = response.text().čakati?;
println!("Telo:\n{}", telo);V redu(())
}
#[tokio:: main]
asinhfnglavni() -> Rezultat {
get_request().čakati?;
V redu(())
}
Ta koda definira asinhrono funkcijo, get_request, da natisnete podrobnosti odgovora iz zahteve za example.com. Pokliče reqwest modulov dobiti in natisne statusno kodo odgovora in telo.
Tukaj je rezultat klicanja get_request funkcijo od glavni funkcija:
Obravnava napak HTTP z Reqwestom
Napake iz zahtev HTTP boste morali obravnavati, ko se pojavijo. Knjižnica Reqwest ponuja Napaka vrsto, ki jo lahko uporabite za obravnavo napak. Poleg tega lahko statusne kode HTTP iz spletnega strežnika zagotovijo informacije o statusu zahteve.
Tukaj je opisano, kako lahko z Reqwestom obravnavate napake HTTP za svoje zahteve:
uporaba reqwest:: Napaka;
asinhfnhandle_error() -> Rezultat {
pustiti odgovor = reqwest:: get(" https://www.example.com").čakati?;tekma response.status().as_u16() {
200..=299 => {
pustiti body = response.text().čakati?;
println!("Uspeh! Telo:\n{}", telo);
}
400..=599 => {
pustiti status = response.status();
pustiti sporočilo_napake = odgovor.besedilo().čakati?;
println!("Napaka {}: {}", stanje, sporočilo o napaki);
}
_ => {
println!("Nepričakovana statusna koda: {}", response.status());
}
}V redu(())
}
#[tokio:: main]
asinhfnglavni() -> Rezultat {
handle_error().čakati?;
V redu(())
}
The handle_error funkcija naredi zahtevo GET za example.com, stavek ujemanja pa obravnava vse napake na podlagi statusne kode odgovora.
Funkcija natisne sporočilo in statusno kodo glede na odgovor strežniku.
Pošiljanje zahtev HTTP POST z Reqwest
Pošiljali boste zahteve HTTP POST za pošiljanje podatkov strežniku. To lahko storite z uporabo reqwest:: Stranka struct, ki ustvari odjemalca in uporabi reqwest:: RequestBuilder struct za izdelavo zahteve.
Tukaj je opisano, kako lahko pošljete zahtevo POST Končna točka zahteve POST HTTPbin z Reqwest:
uporaba reqwest::{Odjemalec, Napaka};
asinhfnobjavi() -> Rezultat {
pustiti url = " https://httpbin.org/post";
pustiti json_data = r#"{"ime": "Janez", "e-pošta": "[email protected]"}"#;pustiti client = reqwest:: Client:: new();
pustiti odziv = stranka
.post (url)
.header("Vrsta vsebine", "aplikacija/json")
.body (json_data.to_owned())
.send()
.čakati?;println!("Stanje: {}", response.status());
pustiti telo_odgovora = odgovor.besedilo().čakati?;
println!("Telo odgovora:\n{}", telo_odgovora);V redu(())
}
#[tokio:: main]
asinhfnglavni() -> Rezultat {
objavi().čakati?;
V redu(())
}
The json_data spremenljivka definira podatke JSON za zahtevo in stranka spremenljivka je a reqwest:: Stranka primerek za zahtevo POST.
The odgovor spremenljivka je graditelj zahtev POST. The post metoda pošlje zahtevo POST na URL, in glava metoda nastavi glavo HTTP. The telo metoda nastavi telo zahteve in poslati metoda pošlje zahtevo.
The objavi funkcija natisne kodo statusa odgovora in telo na konzolo z uporabo println! makro:
Obravnava glav in parametrov poizvedbe Vaših zahtev HTTP
Ravnanje z glavami in parametri poizvedbe je pomemben vidik izdelave zahtev HTTP. Glave vsebujejo dodatne informacije, kot so poverilnice za preverjanje pristnosti ali metapodatki o zahtevani vsebini.
Parametre poizvedbe boste uporabili za dodajanje dodatnih informacij URL-ju, da strežnik filtrira ali spremeni odgovor.
Ravnanje z glavami in parametri poizvedbe poteka po podobnem postopku kot pošiljanje zahtev za objavo. Tukaj je opisano, kako lahko z Reqwestom obravnavate glave in poizvedbene parametre v svojih zahtevah HTTP:
uporaba std:: zbirke:: HashMap;
uporaba reqwest::{ Napaka, glava};#[tokio:: main]
asinhfnglavni() -> Rezultat {
headers_for_requests().čakati?;
V redu(())
}asinhfnheaders_for_requests() -> Rezultat {
// Nastavite URL in glave za zahtevo
pustiti url = " https://example.com/api";
pustitimut headers = header:: HeaderMap:: new();
headers.insert (header:: USER_AGENT, header:: HeaderValue:: from_static("reqwest"));
headers.insert (header:: CONTENT_TYPE, header:: HeaderValue:: from_static("aplikacija/json"));// Nastavitev poizvedbenih parametrov za zahtevo
pustitimut params = HashMap:: new();
params.insert("foo", "bar");
params.insert("baz", "qux");// Naredi zahtevo
pustiti odziv = reqwest:: Client:: new()
.get (url)
.headers (glave)
.query(¶ms)
.send()
.čakati?;// Obravnava odgovora
println!("{:#?}", odgovor);
V redu(())
}
Ustvarili boste hashmap za parametre poizvedbe, ki jih nato posredujete v poizvedbo metoda. Ustvarite primerek header:: HeaderMap tip za dodajanje glav.
The headers_for_requests funkcija pošlje zahtevo GET example.com z več glavami in poizvedbenimi parametri. Uporablja glave in poizvedbo metode, ki prevzamejo zemljevide, ki vsebujejo glave oziroma poizvedbene parametre.
Spletno aplikacijo Full Stack lahko zgradite v Rust z WASM
Izdelava zahtev HTTP je spretnost, ki je priročna za gradnjo sofisticiranih aplikacij, ki integrirajo funkcionalnost iz drugih aplikacij.
Spletne aplikacije s polnim skladom lahko zgradite v Rustu s knjižnicami, kot so Percy, Yew in Sycamore, ki abstrahirajo kompleksnost za odlično razvojno izkušnjo.