Crate api_req

Source
Expand description

Make API calls more easier!

§Advantage

For example:

use api_req::Method;

#[derive(Debug, Default, Clone, Serialize, Payload)]
#[payload(
    path = "/payments/{customer_id}", // format from struct fields
    method = Method::POST,
    ...
)]
pub struct ExamplePayload {
    #[serde(skip_serializing)]
    customer_id: String,
    amount: usize,
}

You can not only define the path, method, payload-format, pre-deserialize-action, and deserialize method, but also can format the path, headervalue with fields in the payload struct.

§Example

use api_req::{header, Payload, RedirectPolicy, ApiCaller, Method, ApiCaller as _};
use serde::{Serialize, Deserialize};
#[derive(Debug, Default, Clone, Serialize, Payload)]
#[payload(
    path = "/payments/{customer_id}",
    method = Method::POST,
    headers = ((header::AUTHORIZATION, "Bearer token {bearer_token}"),),
    before_deserialize = |text: String | text.strip_prefix("START: ").map(ToOwned::to_owned).ok_or(text),
    deserialize = serde_urlencoded::from_str,
)]
pub struct ExamplePayload {
    #[serde(skip_serializing)]  // skip this field when serializing payload
    customer_id: String,
    #[serde(skip_serializing)]
    bearer_token: String,
    amount: usize,
}

#[derive(Debug, Deserialize)]
struct ExampleResponse {
    client_secret: String,
}

#[derive(ApiCaller)]
#[api(
    base_url = "http://example.com",
    default_headers = ((header::USER_AGENT, "..."),),
    default_headers_env = (("api-key", "API_KEY"),),    // get from env
    redirect = RedirectPolicy::none()   // set redirect policy
)]
struct ExampleApi;

let payload = ExamplePayload::default();
let _resp: ExampleResponse = ExampleApi::request(payload).await.unwrap();
// this will send a POST request to http://example.com/payments/{customer_id}
// with json `{"amount": 0}`

For POST request, the payload will be serialized as json body.

For GET request, the payload will be serialized as query parameters (urlencoded).

For other methods, not supported yet.

Modules§

error
Error module
header
HTTP header types

Structs§

Client
An asynchronous Client to make Requests with.
Method
The Request Method (VERB)
RedirectPolicy
A type that controls the policy on how to handle the following of redirects.
Request
A request to the API, wrapping the payload into a future.
RequestBuilder
A builder to construct the properties of a Request.

Traits§

ApiCaller
Define a API caller
Payload
Define a API that can be called

Derive Macros§

ApiCaller
Derive the Api trait
Payload
Derive the Api trait