#rest-api #rest

octocrate

基于Rust的全面GitHub REST API库

22个版本 (3个稳定版)

2.0.1 2024年8月3日
2.0.0 2024年7月15日
2.0.0-beta.12024年5月20日
1.0.0 2024年5月11日
0.1.4 2023年6月1日

#48HTTP客户端

Download history 157/week @ 2024-05-03 202/week @ 2024-05-10 164/week @ 2024-05-17 49/week @ 2024-05-24 12/week @ 2024-05-31 10/week @ 2024-06-07 12/week @ 2024-06-14 12/week @ 2024-06-21 138/week @ 2024-07-12 42/week @ 2024-07-19 9/week @ 2024-07-26 131/week @ 2024-08-02 502/week @ 2024-08-09 507/week @ 2024-08-16

1,151 每月下载量
11 个crate(5个直接) 中使用

MIT 许可证

2.5MB
44K SLoC

Octocrate

octocrate 是一个基于Rust的全面GitHub REST API库。

octocrate MIT

英文 | 简体中文

功能

  • 完全符合GitHub REST API文档中的官方文档
  • Body / Query参数的完整类型限制
  • 使用功能标志针对单个API依赖项
  • 支持GitHub应用程序的安装API请求
  • 支持安装访问令牌和个人访问令牌
  • 定义所有Webhooks事件类型

依赖项

[dependencies]
octocrate = "*"

使用功能来选择性导入所需的API

octocrate = { version = "*", features = ["repos", "git", "pulls", "issues", "users", "search"] }

或者使用 full 功能来导入所有API和Webhooks(注意:这将增加编译时间)

octocrate = { version = "*", features = ["full"] }

类型依赖

您还可以仅导入类型而不使用相应的API

octocrate-types = "*"

使用功能来选择性导入所需的类型

octocrate-types = { version = "*", features = ["repos", "git", "pulls", "issues", "users", "search"] }

导入Webhooks类型

octocrate-webhooks = { version = "*", features = ["pull_request", "push"] }

您可以在 octocrate-types 文档octocrate-webhooks 文档 中找到所有支持的功能和类型。

示例

创建默认的GitHub API配置并使用它获取存储库的Pull Request

use octocrate::{APIConfig, Error, GitHubAPI};

#[tokio::main]
async fn main() {
  // Create a default GitHub API configuration
  let config = APIConfig::default().shared();

  let api = GitHubAPI::new(&config);

  let pull_request = api
    .pulls
    .get("panghu-huang", "octocrate", 1)
    .send()
    .await
    .unwrap();

  // ..
}

直接导入相应的API

// Import the repos API instead of GitHubAPI
use octocrate::{repos::GitHubReposAPI, APIConfig, GitHubAPI, PersonalAccessToken};

#[tokio::main]
async fn main() {
  // Create a personal access token
  let personal_access_token = PersonalAccessToken::new("YOUR_PERSONAL_ACCESS_TOKEN");

  // Use the personal access token to create a API configuration
  let config = APIConfig::with_token(personal_access_token).shared();

  let repos_api = GitHubReposAPI::new(&config);

  let commit = repos_api
    .get_commit(
      "panghu-huang",
      "octocrate",
      "18ff8ed1a3437649e7d87bec9a7d4fe5562f6ad3",
    )
    .send()
    .await
    .unwrap();
}

使用GitHub应用程序

use octocrate::{APIConfig, AppAuthorization, GitHubAPI};

#[tokio::main]
async fn main() {
  let app_id = "YOUR_APP_ID";
  let private_key = "YOUR_PRIVATE_KEY";

  // Create a GitHub App authorization
  let app_authorization = AppAuthorization::new(app_id, private_key);

  // Use the GitHub App authorization to create an API configuration
  let config = APIConfig::with_token(app_authorization).shared();

  let api = GitHubAPI::new(&config);

  // Get the Installation for a repository
  let installation = api
    .apps
    .get_repo_installation("panghu-huang", "octocrate")
    .send()
    .await
    .unwrap();

  // Get the Installation Access Token for this Installation
  let installation_token = api
    .apps
    .create_installation_access_token(installation.id)
    .send()
    .await
    .unwrap();

  // Use the Installation Access Token to create a new API configuration
  let config = APIConfig::with_token(installation_token).shared();

  let api = GitHubAPI::new(&config);

  let repository = api
    .repos
    .get("panghu-huang", "octocrate")
    .send()
    .await
    .unwrap();

  // ..
}

请求体参数

use octocrate::{
  issues, APIConfig, AuthorAssociation, GitHubAPI, PersonalAccessToken,
};

#[tokio::main]
async fn main() {
  let personal_access_token = PersonalAccessToken::new("YOUR_PERSONAL_ACCESS_TOKEN");

  let config = APIConfig::with_token(personal_access_token).shared();

  let api = GitHubAPI::new(&config);

  // Create a comment request
  // https://github.com/panghu-huang/octocrate/pull/1#issuecomment-2041280635
  let comment = issues::create_comment::Request {
    body: "Hello, world! (Created by octocrate)".to_string(),
  };

  // Create a comment on the issue
  let issue_comment = api
    .issues
    .create_comment("panghu-huang", "octocrate", 1)
    .body(&comment)
    .send()
    .await
    .unwrap();
}

请求查询参数

use octocrate::{
  pulls, APIConfig, Error, GitHubAPI, PersonalAccessToken,
};

#[tokio::main]
async fn main() {
  let personal_access_token = PersonalAccessToken::new("YOUR_PERSONAL_ACCESS_TOKEN");

  let config = APIConfig::with_token(personal_access_token).shared();

  let api = GitHubAPI::new(&config);

  // Use builder pattern to construct query parameters
  let query = pulls::list::Query::builder()
    .state(pulls::list::QueryState::Open)
    .per_page(10)
    .build()

  let pull_requests = api
    .pulls
    .list("facebook", "react")
    .query(&query)
    .send()
    .await
    .unwrap();

  // ..
}

您可以在octocrate/examples 目录中找到更多示例代码。

贡献

欢迎贡献!请随意打开问题或提交拉取请求以改进项目。

许可证

本项目采用MIT许可证。

依赖项

~5–20MB
~340K SLoC