👌
[同期処理]Rust のコードで外部APIを実行する
はじめに
Rust で外部のAPIをコールする機会はしばしば出てくると思います。
私もこの辺りほとんど知識がないですが、利用する機会が出てきたのでアウトプットします。
APIをコールする手段として、Rustではreqwest
というクレートを利用することが一般的なようです。
今回は reqwest
を利用した実装方法を書いていきます。
同期処理でAPIを実行する
同期的にAPIをコールする方法をやっていきます。
jsonplaceholder
を使ってAPIをコールしていきたいと思います。
事前準備
APIの実行のため、前述の reqwest
クレートと、
API実行時、JSON の操作をおこなうため、serde
、serde_json
クレートを追加しておきます。
Cargo.toml
[dependencies]
reqwest = { version = "0.12.4", features = ["blocking", "json"]}
serde = "1.0.203"
serde_json = "1.0.117"
POST
POST時は以下のコードのように実装可能。
reqwest
クレートの blocking を利用し、同期的なクライアントを作成し、
クライアントに対して、post メソッドを呼び出します。
main.rs
use reqwest::blocking::Client;
use serde_json::json;
fn main() {
let client = Client::new();
let res = create_todo(client).unwrap();
println!("{:?}", res)
}
fn create_todo(client: Client) -> Result<reqwest::blocking::Response, reqwest::Error> {
let url = "https://jsonplaceholder.typicode.com/todos";
let body = json!({
"title": "foo",
"body": "bar",
"userId": 1
});
client.post(url).json(&body).send()
}
GET
GET時もPOST時とほとんど同じです。
もしクエリパラメータを追加したい場合は、get メソッドの後に query メソッドを呼び出します。
main.rs
use reqwest::blocking::Client;
use serde_json::json;
fn main() {
let client = Client::new();
let res = fetch_todo(client).unwrap();
println!("{:?}", res)
}
fn fetch_todo(client: Client) -> Result<reqwest::blocking::Response, reqwest::Error> {
let url = "https://jsonplaceholder.typicode.com/todos/1";
client.get(url).send()
}
おわりに
今回は外部APIの実行を reqwest
クレートを使った方法を紹介しました。
次の記事では、非同期編としてやっていこうと思います!
では。
Discussion