#github #async #github-api #endpoint #repos

roctogen

基于官方 Swagger OpenAPI 规范生成的 GitHub API 和模型

15 个版本 (破坏性更新)

0.12.0 2022年1月6日
0.11.0 2021年10月24日
0.10.0 2021年8月15日
0.8.0 2021年7月12日
0.1.2 2021年3月22日

#5 in #repos

每月45 次下载

Apache-2.0

4.5MB
72K SLoC

license docs GitHub workflow

Roctogen:GitHub v3 API 的 Rust 客户端库

此客户端 API 来自于 上游 OpenAPI 规范。该库目前支持 WebAssembly 以及基于 tokio 和非 tokio 的异步请求和最小依赖阻塞的同步请求,可通过 cargo 特性选择不同的客户端

安装

将以下内容添加到您的 Cargo.toml 文件中

[dependencies]
roctogen = "0.12"

API

文档

API 文档.

端点.

支持的端点

使用

此库的快速示例

use roctogen::api::{self, repos};
use roctogen::auth::Auth;

let auth = Auth::None;
let per_page = api::PerPage::new(10);

let mut params: repos::ReposListCommitsParams = per_page.as_ref().into();
params = params.author("fussybeaver").page(2);

repos::new(&auth).list_commits("fussybeaver", "bollard", Some(params));

异步

所有 async 方法都以 _async 后缀命名,并在 wasm 目标或 isahcreqwest 适配器上提供。

Webassembly

要为 WebAssembly 编译,您可以使用 wasm-pack 或使用 wasm32-unknown-unknown 目标进行编译

$ wasm-pack build
$ cargo build --target wasm32-unknown-unknown

如果您正在构建 cloudflare worker,则应使用 wrangler 包装器

$ wrangler preview --watch

客户端适配器

在非 wasm 目标上构建通常需要为所需的客户端适配器采用一个功能

Isahc

isahc 客户端编译需要 isahc 功能

$ cargo build --features isahc

Reqwest

reqwest 客户端编译需要 reqwest 功能

$ cargo build --features reqwest

Ureq

ureq 客户端编译需要 ureq 功能

$ cargo build --features ureq

GitHub 预览功能

GitHub 支持通过头部标志分阶段推出非稳定端点。这些通过本库中的 cargo 功能标志进行支持。

$ cargo build --features squirrel-girl

生成 API

大部分代码通过 Swagger OpenAPI 生成器 (版本 3) 生成。构建需要 Java 版本 8 的 mvn Java 构建工具(因此你需要一个合适的 JDK)。

$ mvn -D org.slf4j.simpleLogger.defaultLogLevel=info clean compiler:compile generate-resources

测试

请注意,未使用 mock 功能运行的测试目前仍在向 GitHub API 发送真实的 HTTP 请求。

运行 wasm 测试

$ wasm-pack test --firefox --headless

运行同步测试

$ cargo test --features isahc,mercy,squirrel-girl,inertia,starfox --target x86_64-unknown-linux-gnu -- --nocapture

为了避免 GitHub API 的速率限制,你可以使用 wiremock 运行非 wasm 测试。你需要将 wiremock 在后台启动

$ docker run -d --name wiremock -p 8080:8080 -v $PWD/tests/stubs:/home/wiremock
rodolpheche/wiremock

重新生成 wiremock 模拟代码

如果远程 API 已更改,你应该重新生成模拟代码

$ docker run -d --name wiremock -p 8080:8080 -v $PWD/tests/stubs:/home/wiremock -u (id -u):(id -g) rodolpheche/wiremock --verbose --proxy-all="https://api.github.com" --record-mappings

许可证:Apache-2.0

依赖项

约 2-20MB
约 253K SLoC