#http-client #user #public-api #packet #io #cache #api-testing

tetrio-api

围绕 https://ch.tetr.io/ 公共API的包装器

5个版本 (3个破坏性版本)

0.4.0 2024年2月11日
0.3.0 2023年12月6日
0.2.0 2023年12月2日
0.1.1 2023年11月24日
0.1.0 2023年11月24日

#13 in #api-testing

Download history

每月 69 次下载

MIT 许可证

90KB
1K SLoC

tetrio-api

codecov

一个用于与TETR.IO 公共API交互的库,具有一个简单的http客户端,不管理缓存,以及一个"cached-http-client",它将API获取的数据存储在内存中。已经存在一个用于在Rust中与API交互的库这里,但我仍然需要一个更简单的方式来与缓存交互,所以我最终不得不开发这个库。

该库试图与API规范保持一致,但我不得不做一些妥协,因为

  • 我需要访问未记录的回放数据
  • 有时文档部分不准确,这会导致尝试使用库时出错。

这个库可能并不完美,但我确实编写了测试,由于Rust模型是严格的,模型必须符合API的当前状态才能通过测试,使其基本准确和可用。

这不是TETR.IO官方关联的库。

快速入门

安装

您可以通过cargo添加此包

cargo add tetrio-api

或者将其添加到您的Cargo.toml中

[dependencies]
tetrio-api = { "git" = "https://github.com/Takathediscordbot/tetrio-api" }

这将自动将此API的最新版本添加到您的依赖项中。

您还可以使用特定的提交,如下所示

[dependencies]
tetrio-api = { "git" = "https://github.com/Takathediscordbot/tetrio-api", rev="64a0516" }

使用方法

获取用户

use std::f64::NAN;

use tetrio_api::{http::client, models::packet::Packet};

#[tokio::main]
async fn main() {
    let user = client::fetch_user_info("takathedinosaur").await.expect("Couldn't fetch the CH.TETR.IO API to find the error! This could have been an error while parsing the data or while trying to send the HTTP request.");

    match user {
        Packet { data: Some(data), .. } => {

            println!("{} (id: {}): {}pps, {}apm {}vs", data.user.username, data.user.id, data.user.league.pps.unwrap_or(NAN), data.user.league.apm.unwrap_or(NAN), data.user.league.vs.unwrap_or(NAN));
        },
        Packet { success, error, .. } => {
            if success {
                eprintln!("The API didn't return an error but no data was found somehow!"); 
                // According to the API documentation that is not a possible case.
                unreachable!();
            }

            eprintln!("An error has occured while trying to fetch the user! {:?}", error)            
        }
    };
}

示例

在git仓库的示例文件夹中有代码示例。那里的readme将指示如何运行示例。

获取用户

运行测试

在使用库之前确保其功能正常,您可以运行以下命令来运行测试

cargo test

但是,运行测试可能会失败,因为速率限制,您可以使用以下命令限制同时运行的线程数

cargo test -- --test-threads=2

测试将运行得明显更慢,但不应因速率限制而失败。您也可以尝试使用更高的数字,如果测试仍然因为速率限制而无法工作,可以将线程限制为1以完全消除并行性。

依赖项

~7-20MB
~302K SLoC