#github #github-api #user #auth-token #api-client #rest-client #user-agent

octorust

GitHub API 的完全生成且具有倾向性的 API 客户端

44 个版本

0.8.0-rc.12024年5月29日
0.7.0 2023年7月19日
0.7.0-rc.12023年6月12日
0.3.2 2023年3月30日
0.1.16 2021年7月27日

#46 in Web 编程

Download history 3533/week @ 2024-05-03 2540/week @ 2024-05-10 2838/week @ 2024-05-17 2815/week @ 2024-05-24 2642/week @ 2024-05-31 2798/week @ 2024-06-07 2929/week @ 2024-06-14 1755/week @ 2024-06-21 1533/week @ 2024-06-28 1470/week @ 2024-07-05 1480/week @ 2024-07-12 1790/week @ 2024-07-19 1559/week @ 2024-07-26 1704/week @ 2024-08-02 1776/week @ 2024-08-09 1489/week @ 2024-08-16

7,078 每月下载量
4 个 crate 中使用 (直接使用 3 个)

MIT 许可证

2.5MB
55K SLoC

octorust

GitHub 的完全生成、具有倾向性的 API 客户端库。

docs.rs

API 详情

GitHub 的 v3 REST API。

API 服务条款

联系

姓名 网址
支持 https://support.github.com/contact?tags=rest-api

许可证

姓名 网址
MIT https://spdx.org/licenses/MIT

客户端详情

此客户端基于 API 规范版本 1.1.4GitHub OpenAPI 规范 生成。这样,随着新功能的添加,它将保持最新。crate 的文档与代码一起生成,以便轻松使用此库。

要安装库,请将以下内容添加到您的 Cargo.toml 文件中。

[dependencies]
octorust = "0.8.0-rc.1"

基本示例

典型用法需要初始化一个 Client。这需要一个用户代理字符串和一组 auth::Credentials

use octorust::{auth::Credentials, Client};

let github = Client::new(
  String::from("user-agent-name"),
  Credentials::Token(
    String::from("personal-access-token")
  ),
);

如果您是 GitHub 企业客户,您将想要使用 Client#host_override 方法创建客户端。

功能标志

httpcache

GitHub 支持使用 etags 进行条件 HTTP 请求以校验响应。使用 httpcache 功能标志对利用此功能在本地缓存响应进行实验性支持。

要启用此功能,请将以下内容添加到您的 Cargo.toml 文件中

[dependencies]
octorust = { version = "0.8.0-rc.1", features = ["httpcache"] }

然后使用 Client::custom 构造函数提供缓存实现。

以下是一个示例

use octorust::{auth::Credentials, Client};
#[cfg(feature = "httpcache")]
use octorust::http_cache::HttpCache;

#[cfg(feature = "httpcache")]
let http_cache = HttpCache::in_home_dir();

#[cfg(not(feature = "httpcache"))]
let github = Client::custom(
    concat!(env!("CARGO_PKG_NAME"), "/", env!("CARGO_PKG_VERSION")),
    Credentials::Token(
      String::from("personal-access-token")
    ),
    reqwest::Client::builder().build().unwrap(),
);

#[cfg(feature = "httpcache")]
let github = Client::custom(
    concat!(env!("CARGO_PKG_NAME"), "/", env!("CARGO_PKG_VERSION")),
    Credentials::Token(
      String::from("personal-access-token")
    ),
    reqwest::Client::builder().build().unwrap(),
    http_cache
);

验证 GitHub 应用程序

您还可以通过 GitHub 应用程序进行验证。

以下是一个示例

use std::env;

use octorust::{Client, auth::{Credentials, InstallationTokenGenerator, JWTCredentials}};
#[cfg(feature = "httpcache")]
use octorust::http_cache::FileBasedCache;
use base64::{Engine, engine::general_purpose::STANDARD};

let app_id_str = env::var("GH_APP_ID").unwrap();
let app_id = app_id_str.parse::<u64>().unwrap();

let app_installation_id_str = env::var("GH_INSTALLATION_ID").unwrap();
let app_installation_id = app_installation_id_str.parse::<u64>().unwrap();

let encoded_private_key = env::var("GH_PRIVATE_KEY").unwrap();
let private_key = STANDARD.decode(encoded_private_key).unwrap();

// Decode the key.
let key = nom_pem::decode_block(&private_key).unwrap();

// Get the JWT credentials.
let jwt = JWTCredentials::new(app_id, key.data).unwrap();

// Create the HTTP cache.
#[cfg(feature = "httpcache")]
let mut dir = dirs::home_dir().expect("Expected a home dir");
#[cfg(feature = "httpcache")]
dir.push(".cache/github");
#[cfg(feature = "httpcache")]
let http_cache = Box::new(FileBasedCache::new(dir));

let token_generator = InstallationTokenGenerator::new(app_installation_id, jwt);

#[cfg(not(feature = "httpcache"))]
let github = Client::custom(
    concat!(env!("CARGO_PKG_NAME"), "/", env!("CARGO_PKG_VERSION")),
    Credentials::InstallationToken(token_generator),
    reqwest::Client::builder().build().unwrap(),
);

#[cfg(feature = "httpcache")]
let github = Client::custom(
    concat!(env!("CARGO_PKG_NAME"), "/", env!("CARGO_PKG_VERSION")),
    Credentials::InstallationToken(token_generator),
    reqwest::Client::builder().build().unwrap(),
    http_cache,
);

致谢

感谢 hubcaps 为此铺平道路。这种方式扩展了这项努力,使得库始终与 OpenAPI 规范保持同步,不再需要手动贡献来添加新的端点。

依赖项

~16–31MB
~591K SLoC