pub struct FWClient { /* private fields */ }
Expand description
A client for interacting with the FW API.
Wraps the reqwest
crates Client
and RequestBuilder
, but includes middleware for retrying all requests
are authenticated with the provided API key and set the user agent.
use serde_json::Value;
use fw_client::{FWClientBuilder, FWClient};
#[tokio::main]
pub async fn main() {
// Initiate client
let client = FWClientBuilder::from("scitran-user httpbin.org:test_api_key")
.build()
.expect("Failed to create FWClient");
// Send a POST request with headers, query parameters, and a body
let resp = client.post("/post")
.header("Content-Type", "application/json")
.query(&[("param", "value1")])
.body(r#"{"key": "value2"}"#)
.send()
.await
.unwrap()
.json::<Value>()
.await
.unwrap();
assert_eq!(resp["json"]["key"], "value2");
assert_eq!(resp["args"]["param"], "value1");
assert_eq!(resp["headers"]["Authorization"], "scitran-user httpbin.org:test_api_key");
}
If you need to request a full URL instead of an endpoint, you can use the
FWClient::request
method.
use reqwest::Method;
use serde_json::Value;
use fw_client::{FWClientBuilder, FWClient};
#[tokio::main]
pub async fn main() {
// Initiate client
let client = FWClientBuilder::new("scitran-user fw_instance:test_api_key".parse().unwrap())
.build()
.expect("Failed to create FWClient");
// Send a PUT request with an absolute URL and no authentication
let resp = client.request(Method::PUT, "https://httpbin.org/put")
.header("Content-Type", "application/json")
.body(r#"{"key": "value"}"#)
.send()
.await
.unwrap()
.json::<Value>()
.await;
}
If you need to skip authentication or retry logic for a specific request, you can use the
FWOptions
extension. This is useful for requests that can’t have authorization, or for
requests that can’t be retried (e.g. POST requests that create resources).
use reqwest::Method;
use serde_json::Value;
use fw_client::{FWClientBuilder, FWClient, FWOptions};
// Initiate client
let client = FWClientBuilder::new("scitran-user httpbin.org:test_api_key".parse().unwrap())
.build()
.expect("Failed to create FWClient");
// Send a PUT request with an absolute URL and no authentication
let resp = client.post("/post")
.header("Content-Type", "application/json")
.body(r#"{"key": "value"}"#)
.with_extension(fw_client::FWOptions {
skip_retry: true, // Skip retry logic for this request
no_auth: true, // Skip authentication for this request
})
.send()
.await
.unwrap()
.json::<Value>()
.await
.unwrap();
assert!(resp["headers"]["Authorization"].is_null());
Implementations§
Source§impl FWClient
impl FWClient
Sourcepub fn get(&self, endpoint: &str) -> RequestBuilder
pub fn get(&self, endpoint: &str) -> RequestBuilder
Create a new get request with the given endpoint
Sourcepub fn post(&self, endpoint: &str) -> RequestBuilder
pub fn post(&self, endpoint: &str) -> RequestBuilder
Create a new post request with the given endpoint
Sourcepub fn put(&self, endpoint: &str) -> RequestBuilder
pub fn put(&self, endpoint: &str) -> RequestBuilder
Create a new put request with the given endpoint
Sourcepub fn delete(&self, endpoint: &str) -> RequestBuilder
pub fn delete(&self, endpoint: &str) -> RequestBuilder
Create a new delete request with the given endpoint
Sourcepub fn head(&self, endpoint: &str) -> RequestBuilder
pub fn head(&self, endpoint: &str) -> RequestBuilder
Create a new head request with the given endpoint
Sourcepub fn patch(&self, endpoint: &str) -> RequestBuilder
pub fn patch(&self, endpoint: &str) -> RequestBuilder
Create a new patch request with the given endpoint
Sourcepub fn request(&self, method: Method, url: &str) -> RequestBuilder
pub fn request(&self, method: Method, url: &str) -> RequestBuilder
Create a new request with a given method, and absolute URL