#gitlab #git #api-bindings

gitlab-api

GitLab API v3 的包装器

5 个版本 (破坏性更新)

使用旧的 Rust 2015

0.6.0 2017年2月3日
0.5.2 2017年1月31日
0.4.0 2016年12月7日
0.3.0 2016年12月5日
0.2.0 2016年12月3日

#45 in #gitlab

MIT/Apache

1MB
3K SLoC

gitlab-api-rs

Rust 对 GitLab API 的包装。

Crates.io Build Status Documentation License Coverage Status Codecov

注意:由于此 crate 使用自定义 derive for Serde,因此需要 Rust 1.15(稳定版)。

概要

GitLab 是一款惊人的工具。对于大多数任务,Web UI 已经足够,但对于某些任务,没有脚本能比得上。GitLab API 允许在 GitLab 服务器上执行脚本操作。

优秀的 python-gitlab 允许从 Python 使用 API,但当我使用它时,我发现自己在缺少 Rust 的静态类型。因此,这里提供了 Rust 的实现。

(v3) API 相当长,所以我将首先实现我需要的部分。

功能

  • 只读列表
    • 组;
    • 问题;
    • 合并请求;
    • 项目(管理员所有、用户所有、特定 id、所有者、搜索);

不工作

  • 任何 写入 命令(如 POSTPUT 等)

  • 任何 企业版 特定功能。

  • 使用数组的 API 元素。

    例如,列出合并请求,使用多个 iid 过滤

    GET /projects/:id/merge_requests?iid[]=42&iid[]=43
    
  • 一些项目列表

    • 分支;
    • 分支;
    • 事件;
    • 钩子;
    • 钩子;
    • 收藏;
    • 可见性;

用法

[dependencies]
gitlab-api = "0.6"

此 crate 使用构建器模式向查询添加过滤器。一旦构建了查询,list() 将通过联系 GitLab 服务器并执行请求来提交它。

extern crate gitlab_api as gitlab;

fn main() {
    let gl = gitlab::GitLab::new(&"gitlab.com", &"GITLAB_TOKEN_XXXXXXX").unwrap();

    // Get GitLab's version.
    let gitlab_version = gl.version().unwrap();
    println!("gitlab_version: {:?}", gitlab_version);


    // Low level methods

    // Get projects, owned by authenticated user and which are archived.
    let projects = gl.projects().owned().archived(true).list().unwrap();
    println!("projects: {:?}", projects);

    // Get groups owned by authenticated user.
    let owned_groups = gl.groups().owned().list().unwrap();
    println!("owned_groups: {:?}", owned_groups);

    // Get closed issues.
    let closed_issues = gl.issues().state(gitlab::issues::State::Closed).list().unwrap();
    println!("closed_issues: {:?}", closed_issues);


    // Higher level methods

    // Get a specific project
    let project = gl.get_project("nbigaouette1", "gitlab-api-rs").chain_err(|| "cannot get project")?;

    // Get a specific issue
    let issue = gl.get_issue("nbigaouette1", "gitlab-api-rs", 1).chain_err(|| "cannot get issue")?;

    // Get a specific merge request
    let merge_request = gl.get_merge_request("nbigaouette1", "gitlab-api-rs", 1).chain_err(|| "cannot get merge_request")?;
}

注意:

  • Crate 默认使用 https。使用 GitLab::new_insecure() 使用 http(或 port()sheme() 设置器在 GitLab 结构上)。
  • http 上明文发送您的令牌是危险的!
  • 请参阅 examples/list_projects.rs 以了解如何从环境变量中加载令牌(以及主机名)的示例。
  • 请参阅 examples 目录以了解如何使用此 crate 的更多示例。

依赖项

感谢 cargo-graph 提供的图!

Dependencies

许可协议

gitlab-api-rs 在 MIT 许可协议和 Apache 许可协议(版本 2.0)的条款下分发。

请参阅 LICENSE-APACHELICENSE-MIT 以了解详细信息。

依赖项

~15MB
~328K SLoC