跳转至

获取单个Pull Request

GET /api/v5/repos/{owner}/{repo}/pulls/{number}

该接口用于获取指定仓库中单个 Pull Request 的详细信息,包括标题、状态、审核人与测试人信息、标签、合并门禁状态、里程碑及合并结果等,帮助开发者了解某一具体合并请求的完整情况。

访问令牌支持说明

  • AtomGit 用户访问令牌(AtomGit user access tokens)

是否允许匿名访问

此接口允许匿名访问

请求参数

参数名 位置 类型 必填 说明
owner path string 是 仓库所属空间地址(组织或个人的地址path)
repo path string 是 仓库路径(path)
number path integer 是 第几个PR,即本仓库PR的序数
access_token query string 否 用户授权码(可选)

响应参数

字段 类型 必返 可为空 说明
id integer 是 否 Pull Request 的 ID
html_url string 是 否 Pull Request 的 HTML 地址
number integer 是 否 序号
state string 是 否 状态,枚举:open / closed / merged
title string 是 否 标题
url string 是 否 api url
issue_url string 是 否 关联的 issue api url
body string 是 否 描述
assignees_number integer 是 否 审核人人数
assignees object[] 是 否 审核人信息
testers object[] 是 否 测试人信息
approval_reviewers object[] 是 否 评审人信息
labels object[] 是 否 标签信息
created_at string 是 否 创建时间
updated_at string 是 否 更新时间
closed_at string 是 是 关闭时间,未关闭时为 null
merged_at string 是 是 合并时间,未合并时为 null
draft boolean 是 否 是否为草稿
can_merge_check boolean 是 否 是否通过合并检查
prune_branch boolean 是 否 合并后删除源分支
mergeable boolean 是 否 是否无冲突
user object 是 否 创建人信息
head object 是 否 提交信息
base object 是 否 目标分支信息
mergeable_state object 是 否 门禁信息
milestone object 是 否 里程碑信息
visibility_reason string 否 是 可见性,public:公开可见,other:仅项目成员可见
merged_by object 是 否 合并人
close_related_issue boolean 否 是 合并时是否关闭关联的 issue
squash_merge boolean 是 否 Squash 合并

assignees 对象数组(审核人信息)

字段 类型 必返 可为空 说明
assignees[].id string 是 否 用户 ID
assignees[].login string 是 否 登录名
assignees[].name string 是 否 姓名
assignees[].avatar_url string 是 否 头像地址
assignees[].html_url string 是 否 主页地址
assignees[].assignee boolean 是 否 是否为审核人
assignees[].code_owner boolean 是 否 是否为代码所有者
assignees[].accept boolean 是 否 是否接受

testers 对象数组(测试人信息)

字段 类型 必返 可为空 说明
testers[].id string 是 否 用户 ID
testers[].login string 是 否 登录名
testers[].name string 是 否 姓名
testers[].html_url string 是 否 主页地址
testers[].assignee boolean 是 否 是否为测试人
testers[].code_owner boolean 是 否 是否为代码所有者
testers[].accept boolean 是 否 是否接受

approval_reviewers 对象数组(评审人信息)

字段 类型 必返 可为空 说明
approval_reviewers[].id string 是 否 用户 ID
approval_reviewers[].login string 是 否 登录名
approval_reviewers[].name string 是 否 姓名
approval_reviewers[].html_url string 是 否 主页地址
approval_reviewers[].assignee boolean 是 否 是否为审核人
approval_reviewers[].code_owner boolean 是 否 是否为代码所有者
approval_reviewers[].accept boolean 是 否 是否接受
approval_reviewers[].avatar_url string 否 是 头像地址
approval_reviewers[].accept_status string 是 否 审批状态:true(已通过),reject(已拒绝),optional(待处理)

labels 对象数组(标签信息)

字段 类型 必返 可为空 说明
labels[].id integer 是 否 标签 ID
labels[].color string 是 否 标签颜色
labels[].name string 是 否 标签名称
labels[].repository_id integer 是 否 所属仓库 ID
labels[].created_at string 是 否 创建时间
labels[].updated_at string 是 否 更新时间

user 对象(创建人信息)

字段 类型 必返 可为空 说明
user.id string 是 否 用户 ID
user.login string 是 否 登录名
user.name string 是 否 姓名
user.avatar_url string 是 否 头像地址
user.html_url string 是 否 主页地址

head 对象(提交信息)

字段 类型 必返 可为空 说明
head.ref string 是 否 分支路径
head.sha string 是 否 commit id
head.label string 是 否 label
head.repo object 是 否 仓库信息
head.user object 是 否 用户信息

head.repo 对象

字段 类型 必返 可为空 说明
head.repo.path string 是 否 仓库路径
head.repo.name string 是 否 仓库名称
head.repo.namespace object 是 否 命名空间信息
head.repo.full_name string 是 否 完整名称
head.repo.html_url string 是 否 仓库 HTML 地址

head.repo.namespace 对象

字段 类型 必返 可为空 说明
head.repo.namespace.path string 是 否 命名空间路径

head.user 对象

字段 类型 必返 可为空 说明
head.user.id string 是 否 用户 ID
head.user.login string 是 否 登录名
head.user.name string 是 否 姓名
head.user.avatar_url string 是 否 头像地址
head.user.html_url string 是 否 主页地址

base 对象(目标分支信息)

字段 类型 必返 可为空 说明
base.ref string 是 否 分支路径
base.sha string 是 否 commit id
base.label string 是 否 label
base.repo object 是 否 仓库信息

base.repo 对象

字段 类型 必返 可为空 说明
base.repo.path string 是 否 仓库路径
base.repo.name string 是 否 仓库名称
base.repo.namespace object 是 否 命名空间信息
base.repo.full_name string 是 否 完整名称
base.repo.html_url string 是 否 仓库 HTML 地址

base.repo.namespace 对象

字段 类型 必返 可为空 说明
base.repo.namespace.path string 是 否 命名空间路径

mergeable_state 对象(门禁信息)

字段 类型 必返 可为空 说明
mergeable_state.merge_request_id integer 是 否 合并请求 ID
mergeable_state.state boolean 是 否 状态
mergeable_state.status_without_user_auth boolean 是 否 无用户授权的状态
mergeable_state.conflict_passed boolean 是 否 冲突通过
mergeable_state.branch_missing_passed boolean 是 否 分支缺失通过
mergeable_state.non_ff_passed boolean 是 否 非快进通过
mergeable_state.mr_state_passed boolean 是 否 合并请求状态通过
mergeable_state.merged_by_user_passed boolean 是 否 用户合并通过
mergeable_state.work_in_progress_passed boolean 是 否 工作进展通过
mergeable_state.resolve_discussion_passed boolean 是 否 解决讨论通过
mergeable_state.ci_state_passed boolean 是 否 CI 状态通过
mergeable_state.merge_by_self_passed boolean 是 否 自我合并通过
mergeable_state.can_force_merge boolean 是 否 可以强制合并
mergeable_state.approval_reviewers_required_passed boolean 是 否 代码评审是否通过
mergeable_state.approval_approvers_required_passed boolean 是 否 代码审查是否通过
mergeable_state.approval_testers_required_passed boolean 是 否 代码测试是否通过
mergeable_state.merge_request_switch object 是 否 合并请求切换
mergeable_state.reason object 是 否 原因(以实际返回为准)
mergeable_state.check_tasks_num integer 是 否 检查事项总数
mergeable_state.all_depend_merge_request_merged_passed boolean 是 否 所有依赖合并请求已合并通过
mergeable_state.approval_approvers_result integer 是 否 审批人结果
mergeable_state.approval_testers_result integer 是 否 测试人结果

mergeable_state.merge_request_switch 对象

字段 类型 必返 可为空 说明
mergeable_state.merge_request_switch.review_mode string 是 否 审查模式
mergeable_state.merge_request_switch.merge_method string 是 否 合并方法
mergeable_state.merge_request_switch.only_allow_merge_if_all_discussions_are_resolved boolean 是 否 只有在解决所有讨论后才允许合并
mergeable_state.merge_request_switch.disable_merge_by_self boolean 是 否 禁止自我合并
mergeable_state.merge_request_switch.only_allow_merge_if_pipeline_succeeds boolean 是 否 只有在管道成功后才允许合并
mergeable_state.merge_request_switch.disable_squash_merge boolean 是 否 禁止压缩合并
mergeable_state.merge_request_switch.squash_merge_with_no_merge_commit boolean 是 否 无合并提交的压缩合并
mergeable_state.merge_request_switch.approval_required_reviewers_count integer 是 否 需要审批的审查者数量
mergeable_state.merge_request_switch.approval_required_reviewers_branch string 是 否 需要审批的审查者分支
mergeable_state.merge_request_switch.add_notes_after_merged boolean 是 否 合并后添加注释
mergeable_state.merge_request_switch.mark_auto_merged_mr_as_closed boolean 是 否 将自动合并的 MR 标记为已关闭
mergeable_state.merge_request_switch.can_force_merge boolean 是 否 可以强制合并
mergeable_state.merge_request_switch.can_reopen boolean 是 否 可以重新开放

milestone 对象(里程碑信息)

字段 类型 必返 可为空 说明
milestone.created_at string 是 否 创建时间
milestone.description string 是 否 描述
milestone.number integer 是 否 里程碑序号
milestone.state string 是 否 状态
milestone.title string 是 否 标题
milestone.updated_at string 是 否 更新时间

merged_by 对象(合并人)

字段 类型 必返 可为空 说明
merged_by.id string 是 否 用户 ID
merged_by.login string 是 否 登录名
merged_by.name string 是 否 姓名
merged_by.avatar_url string 是 否 头像地址
merged_by.html_url string 是 否 主页地址

失败响应

认证失败、参数错误或目标 Pull Request 不存在时,接口会返回相应的失败状态码。以下错误字段名以后端实际返回为准。

400 参数错误

{
  "error": "invalid_request",
  "message": "参数 number 不能为空"
}

401 未认证

{
  "error": "unauthorized",
  "message": "缺少或无效的访问令牌"
}

404 未找到

{
  "error": "not_found",
  "message": "Pull Request 不存在"
}

HTTP 响应状态码

状态码 说明
200 成功(OK)
304 未修改(Not modified)
401 需要认证(Requires authentication)
403 禁止访问(Forbidden)
404 未找到(Not found)

请求示例

参数说明

<owner> 替换为仓库所属空间地址(企业、组织或个人的地址 path); <repo> 替换为仓库路径(path); <number> 替换为第几个 PR(本仓库 PR 的序数)。

此接口允许匿名访问,示例中未携带访问令牌;如需访问私有仓库资源,可追加 access_token 查询参数:?access_token=<token>(<token> 替换为你的 AtomGit 用户访问令牌)。

cURL

curl -X GET 'https://api.atomgit.com/api/v5/repos/<owner>/<repo>/pulls/<number>' \
  -H 'Accept: application/json'

JavaScript

// 原生 fetch (Node.js 18+ / 浏览器)
const response = await fetch("https://api.atomgit.com/api/v5/repos/<owner>/<repo>/pulls/<number>", {
  headers: {
    "Accept": "application/json",
  },
});

if (!response.ok) {
  throw new Error(`请求失败: ${response.status}`);
}

const data = await response.json();
console.log(data);

Python

import requests

resp = requests.get(
    "https://api.atomgit.com/api/v5/repos/<owner>/<repo>/pulls/<number>",
    headers={
        "Accept": "application/json",
    },
    timeout=10,
)
resp.raise_for_status()

print(resp.json())

响应示例

状态码: 200

{
  "id": 111,
  "html_url": "https://api.atomgit.com/sytest/paopao/pull/1",
  "number": 1,
  "url": "https://api.atomgit.com/api/v5/repos/sytest/paopao/pulls/1",
  "issue_url": "https://api.atomgit.com/api/v5/repos/sytest/paopao/pulls/1/issues",
  "state": "open",
  "title": "示例 Pull Request",
  "body": "Description",
  "assignees_number": 1,
  "assignees": [
    {
      "id": 2,
      "login": "test",
      "name": "test_web",
      "avatar_url": "https://api.atomgit.com/sytest/paopao/pull/1.png",
      "html_url": "https://api.atomgit.com/sytest/paopao/pull/1",
      "assignee": true,
      "code_owner": false,
      "accept": true
    }
  ],
  "testers": [
    {
      "id": 2,
      "login": "test",
      "name": "test_web",
      "html_url": "https://api.atomgit.com/sytest/paopao/pull/1",
      "assignee": true,
      "code_owner": false,
      "accept": true
    }
  ],
  "approval_reviewers": [
    {
      "id": 2,
      "login": "test",
      "name": "test_web",
      "html_url": "https://api.atomgit.com/sytest/paopao/pull/1",
      "assignee": true,
      "code_owner": false,
      "accept": true,
      "avatar_url": "https://api.atomgit.com/sytest/paopao/pull/1.png",
      "accept_status": "optional"
    }
  ],
  "labels": [
    {
      "id": 222,
      "color": "red",
      "name": "label1",
      "repository_id": 1,
      "created_at": "2024-01-01T00:00:00Z",
      "updated_at": "2024-01-01T00:00:00Z"
    }
  ],
  "created_at": "2024-01-01T00:00:00Z",
  "updated_at": "2024-01-01T00:00:00Z",
  "closed_at": null,
  "merged_at": null,
  "draft": false,
  "can_merge_check": false,
  "prune_branch": false,
  "mergeable": true,
  "user": {
    "id": "userId",
    "login": "test",
    "name": "test_web",
    "avatar_url": "https://api.atomgit.com/avatar.png",
    "html_url": "https://api.atomgit.com/sytest/paopao/pull/1"
  },
  "head": {
    "label": "test",
    "ref": "test",
    "sha": "91861a9668041fc1c0ff51d1db66b6297179f5e6",
    "repo": {
      "path": "paopao",
      "name": "paopao",
      "namespace": {
        "path": "sytest"
      },
      "full_name": "sytest/paopao",
      "html_url": "https://api.atomgit.com/sytest/paopao"
    },
    "user": {
      "id": "userId",
      "login": "test",
      "name": "test_web",
      "avatar_url": "https://api.atomgit.com/avatar.png",
      "html_url": "https://api.atomgit.com/sytest/paopao/pull/1"
    }
  },
  "base": {
    "label": "main",
    "ref": "main",
    "sha": "91861a9668041fc1c0ff51d1db66b6297179f5e6",
    "repo": {
      "path": "paopao",
      "name": "paopao",
      "namespace": {
        "path": "sytest"
      },
      "full_name": "sytest/paopao",
      "html_url": "https://api.atomgit.com/sytest/paopao"
    }
  },
  "mergeable_state": {
    "merge_request_id": 111,
    "state": false,
    "status_without_user_auth": false,
    "conflict_passed": false,
    "branch_missing_passed": true,
    "non_ff_passed": true,
    "mr_state_passed": true,
    "merged_by_user_passed": true,
    "work_in_progress_passed": true,
    "resolve_discussion_passed": true,
    "ci_state_passed": true,
    "merge_by_self_passed": true,
    "can_force_merge": false,
    "approval_reviewers_required_passed": true,
    "approval_approvers_required_passed": true,
    "approval_testers_required_passed": true,
    "merge_request_switch": {
      "review_mode": "approval",
      "merge_method": "merge",
      "only_allow_merge_if_all_discussions_are_resolved": false,
      "disable_merge_by_self": false,
      "only_allow_merge_if_pipeline_succeeds": false,
      "disable_squash_merge": false,
      "squash_merge_with_no_merge_commit": false,
      "approval_required_reviewers_count": 0,
      "approval_required_reviewers_branch": "*",
      "add_notes_after_merged": false,
      "mark_auto_merged_mr_as_closed": false,
      "can_force_merge": false,
      "can_reopen": true
    },
    "reason": {},
    "check_tasks_num": 0,
    "all_depend_merge_request_merged_passed": true,
    "approval_approvers_result": 0,
    "approval_testers_result": 0
  },
  "milestone": {
    "created_at": "2024-01-01T00:00:00Z",
    "description": "里程碑描述",
    "number": 1,
    "state": "open",
    "title": "里程碑",
    "updated_at": "2024-01-01T00:00:00Z"
  },
  "visibility_reason": "public",
  "merged_by": {
    "id": "userId",
    "login": "test",
    "name": "test_web",
    "avatar_url": "https://api.atomgit.com/avatar.png",
    "html_url": "https://api.atomgit.com/sytest/paopao/pull/1"
  },
  "close_related_issue": false,
  "squash_merge": false
}

错误码

错误码 说明
401 未认证或凭证无效(缺少/无效的访问凭证)
400 参数错误或请求无法解析
404 请求路径不存在
405 请求方法不支持
429 请求过于频繁,触发限流
500 系统内部错误

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 gitcode-dev/atomgit-api-doc