Το HTTP είναι μια απίστευτα δημοφιλής μέθοδος επικοινωνίας με απομακρυσμένους διακομιστές. Χρησιμοποιήστε αυτήν την εξαιρετική βιβλιοθήκη Rust για να απλοποιήσετε τη διαδικασία.

Όπως οι περισσότερες γλώσσες προγραμματισμού, μπορείτε να χρησιμοποιήσετε το Rust για αποστολή και λήψη δεδομένων μέσω HTTP. Όταν δημιουργείτε μια υπηρεσία που βασίζεται στον ιστό, θα χρειαστεί συχνά να ενσωματώσετε μία ή περισσότερες υπηρεσίες. Συχνά θα το κάνετε στέλνοντάς τους αιτήματα HTTP.

Το Rust έχει ενσωματωμένη λειτουργικότητα για λειτουργίες HTTP. Υπάρχουν επίσης πολλές βιβλιοθήκες στο οικοσύστημα Rust που σας βοηθούν να αλληλεπιδράσετε με το HTTP και να δημιουργήσετε υπηρεσίες HTTP.

Πραγματοποίηση αιτημάτων HTTP με Rust

Πολλές βιβλιοθήκες Rust είναι διαθέσιμες για την υποβολή αιτημάτων HTTP, συμπεριλαμβανομένων των Reqwest, Υπερπληθωρισμός, και Αφρός κυμάτων βιβλιοθήκες. Το Reqwest είναι το πιο δημοφιλές μεταξύ των προγραμματιστών της Rust.

Το Reqwest είναι μια βιβλιοθήκη πελατών υψηλού επιπέδου που παρέχει ένα απλό και βολικό API για την υποβολή αιτημάτων HTTP. Το Reqwest παρέχει λειτουργικότητα για αποστολή αιτημάτων και χειρισμό απαντήσεων και σφαλμάτων. Αφαιρεί πολλές λεπτομέρειες πίσω από την υποβολή ενός αιτήματος HTTP και υποστηρίζει προηγμένες λειτουργίες όπως ασύγχρονα αιτήματα χρησιμοποιώντας το

instagram viewer
Τόκιο χρόνο εκτέλεσης. Χειρίζεται επίσης την αποσειροποίηση JSON, τις κεφαλίδες HTTP, τα χρονικά όρια σύνδεσης και τις ρυθμίσεις SSL.

Θα βρείτε χρήσιμη τη βιβλιοθήκη Reqwest εάν είστε νέοι στο Rust ή δεν έχετε εμπειρία με υπηρεσίες HTTP.

Για να ξεκινήσετε με το Reqwest, προσθέστε το Reqwest και Τόκιο βιβλιοθήκες στις εξαρτήσεις του έργου σας. Το Tokio είναι μια ασύγχρονη βιβλιοθήκη χρόνου εκτέλεσης που διαλειτουργεί με το Reqwest. Μπορείτε να προσθέσετε αυτές τις εξαρτήσεις στο δικό σας Cargo.toml αρχείο μετά τη δημιουργία ενός έργου Rust.

[εξαρτήσεις]
Τόκιο = { έκδοση = "1.15", χαρακτηριστικά = ["γεμάτος"] }
reqwest = { έκδοση = "0.11", χαρακτηριστικά = ["json"] }

Μόλις προσθέσετε τις βιβλιοθήκες Reqwest και Tokio στις εξαρτήσεις του έργου σας, η Cargo θα τις εγκαταστήσει όταν δημιουργήσετε το πρόγραμμά σας.

HTTP GET Αιτήματα με Reqwest

Θα υποβάλετε αιτήματα GET για ανάκτηση δεδομένων από έναν διακομιστή ιστού. Τα αιτήματα GET μπορούν να ανακτήσουν σελίδες HTML, δεδομένα JSON ή δυαδικά αρχεία όπως εικόνες ή βίντεο.

Το Reqwest σάς επιτρέπει να καθορίσετε το τελικό σημείο διεύθυνσης URL ως συμβολοσειρά μαζί με παραμέτρους ερωτήματος και κεφαλίδες για το αίτημα.

Δείτε πώς μπορείτε να στείλετε ένα αίτημα HTTP GET σε μια διεύθυνση URL:

χρήση reqwest:: Σφάλμα;

ασυγχρονισμόςστget_request() -> Αποτέλεσμα {
αφήνω απάντηση = reqwest:: get(" https://www.example.com").αναμένω?;
println!("Κατάσταση: {}", answer.status());

αφήνω body = response.text().αναμένω?;
println!("Σώμα:\n{}", σώμα);

Εντάξει(())
}

#[tokio:: κύρια]
ασυγχρονισμόςστκύριος() -> Αποτέλεσμα {
get_request().αναμένω?;
Εντάξει(())
}

Αυτός ο κώδικας ορίζει μια ασύγχρονη συνάρτηση, get_request, για να εκτυπώσετε λεπτομέρειες απόκρισης από ένα αίτημα στο example.com. Καλεί το reqwest της ενότητας παίρνω μέθοδο και εκτυπώνει το κωδικός κατάστασης της απάντησης και σώμα.

Εδώ είναι το αποτέλεσμα της κλήσης του get_request λειτουργία από το κύριος λειτουργία:

Χειρισμός σφαλμάτων HTTP με το Reqwest

Θα χρειαστεί να χειριστείτε σφάλματα από αιτήματα HTTP όταν προκύψουν. Η βιβλιοθήκη Reqwest παρέχει ένα Λάθος τύπο που μπορείτε να χρησιμοποιήσετε για να χειριστείτε σφάλματα. Επιπλέον, οι κωδικοί κατάστασης HTTP από τον διακομιστή ιστού μπορούν να παρέχουν πληροφορίες σχετικά με την κατάσταση του αιτήματος.

Δείτε πώς μπορείτε να χειριστείτε σφάλματα HTTP για τα αιτήματά σας με το Reqwest:

χρήση reqwest:: Σφάλμα;

ασυγχρονισμόςστhandle_error() -> Αποτέλεσμα {
αφήνω απάντηση = reqwest:: get(" https://www.example.com").αναμένω?;

αγώνας answer.status().as_u16() {
200..=299 => {
αφήνω body = response.text().αναμένω?;
println!("Επιτυχία! Σώμα:\n{}", σώμα);
}
400..=599 => {
αφήνω status = answer.status();
αφήνω error_message = answer.text().αναμένω?;
println!("Λάθος {}: {}", status, error_message);
}
_ => {
println!("Απροσδόκητος κωδικός κατάστασης: {}", answer.status());
}
}

Εντάξει(())
}

#[tokio:: κύρια]
ασυγχρονισμόςστκύριος() -> Αποτέλεσμα {
handle_error().αναμένω?;
Εντάξει(())
}

ο handle_error η συνάρτηση κάνει ένα αίτημα GET example.comκαι η δήλωση αντιστοίχισης χειρίζεται τυχόν σφάλματα με βάση τον κωδικό κατάστασης απόκρισης.

Η λειτουργία εκτυπώνει ένα μήνυμα και τον κωδικό κατάστασης ανάλογα με την απάντηση στον διακομιστή.

Αποστολή αιτημάτων HTTP POST με Reqwest

Θα υποβάλετε αιτήματα HTTP POST για να υποβάλετε δεδομένα σε έναν διακομιστή. Μπορείτε να το κάνετε χρησιμοποιώντας το reqwest:: Πελάτης struct που δημιουργεί έναν πελάτη και χρησιμοποιεί το reqwest:: RequestBuilder struct για τη δημιουργία του αιτήματος.

Δείτε πώς μπορείτε να υποβάλετε ένα αίτημα POST Το τελικό σημείο αιτήματος POST του HTTPbin με Reqwest:

χρήση reqwest::{Πελάτης, Σφάλμα};

ασυγχρονισμόςστpost_it() -> Αποτέλεσμα {
αφήνω url = " https://httpbin.org/post";
αφήνω json_data = r#"{"name": "John Doe", "email": "[email protected]"}"#;

αφήνω πελάτης = reqwest:: Πελάτης:: new();

αφήνω απάντηση = πελάτης
.post (url)
.επί κεφαλής("Τύπος περιεχομένου", "application/json")
.body (json_data.to_owned())
.στείλετε()
.αναμένω?;

println!("Κατάσταση: {}", answer.status());

αφήνω answer_body = answer.text().αναμένω?;
println!("Σώμα απόκρισης:\n{}", answer_body);

Εντάξει(())
}

#[tokio:: κύρια]
ασυγχρονισμόςστκύριος() -> Αποτέλεσμα {
post_it().αναμένω?;
Εντάξει(())
}

ο json_data η μεταβλητή ορίζει τα δεδομένα JSON για το αίτημα και το πελάτης μεταβλητή είναι α reqwest:: Πελάτης παράδειγμα για το αίτημα POST.

ο απάντηση Η μεταβλητή είναι το εργαλείο δημιουργίας αιτημάτων POST. ο Θέση μέθοδος στέλνει το αίτημα POST στη διεύθυνση URL και το επί κεφαλής μέθοδος ορίζει μια κεφαλίδα HTTP. ο σώμα μέθοδος ορίζει το σώμα αιτήματος και το στείλετε μέθοδος στέλνει το αίτημα.

ο post_it Η λειτουργία εκτυπώνει τον κωδικό κατάστασης απόκρισης και το σώμα στην κονσόλα χρησιμοποιώντας το println! μακροεντολή:

Χειρισμός κεφαλίδων και παραμέτρων ερωτήματος Τα αιτήματά σας HTTP

Ο χειρισμός των κεφαλίδων και των παραμέτρων ερωτήματος είναι μια σημαντική πτυχή της υποβολής αιτημάτων HTTP. Οι κεφαλίδες περιέχουν πρόσθετες πληροφορίες, όπως διαπιστευτήρια ελέγχου ταυτότητας ή μεταδεδομένα σχετικά με το ζητούμενο περιεχόμενο.

Θα χρησιμοποιήσετε παραμέτρους ερωτήματος για να προσθέσετε πρόσθετες πληροφορίες σε μια διεύθυνση URL ώστε ο διακομιστής να φιλτράρει ή να τροποποιήσει μια απάντηση.

Ο χειρισμός των κεφαλίδων και των παραμέτρων ερωτήματος ακολουθεί παρόμοια διαδικασία με την αποστολή αιτημάτων ανάρτησης. Δείτε πώς μπορείτε να χειριστείτε τις κεφαλίδες και τις παραμέτρους ερωτημάτων στα αιτήματά σας HTTP με το Reqwest:

χρήση std:: συλλογές:: HashMap;
χρήση reqwest::{ Σφάλμα, κεφαλίδα};

#[tokio:: κύρια]
ασυγχρονισμόςστκύριος() -> Αποτέλεσμα {
headers_for_requests().αναμένω?;
Εντάξει(())
}

ασυγχρονισμόςστκεφαλίδες_για_αιτήματα() -> Αποτέλεσμα {
// Ρυθμίστε τη διεύθυνση URL και τις κεφαλίδες για το αίτημα
αφήνω url = " https://example.com/api";
αφήνωmut headers = header:: HeaderMap:: new();
headers.insert (header:: USER_AGENT, header:: HeaderValue:: from_static("Request"));
headers.insert (κεφαλίδα:: CONTENT_TYPE, κεφαλίδα:: HeaderValue:: from_static("application/json"));

// Ρυθμίστε τις παραμέτρους ερωτήματος για το αίτημα
αφήνωmut params = HashMap:: new();
params.insert("foo", "μπαρ");
params.insert("baz", "qux");

// Κάντε το αίτημα
αφήνω απάντηση = reqwest:: Πελάτης:: new()
.get (url)
.κεφαλίδες (κεφαλίδες)
.query(&params)
.στείλετε()
.αναμένω?;

// Χειριστείτε την απάντηση
println!("{:#?}", απάντηση);

Εντάξει(())
}

Θα δημιουργήσετε ένα hashmap για τις παραμέτρους του ερωτήματος που θα μεταβιβάσετε στη συνέχεια στο ερώτηση μέθοδος. Δημιουργήστε ένα παράδειγμα του header:: HeaderMap πληκτρολογήστε για να προσθέσετε κεφαλίδες.

ο κεφαλίδες_για_αιτήματα η λειτουργία στέλνει ένα αίτημα GET στο example.com με πολλαπλές κεφαλίδες και παραμέτρους ερωτήματος. Χρησιμοποιεί το κεφαλίδες και ερώτηση μεθόδους που λαμβάνουν χάρτες που περιέχουν τις παραμέτρους κεφαλίδων και ερωτημάτων, αντίστοιχα.

Μπορείτε να δημιουργήσετε Full Stack WebApp σε Rust με το WASM

Η υποβολή αιτημάτων HTTP είναι μια δεξιότητα που είναι χρήσιμη για τη δημιουργία εξελιγμένων εφαρμογών που ενσωματώνουν λειτουργικότητα από άλλες εφαρμογές.

Μπορείτε να δημιουργήσετε εφαρμογές web πλήρους στοίβας στο Rust με βιβλιοθήκες όπως η Percy, η Yew και η Sycamore με αφηρημένη πολυπλοκότητα για εξαιρετική εμπειρία ανάπτυξης.