5个版本 (破坏性)
0.5.0 | 2022年12月19日 |
---|---|
0.4.0 | 2022年11月28日 |
0.3.0 | 2022年8月1日 |
0.2.0 | 2022年7月17日 |
0.1.0 | 2022年7月4日 |
#203 在 #network
每月21次下载
用于 lucia-apis
180KB
5K SLoC
Lucia
一个灵活的客户端API框架,用于使用Rust编程语言编写异步、快速、可组织、可扩展且易于维护的应用程序。支持多种数据格式、传输和自定义参数。
查看lucia-apis
项目,以查看基于lucia
的API集合。
基础设施
实现Package
特质的结构描述请求数据以及任何其他附加参数,如HTTP头值。
附加到API实例的辅助元素(如字节缓冲区或节流参数)在单独的强制实体PkgsAux
中声明,该实体负责协助创建和管理包及其请求。
请查看以下使用lucia_macros
创建JSON-RPC请求、使用reqwest
发送数据以及使用serde_json
解码从服务器返回的字节示例。
use lucia::{dnsn::SerdeJson, network::{transport::Transport, HttpParams}};
lucia::create_packages_aux_wrapper!();
#[derive(Debug)]
pub struct MyApi;
type MyApiPackagesAux = PkgsAux<MyApi, SerdeJson, HttpParams>;
#[lucia::pkg(api(super::MyApi), data_format(json_rpc("my_endpoint")), transport(http))]
mod my_endpoint {
#[pkg::aux]
impl super::MyApiPackagesAux {}
#[derive(Debug, serde::Serialize)]
#[pkg::req_data]
pub struct MyEndpointReq<'any> {
pub foo: i64,
pub bar: &'any str,
}
#[derive(Debug, serde::Deserialize)]
#[pkg::res_data]
pub struct MyEndpointRes {
pub data: i32,
}
}
pub async fn fetch_my_endpoint() -> lucia::Result<i32> {
let pkgs_aux = &mut MyApiPackagesAux::from_minimum(
MyApi,
SerdeJson,
HttpParams::from_url("https://www.some_url.com/api/v1")?,
);
let pkg = &mut pkgs_aux.my_endpoint().data(123, "321").build();
let trans = &mut reqwest::Client::new();
Ok(trans.send_retrieve_and_decode_contained(pkg, pkgs_aux).await?.result?.data)
}
数据格式
每个请求都附加一个或多个特定于API的数据格式。
它们将被序列化和反序列化,因此为了创建另一种数据格式,需要根据所需的序列化器实现Deserialize
和Serialize
。
名称 | URL |
---|---|
Borsh | https://borsh.io/ |
GraphQL | https://spec.graphql.org/ |
JSON | https://www.json.org/json-en.html |
JSON-RPC 2.0 | https://www.jsonrpc.org/ |
Protobuf | https://developers.google.com/protocol-buffers |
XML | https://www.w3.org/TR/xml/ |
YAML | https://yaml.org/spec/ |
反序列化器/序列化器
可应用于一个或多个不同的数据格式。
功能 | URL |
---|---|
borsh | https://docs.rs/borsh |
miniserde | https://docs.rs/miniserde |
rkyv | https://docs.rs/rkyv |
rust-protobuf | https://docs.rs/protobuf |
serde_json | https://docs.rs/serde_json |
serde-xml-rs | https://docs.rs/serde-xml-rs |
serde-yaml | https://docs.rs/serde_yaml |
simd-json | https://docs.rs/simd-json |
传输
请求应该如何部署。传输有自己的特例,方便地称为 Transport
。
可以在 lucia-macros
中声明自定义传输实现,使用 transport(custom(SomeTransport))
属性。
名称 | 功能 | URL |
---|---|---|
Reqwest | reqwest | https://docs.rs/reqwest |
Surf | surf | https://docs.rs/surf |
TcpStream | std | https://doc.rust-lang.net.cn/std/net/struct.TcpStream.html |
tokio-tungstenite | tokio-tungstenite | https://docs.rs/tokio-tungstenite |
UdpStream | std | https://doc.rust-lang.net.cn/std/net/struct.UdpSocket.html |
依赖项
~0.4–21MB
~286K SLoC