18个版本
0.1.18 | 2023年12月10日 |
---|---|
0.1.17 | 2023年10月25日 |
0.1.16 | 2023年7月26日 |
0.1.9 | 2023年6月2日 |
0.1.6 | 2023年5月23日 |
#294 in HTTP客户端
在 reywen 中使用
29KB
682 行
Reywen-HTTP
为什么还需要另一个HTTP库?
最初,我在Revolt.chat的项目中维护了自己的HTTP库,但随着项目的扩大,现在它已经独立成库。换句话说,这个库可以很容易地被任何人用于任何API!
特性
- 内置serde支持
- 可以使用多种HTTP引擎
- WASM支持
- Tokio异步
使用Hypixel API的示例
如以下所示,该库可以在没有太多预先设置或配置的情况下使用,并且是异步运行的。
此示例使用Hyper作为后端,但还有许多不同的HTTP引擎可供使用。所有这些引擎都实现了相同的Request/ReqRaw语法
use crate::engines::hyper::{Error, Hyper};
use hyper::Method;
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Serialize, Debug, Deserialize, Default)]
pub struct ExampleData {
field1: String,
}
impl From<ExampleData> for Option<Vec<u8>> {
fn from(value: ExampleData) -> Self {
todo!()
}
}
pub async fn hypixel_example() -> Result<(), Error> {
// define client, fields within the client declaration are global and will apply to all requests
// unless overwritten
let client = Hyper::new().set_url("https://api.hypixel.net");
// request requires serde and will deserialize data based on the T input type
println!(
"{}",
client
.request::<Value>(Method::GET, "/skyblock/bazaar", None)
.await?
);
// request raw will return a byte array for as the response
client
.request_raw(Method::GET, "/skyblock/bazaar", None)
.await?;
// data sent over request or request_raw must be of type Vec<u8>, String or any type that can be
// converted to those types
client
.clone()
.set_url("example.com")
.request_raw(Method::POST, "", ExampleData::default())
.await?;
Ok(())
}
依赖关系
~2–21MB
~281K SLoC