HTTP je nevjerojatno popularna metoda za komunikaciju s udaljenim poslužiteljima. Upotrijebite ovu izvrsnu Rust biblioteku kako biste pojednostavili proces.

Kao i većina programskih jezika, Rust možete koristiti za slanje i primanje podataka putem HTTP-a. Kada gradite uslugu temeljenu na webu, često ćete morati integrirati jednu ili više usluga. Često ćete to učiniti slanjem HTTP zahtjeva.

Rust ima ugrađenu funkcionalnost za HTTP operacije. Također postoje mnoge knjižnice u Rust ekosustavu koje vam pomažu u interakciji s HTTP-om i izgradnji HTTP usluga.

Izrada HTTP zahtjeva s Rustom

Nekoliko Rust biblioteka dostupno je za izradu HTTP zahtjeva, uključujući Reqwest, Hiper, i Surfati knjižnicama. Reqwest je najpopularniji među Rust programerima.

Reqwest je klijentska biblioteka visoke razine koja pruža jednostavan i praktičan API za izradu HTTP zahtjeva. Reqwest pruža funkcionalnost za slanje zahtjeva i rukovanje odgovorima i pogreškama. Apstrahira mnoge detalje iza postavljanja HTTP zahtjeva i podržava napredne značajke poput asinkronih zahtjeva koji koriste

instagram viewer
tokio vrijeme izvođenja. Također upravlja JSON deserijalizacijom, HTTP zaglavljima, vremenskim ograničenjima veze i SSL postavkama.

Biblioteka Reqwest bit će vam korisna ako ste novi u Rustu ili nemate iskustva s HTTP uslugama.

Za početak s Reqwestom dodajte Reqwest i Tokio biblioteke na ovisnosti vašeg projekta. Tokio je asinkrona runtime biblioteka koja interoperira s Reqwestom. Ove ovisnosti možete dodati svojim Teret.toml datoteku nakon stvaranja Rust projekta.

[ovisnosti]
tokio = { verzija = "1.15", karakteristike = ["pun"] }
reqwest = { verzija = "0.11", karakteristike = ["json"] }

Nakon što dodate biblioteke Reqwest i Tokio u ovisnosti vašeg projekta, Cargo će ih instalirati kada izgradite svoj program.

HTTP GET zahtjevi s Reqwestom

Uputit ćete GET zahtjeve za dohvaćanje podataka s web poslužitelja. GET zahtjevi mogu dohvatiti HTML stranice, JSON podatke ili binarne datoteke poput slika ili videa.

Reqwest vam omogućuje da odredite URL krajnju točku kao niz zajedno s parametrima upita i zaglavljima za zahtjev.

Evo kako možete poslati HTTP GET zahtjev na URL:

koristiti reqwest:: Greška;

asinkronifnget_request() -> Proizlaziti {
neka odgovor = reqwest:: get(" https://www.example.com").čekati?;
println!("Status: {}", odgovor.status());

neka tijelo = odgovor.tekst().čekati?;
println!("Tijelo:\n{}", tijelo);

U redu(())
}

#[tokio:: glavni]
asinkronifnglavni() -> Proizlaziti {
get_request().čekati?;
U redu(())
}

Ovaj kod definira asinkronu funkciju, get_request, za ispis detalja odgovora iz zahtjeva za example.com. Poziva se reqwest modula dobiti metoda i ispisuje kod statusa odgovora i tijelo.

Evo rezultata pozivanja get_request funkcija iz glavni funkcija:

Rukovanje HTTP pogreškama uz Reqwest

Morat ćete obraditi pogreške iz HTTP zahtjeva kada se pojave. Knjižnica Reqwest pruža Greška vrstu koju možete koristiti za obradu pogrešaka. Dodatno, HTTP statusni kodovi s web poslužitelja mogu pružiti informacije o statusu zahtjeva.

Evo kako možete riješiti HTTP pogreške za svoje zahtjeve s Reqwestom:

koristiti reqwest:: Greška;

asinkronifnrukovanje_pogreškom() -> Proizlaziti {
neka odgovor = reqwest:: get(" https://www.example.com").čekati?;

odgovarati response.status().as_u16() {
200..=299 => {
neka tijelo = odgovor.tekst().čekati?;
println!("Uspjeh! Tijelo:\n{}", tijelo);
}
400..=599 => {
neka status = odgovor.status();
neka poruka_pogreške = odgovor.tekst().čekati?;
println!("Pogreška {}: {}", status, poruka_pogreške);
}
_ => {
println!("Neočekivani statusni kod: {}", odgovor.status());
}
}

U redu(())
}

#[tokio:: glavni]
asinkronifnglavni() -> Proizlaziti {
rukovanje_pogreškom().čekati?;
U redu(())
}

The rukovanje_pogreškom funkcija postavlja GET zahtjev za primjer.com, a izjava podudaranja obrađuje sve pogreške na temelju koda statusa odgovora.

Funkcija ispisuje poruku i statusni kod ovisno o odgovoru poslužitelju.

Slanje HTTP POST zahtjeva s Reqwestom

Uputit ćete HTTP POST zahtjeve za slanje podataka na poslužitelj. To možete učiniti pomoću reqwest:: Klijent struktura koja stvara klijenta i koristi reqwest:: RequestBuilder struct za izgradnju zahtjeva.

Evo kako možete uputiti POST zahtjev HTTPbinova krajnja točka POST zahtjeva s Reqwestom:

koristiti reqwest::{Klijent, Greška};

asinkronifnObjavi to() -> Proizlaziti {
neka url = " https://httpbin.org/post";
neka json_podaci = r#"{"ime": "Ivan Doe", "e-pošta": "[email protected]"}"#;

neka klijent = reqwest:: Klijent:: novi();

neka odgovor = klijent
.post (url)
.Zaglavlje("Vrsta sadržaja", "aplikacija/json")
.body (json_data.to_owned())
.poslati()
.čekati?;

println!("Status: {}", odgovor.status());

neka tijelo_odgovora = odgovor.tekst().čekati?;
println!("Tijelo odgovora:\n{}", tijelo_odgovora);

U redu(())
}

#[tokio:: glavni]
asinkronifnglavni() -> Proizlaziti {
Objavi to().čekati?;
U redu(())
}

The json_podaci varijabla definira JSON podatke za zahtjev, a klijent varijabla je a reqwest:: Klijent instanca za POST zahtjev.

The odgovor varijabla je graditelj POST zahtjeva. The objaviti metoda šalje POST zahtjev na URL, a Zaglavlje metoda postavlja HTTP zaglavlje. The tijelo metoda postavlja tijelo zahtjeva, a poslati metoda šalje zahtjev.

The Objavi to funkcija ispisuje kod statusa odgovora i tijelo na konzolu pomoću println! makro:

Rukovanje zaglavljima i parametrima upita Vaših HTTP zahtjeva

Rukovanje zaglavljima i parametrima upita važan je aspekt izrade HTTP zahtjeva. Zaglavlja sadrže dodatne informacije poput vjerodajnica za autentifikaciju ili metapodataka o traženom sadržaju.

Parametre upita ćete koristiti za dodavanje dodatnih informacija URL-u kako bi poslužitelj filtrirao ili modificirao odgovor.

Rukovanje zaglavljima i parametrima upita slijedi sličan proces kao i slanje zahtjeva za objavu. Evo kako možete rukovati zaglavljima i parametrima upita u svojim HTTP zahtjevima s Reqwestom:

koristiti std:: zbirke:: HashMap;
koristiti reqwest::{ Greška, zaglavlje};

#[tokio:: glavni]
asinkronifnglavni() -> Proizlaziti {
zaglavlja_za_zahtjeve().čekati?;
U redu(())
}

asinkronifnzaglavlja_za_zahtjeve() -> Proizlaziti {
// Postavite URL i zaglavlja za zahtjev
neka url = " https://example.com/api";
nekamut zaglavlja = zaglavlje:: Karta zaglavlja:: novo();
headers.insert (zaglavlje:: USER_AGENT, zaglavlje:: HeaderValue:: from_static("reqwest"));
headers.insert (zaglavlje:: CONTENT_TYPE, zaglavlje:: HeaderValue:: from_static("aplikacija/json"));

// Postavite parametre upita za zahtjev
nekamut params = HashMap:: new();
params.insert("fu", "bar");
params.insert("baz", "qux");

// Podnesite zahtjev
neka odgovor = reqwest:: Klijent:: novo()
.get (url)
.zaglavlja (zaglavlja)
.upit(&parametri)
.poslati()
.čekati?;

// Rukovanje odgovorom
println!("{:#?}", odgovor);

U redu(())
}

Stvorit ćete hashmap za parametre upita koje potom prosljeđujete upit metoda. Stvorite instancu zaglavlje:: Karta zaglavlja tip za dodavanje zaglavlja.

The zaglavlja_za_zahtjeve funkcija šalje GET zahtjev primjer.com s više zaglavlja i parametara upita. Koristi se zaglavlja i upit metode koje uzimaju karte koje sadrže zaglavlja i parametre upita.

Možete izgraditi Full Stack WebApp u Rustu s WASM-om

Izrada HTTP zahtjeva je vještina koja je korisna za izradu sofisticiranih aplikacija koje integriraju funkcionalnost iz drugih aplikacija.

Web aplikacije s punim nizom možete izraditi u Rustu s bibliotekama kao što su Percy, Yew i Sycamore koje apstrahiraju složenosti za izvrsno razvojno iskustvo.