Farih.co.id
Home Programming Membuat Permintaan HTTP di Rust Dengan Reqwest

Membuat Permintaan HTTP di Rust Dengan Reqwest

Rust programming language logo

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, HiperDan Berselancar perpustakaan. Reqwest adalah yang paling populer di kalangan pengembang Rust.

Reqwest Pratinjau tautan GitHub

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 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.

 [dependencies]
tokio = { version = "1.15", features = ["full"] }
reqwest = { version = "0.11", features = ["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:

 use reqwest::Error;

async fn get_request() -> Result<(), Error> {
    let response = reqwest::get("https://www.example.com").await?;
    println!("Status: {}", response.status());

    let body = response.text().await?;
    println!("Body:\n{}", body);

    Ok(())
}

#[tokio::main]
async fn main() -> Result<(), Error> {
    get_request().await?;
    Ok(())
}

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 dan isi respons.

Inilah hasil pemanggilan dapatkan_permintaan fungsi dari utama fungsi:

Hasil permintaan GET menggunakan Rust menampilkan konten HTML dari halaman web

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:

 use reqwest::Error;

async fn handle_error() -> Result<(), Error> {
    let response = reqwest::get("https://www.example.com").await?;

    match response.status().as_u16() {
        200..=299 => {
            let body = response.text().await?;
            println!("Success! Body:\n{}", body);
        }
        400..=599 => {
            let status = response.status();
            let error_message = response.text().await?;
            println!("Error {}: {}", status, error_message);
        }
        _ => {
            println!("Unexpected status code: {}", response.status());
        }
    }

    Ok(())
}

#[tokio::main]
async fn main() -> Result<(), Error> {
    handle_error().await?;
    Ok(())
}

Itu handle_error fungsi membuat permintaan GET ke contoh.comdan 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:

 use reqwest::{Client, Error};

async fn post_it() -> Result<(), Error> {
    let url = "https://httpbin.org/post";
    let json_data = r#"{"name": "John Doe", "email": "john.doe@example.com"}"#;

    let client = reqwest::Client::new();

    let response = client
        .post(url)
        .header("Content-Type", "application/json")
        .body(json_data.to_owned())
        .send()
        .await?;

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

    let response_body = response.text().await?;
    println!("Response body:\n{}", response_body);

    Ok(())
}

#[tokio::main]
async fn main() -> Result<(), Error> {
    post_it().await?;
    Ok(())
}

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:

Hasil permintaan POST menggunakan Rust menampilkan data JSON

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:

 use std::collections::HashMap;
use reqwest::{ Error, header};

#[tokio::main]
async fn main() -> Result<(), Error> {
    headers_for_requests().await?;
    Ok(())
}

async fn headers_for_requests() -> Result<(), Error> {
    
    let url = "https://example.com/api";
    let mut 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"));

    
    let mut params = HashMap::new();
    params.insert("foo", "bar");
    params.insert("baz", "qux");

    
    let response = reqwest::Client::new()
        .get(url)
        .headers(headers)
        .query(&params)
        .send()
        .await?;

    
    println!("{:#?}", response);

    Ok(())
}

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.

Comment
Share:

Leave a Reply

Your email address will not be published. Required fields are marked *

Ad