44 个版本
0.8.0-rc.1 | 2024年5月29日 |
---|---|
0.7.0 | 2023年7月19日 |
0.7.0-rc.1 | 2023年6月12日 |
0.3.2 | 2023年3月30日 |
0.1.16 | 2021年7月27日 |
#46 in Web 编程
7,078 每月下载量
在 4 个 crate 中使用 (直接使用 3 个)
2.5MB
55K SLoC
octorust
GitHub 的完全生成、具有倾向性的 API 客户端库。
API 详情
GitHub 的 v3 REST API。
联系
姓名 | 网址 |
---|---|
支持 | https://support.github.com/contact?tags=rest-api |
许可证
姓名 | 网址 |
---|---|
MIT | https://spdx.org/licenses/MIT |
客户端详情
此客户端基于 API 规范版本 1.1.4
从 GitHub 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