Chuyển tới nội dung chính

Rust

Bắt đầu với hướng dẫn REST để lấy token API. Ví dụ dùng máy khách chặn reqwest và Serde.

Tạo dự án bằng cargo new reconstruct-rest-client. Thêm phụ thuộc vào Cargo.toml:

[dependencies]
reqwest = { version = "0.13", features = ["blocking", "json"] }
serde = { version = "1", features = ["derive"] }
urlencoding = "2"

Dùng src/main.rs này:

use reqwest::blocking::Client;
use serde::Deserialize;
use std::env;

#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
struct Catalog { catalog_id: String }

#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
struct Page {
#[serde(default)]
catalogs: Vec<Catalog>,
next_page_token: Option<String>,
}

#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
struct Detail { catalog_id: String, description: String }

fn main() -> Result<(), Box<dyn std::error::Error>> {
let token = env::var("CR_RECONSTRUCT_API_TOKEN")?;
let base = "https://reconstruct.dev/api/v1/platform";
let client = Client::new();

let page: Page = client.get(format!("{base}/catalogs?pageSize=10"))
.bearer_auth(&token).send()?.error_for_status()?.json()?;
for catalog in page.catalogs {
let url = format!("{base}/catalogs/{}", urlencoding::encode(&catalog.catalog_id));
let detail: Detail = client.get(url)
.bearer_auth(&token).send()?.error_for_status()?.json()?;
println!("{}: {}", detail.catalog_id, detail.description);
}
if let Some(next) = page.next_page_token {
println!("Next page token: {next}");
}
Ok(())
}

Chạy cargo run. Truyền nextPageToken dưới dạng pageToken mã hóa URL để lấy trang khác.