HTTP adalah metode yang sangat populer untuk berkomunikasi dengan server jarak jauh. Gunakan perpustakaan Rust yang luar biasa ini untuk membantu menyederhanakan prosesnya.

Seperti kebanyakan bahasa pemrograman, Anda dapat menggunakan Rust untuk mengirim dan menerima data melalui HTTP. Saat Anda membuat layanan berbasis web, Anda sering perlu mengintegrasikan satu atau beberapa layanan. Anda akan sering melakukannya dengan mengirimkan permintaan HTTP kepada mereka.

Rust memiliki fungsionalitas bawaan untuk operasi HTTP. Ada juga banyak perpustakaan di ekosistem Rust yang membantu Anda berinteraksi dengan HTTP dan membangun layanan HTTP.

Membuat Permintaan HTTP Dengan Rust

Beberapa pustaka Rust tersedia untuk membuat permintaan HTTP, termasuk Reqwest, Hiper, Dan Berselancar perpustakaan. Reqwest adalah yang paling populer di kalangan pengembang Rust.

Reqwest adalah pustaka klien tingkat tinggi yang menyediakan API sederhana dan nyaman untuk membuat permintaan HTTP. Reqwest menyediakan fungsionalitas untuk mengirim permintaan dan menangani tanggapan dan kesalahan. Ini mengabstraksi banyak detail di balik membuat permintaan HTTP dan mendukung fitur-fitur canggih seperti permintaan asinkron menggunakan

instagram viewer
tokio runtime. Itu juga menangani deserialisasi JSON, header HTTP, waktu tunggu koneksi, dan pengaturan SSL.

Anda akan menemukan perpustakaan Reqwest berguna jika Anda baru mengenal Rust atau kurang pengalaman dengan layanan HTTP.

Untuk memulai dengan Reqwest, tambahkan Reqwest dan Tokio perpustakaan ke dependensi proyek Anda. Tokio adalah pustaka runtime asinkron yang beroperasi dengan Reqwest. Anda dapat menambahkan dependensi ini ke file Kargo.toml file setelah membuat proyek Rust.

[ketergantungan]
tokio = { versi = "1.15", fitur = ["penuh"] }
reqwest = { versi = "0.11", fitur = ["json"] }

Setelah Anda menambahkan pustaka Reqwest dan Tokio ke dependensi proyek Anda, Cargo akan menginstalnya saat Anda membuat program.

HTTP GET Permintaan Dengan Reqwest

Anda akan membuat permintaan GET untuk mengambil data dari server web. Permintaan GET dapat mengambil halaman HTML, data JSON, atau file biner seperti gambar atau video.

Reqwest memungkinkan Anda menentukan titik akhir URL sebagai string bersama dengan parameter kueri dan header untuk permintaan tersebut.

Inilah cara Anda mengirim permintaan HTTP GET ke URL:

menggunakan reqwest:: Kesalahan;

asinkronfndapatkan_permintaan() -> Hasil {
membiarkan respon = reqwest:: dapatkan(" https://www.example.com").menunggu?;
cetak!("Status: {}", respon.status());

membiarkan tubuh = respons.teks().menunggu?;
cetak!("Tubuh:\n{}", tubuh);

Oke(())
}

#[tokio:: utama]
asinkronfnutama() -> Hasil {
dapatkan_permintaan().menunggu?;
Oke(())
}

Kode ini mendefinisikan fungsi asinkron, dapatkan_permintaan, untuk mencetak detail respons dari permintaan ke example.com. Ini memanggil reqwest modul mendapatkan metode dan mencetak kode status respons dan tubuh.

Inilah hasil dari pemanggilan dapatkan_permintaan fungsi dari utama fungsi:

Menangani Kesalahan HTTP Dengan Reqwest

Anda harus menangani kesalahan dari permintaan HTTP saat muncul. Perpustakaan Reqwest menyediakan sebuah Kesalahan jenis yang dapat Anda gunakan untuk menangani kesalahan. Selain itu, kode status HTTP dari server web dapat memberikan informasi tentang status permintaan.

Inilah cara Anda menangani kesalahan HTTP untuk permintaan Anda dengan Reqwest:

menggunakan reqwest:: Kesalahan;

asinkronfnhandle_error() -> Hasil {
membiarkan respon = reqwest:: dapatkan(" https://www.example.com").menunggu?;

cocok respon.status().as_u16() {
200..=299 => {
membiarkan tubuh = respons.teks().menunggu?;
cetak!("Kesuksesan! Tubuh:\n{}", tubuh);
}
400..=599 => {
membiarkan status = respon.status();
membiarkan error_message = respon.teks().menunggu?;
cetak!("Kesalahan {}: {}", status, pesan_kesalahan);
}
_ => {
cetak!("Kode status tak terduga: {}", respon.status());
}
}

Oke(())
}

#[tokio:: utama]
asinkronfnutama() -> Hasil {
handle_error().menunggu?;
Oke(())
}

Itu handle_error fungsi membuat permintaan GET ke contoh.com, dan pernyataan kecocokan menangani kesalahan apa pun berdasarkan kode status respons.

Fungsi mencetak pesan dan kode status tergantung pada respon ke server.

Mengirim Permintaan HTTP POST Dengan Reqwest

Anda akan membuat permintaan HTTP POST untuk mengirimkan data ke server. Anda dapat melakukannya dengan menggunakan reqwest:: Klien struct yang membuat klien dan menggunakan reqwest:: RequestBuilder struct untuk membangun permintaan.

Inilah cara Anda dapat membuat permintaan POST Titik akhir permintaan POST HTTPbin dengan Reqwest:

menggunakan reqwest::{Klien, Kesalahan};

asinkronfnmengumumkan() -> Hasil {
membiarkan url = " https://httpbin.org/post";
membiarkan json_data = r#"{"name": "John Doe", "email": "[email protected]"}"#;

membiarkan klien = reqwest:: Klien:: baru();

membiarkan respon = klien
.posting (url)
.tajuk("Jenis konten", "aplikasi/json")
.body (json_data.to_owned())
.mengirim()
.menunggu?;

cetak!("Status: {}", respon.status());

membiarkan response_body = respon.teks().menunggu?;
cetak!("Badan tanggapan:\n{}", response_body);

Oke(())
}

#[tokio:: utama]
asinkronfnutama() -> Hasil {
mengumumkan().menunggu?;
Oke(())
}

Itu json_data variabel mendefinisikan data JSON untuk permintaan, dan klien variabel adalah a reqwest:: Klien contoh untuk permintaan POST.

Itu tanggapan variabel adalah pembuat permintaan POST. Itu pos metode mengirimkan permintaan POST ke URL, dan tajuk metode menetapkan header HTTP. Itu tubuh metode mengatur badan permintaan, dan mengirim metode mengirimkan permintaan.

Itu mengumumkan function mencetak kode status respons dan badan ke konsol menggunakan cetak! makro:

Menangani Header dan Parameter Kueri Permintaan HTTP Anda

Menangani header dan parameter kueri merupakan aspek penting dalam membuat permintaan HTTP. Header berisi informasi tambahan seperti kredensial autentikasi atau metadata tentang konten yang diminta.

Anda akan menggunakan parameter kueri untuk menambahkan informasi tambahan ke URL agar server memfilter atau mengubah respons.

Menangani header dan parameter kueri mengikuti proses yang mirip dengan mengirim permintaan posting. Inilah cara Anda menangani header dan parameter kueri dalam permintaan HTTP Anda dengan Reqwest:

menggunakan std:: koleksi:: HashMap;
menggunakan reqwest::{ Kesalahan, tajuk};

#[tokio:: utama]
asinkronfnutama() -> Hasil {
headers_for_requests().menunggu?;
Oke(())
}

asinkronfnheaders_for_requests() -> Hasil {
// Siapkan URL dan header untuk permintaan
membiarkan url = " https://example.com/api";
membiarkanmut header = header:: HeaderMap:: new();
headers.insert (header:: USER_AGENT, header:: HeaderValue:: from_static("permintaan"));
headers.insert (header:: CONTENT_TYPE, header:: HeaderValue:: from_static("aplikasi/json"));

// Siapkan parameter kueri untuk permintaan
membiarkanmut params = HashMap:: baru();
params.insert("foo", "batang");
params.insert("baz", "qux");

// Buat permintaan
membiarkan respon = reqwest:: Klien:: baru()
.dapatkan (url)
.header (tajuk)
.query(&params)
.mengirim()
.menunggu?;

// Tangani responsnya
cetak!("{:#?}", tanggapan);

Oke(())
}

Anda akan membuat peta hash untuk parameter kueri yang kemudian diteruskan ke pertanyaan metode. Buat contoh dari header:: HeaderMap ketik untuk menambahkan header.

Itu headers_for_requests fungsi mengirimkan permintaan GET ke contoh.com dengan banyak header dan parameter kueri. Ini menggunakan header Dan pertanyaan metode yang mengambil peta yang masing-masing berisi header dan parameter kueri.

Anda Dapat Membangun WebApp Full Stack di Rust Dengan WASM

Membuat permintaan HTTP adalah keterampilan yang berguna untuk membuat aplikasi canggih yang mengintegrasikan fungsionalitas dari aplikasi lain.

Anda dapat membangun aplikasi web full-stack di Rust dengan perpustakaan seperti Percy, Yew, dan Sycamore yang mengabstraksi kerumitan untuk pengalaman pengembangan yang luar biasa.