RustのHTTPClientは色々あるみたいだけど
私はreqwestをよく使う。
Reqwestを使ってAPIにJSONデータをPOSTする方法を書き溜める。
ネットでは、JSONAPIのサンプルはよく目にするけど
クライアント側の記事はあんまり見当たらなかったので自分用、
基本的に2つのstructを用意します。
パラメータ用のstructと、レスポンス用のstructです。
MyParamsは、APIにリクエストするパラメータ用のStructで、
MyResponseが応答結果のJSONを定義したStructです。
reqwest::blockingを使用する場合は下記。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, Debug)] pub struct MyParams { code: String, id: i32, } #[derive(Serialize, Deserialize, Debug)] pub struct MyResponse { id: i32, message: String } let params = MyParams { code: "mycode".to_string(), id: 123 } let client = reqwest::blocking::Client::new(); let response_body: MyResponse = client.post("https://example.com/users") .json(¶ms) .send()? .json()?; println!("response body: {:?}", response_body) |
非同期に実行する場合下記
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, Debug)] pub struct MyParams { code: String, id: i32, } #[derive(Serialize, Deserialize, Debug)] pub struct MyResponse { id: i32, message: String } let params = MyParams { code: "mycode".to_string(), id: 123 } #[derive(Serialize, Deserialize, Debug)] pub struct MyResponse { id: i32, message: String } let client = reqwest::Client::new(); let response_body: MyResponse = client.post("https://example.com/users") .json(¶ms) .send()? .await? .json() .await?; println!("response body: {:?}", response_body) |
細かいところはドキュメントみてね。
じゃあね〜〜〜〜。