1 unstable release
0.1.0 | Mar 3, 2024 |
---|
#1151 in Encoding
54 downloads per month
Used in 4 crates
(2 directly)
23KB
490 lines
restless
REST API wrappers with less pain. This trait exposes helper traits that let you define your API in terms of trait implementations. Useful to remove redundant code if you use Rust on the backend and then frontend. Similar to standards such as OpenAPI, but uses the Rust trait system. The trait implementation gives you API clients for free.
Examples
If you build a useful type that encapsulates all information about your REST request, such as this:
/// GET /api/v1/users/:name/documents/:id
pub struct UserDocument {
user: String,
document: Uuid,
}
Then you can implement the GetRequest
trait for this type and use the RequestMethod
marker.
use restless::{GetRequest, method::Get};
impl GetRequest for UserDocument {
type Response = Json<Document>;
type Query = ();
fn path(&self) -> Cow<'_, str> {
format!("api/v1/users/{}/documents/{}", self.user, self.document).into()
}
fn query(&self) -> Self::Query {}
}
impl RequestMethod for UserDocument {
type Method = Get<Self>;
}
Now you can make this kind of request using the built-in clients.
Clients
This crate offers integrations with the following HTTP clients and frameworks by enabling the corresponding feature:
Name | Description |
---|---|
reqwest | Make HTTP requests using the reqwest crate. |
gloo | Make HTTP requests in WebAssembly Rust applications using the gloo_net crate. |
yew | Make HTTP requests from within Yew frontend components. |
License
MIT, see LICENSE.md
lib.rs
:
restless data
This crate encodes several strategies for encoding and decoding data from requests and response bodies.
As a consumer of restless
, you should not depend on this crate directly, but rather on the
main restless
crate and turn on the prerequisite features.
Dependencies
~0.3–1.4MB
~31K SLoC