#serde-json #http #async-http #hyper #tokio #htt-pv2

reywenhttp

一个简单易用的Rust HTTPv2库(基于tokio/reqwest)

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 中使用

GPL-3.0-only

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