{{< details >}}

  • Tier: 旗舰版
  • Offering: JihuLab.com, 私有化部署

{{< /details >}}

{{< alert type=”warning” >}}

极狐GitLab 17.0 中史诗 REST API 已被弃用,并计划在 API 的 v5 中移除。在极狐GitLab 17.4 或更高版本中,如果启用了史诗的新外观,请改用工作项 API。有关更多信息,请参阅如何迁移现有 API 的指南。此更改是一个重大更改。

{{< /alert >}}

管理父子 史诗关系

每次对 epic_links 的 API 调用都必须经过认证。

如果用户不是一个私有群组的成员,则对该群组进行 GET 请求会导致返回 404 状态码。

多级史诗仅在 极狐GitLab 旗舰版 中可用。如果多级史诗功能不可用,则返回 403 状态码。

列出与指定史诗相关的史诗

获取某个史诗的所有子史诗。

GET /groups/:id/epics/:epic_iid/epics
属性 类型 必需 描述
id integer/string 群组的 ID 或 URL 编码路径
epic_iid integer 史诗的内部 ID。
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/1/epics/5/epics/"

示例响应:

[
  {
    "id": 29,
    "iid": 6,
    "group_id": 1,
    "parent_id": 5,
    "title": "Accusamus iste et ullam ratione voluptatem omnis debitis dolor est.",
    "description": "Molestias dolorem eos vitae expedita impedit necessitatibus quo voluptatum.",
    "author": {
      "id": 10,
      "name": "Lu Mayer",
      "username": "kam",
      "state": "active",
      "avatar_url": "http://www.gravatar.com/avatar/018729e129a6f31c80a6327a30196823?s=80&d=identicon",
      "web_url": "http://localhost:3001/kam"
    },
    "start_date": null,
    "start_date_is_fixed": false,
    "start_date_fixed": null,
    "start_date_from_milestones": null,       //deprecated in favor of start_date_from_inherited_source
    "start_date_from_inherited_source": null,
    "end_date": "2018-07-31",                 //deprecated in favor of due_date
    "due_date": "2018-07-31",
    "due_date_is_fixed": false,
    "due_date_fixed": null,
    "due_date_from_milestones": "2018-07-31", //deprecated in favor of start_date_from_inherited_source
    "due_date_from_inherited_source": "2018-07-31",
    "created_at": "2018-07-17T13:36:22.770Z",
    "updated_at": "2018-07-18T12:22:05.239Z",
    "labels": []
  }
]

指派一个子史诗

在两个史诗之间创建一个关联,将一个设定为父史诗,另一个设定为子史诗。一个父史诗可以有多个子史诗。如果新的子史诗已经属于另一个史诗,它将从之前的父史诗中取消分配。

POST /groups/:id/epics/:epic_iid/epics/:child_epic_id
属性 类型 必需 描述
id integer/string 群组的 ID 或 URL 编码路径
epic_iid integer 史诗的内部 ID。
child_epic_id integer 子史诗的全局 ID。内部 ID 不能使用,因为它们可能与其他群组的史诗冲突。
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/1/epics/5/epics/6"

示例响应:

{
  "id": 6,
  "iid": 38,
  "group_id": 1,
  "parent_id": 5,
  "title": "Accusamus iste et ullam ratione voluptatem omnis debitis dolor est.",
  "description": "Molestias dolorem eos vitae expedita impedit necessitatibus quo voluptatum.",
  "author": {
    "id": 10,
    "name": "Lu Mayer",
    "username": "kam",
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/018729e129a6f31c80a6327a30196823?s=80&d=identicon",
    "web_url": "http://localhost:3001/kam"
  },
  "start_date": null,
  "start_date_is_fixed": false,
  "start_date_fixed": null,
  "start_date_from_milestones": null,       //deprecated in favor of start_date_from_inherited_source
  "start_date_from_inherited_source": null,
  "end_date": "2018-07-31",                 //deprecated in favor of due_date
  "due_date": "2018-07-31",
  "due_date_is_fixed": false,
  "due_date_fixed": null,
  "due_date_from_milestones": "2018-07-31", //deprecated in favor of start_date_from_inherited_source
  "due_date_from_inherited_source": "2018-07-31",
  "created_at": "2018-07-17T13:36:22.770Z",
  "updated_at": "2018-07-18T12:22:05.239Z",
  "labels": []
}

创建并指派一个子史诗

创建一个新的史诗并与提供的父史诗关联。响应是 LinkedEpic 对象。

POST /groups/:id/epics/:epic_iid/epics
属性 类型 必需 描述
id integer/string 群组的 ID 或 URL 编码路径
epic_iid integer (未来父)史诗的内部 ID。
title string 新创建的史诗的标题。
confidential boolean 史诗是否应该保密。如果 confidential_epics 特性标志被禁用,则参数被忽略。默认情况下与父史诗的保密状态一致。
curl --request POST --header  "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/1/epics/5/epics?title=Newpic"

示例响应:

{
  "id": 24,
  "iid": 2,
  "title": "child epic",
  "group_id": 49,
  "parent_id": 23,
  "has_children": false,
  "has_issues": false,
  "reference":  "&2",
  "url": "http://localhost/groups/group16/-/epics/2",
  "relation_url": "http://localhost/groups/group16/-/epics/1/links/24"
}

重新排序子史诗

PUT /groups/:id/epics/:epic_iid/epics/:child_epic_id
属性 类型 必需 描述
id integer/string 群组的 ID 或 URL 编码路径
epic_iid integer 史诗的内部 ID。
child_epic_id integer 子史诗的全局 ID。内部 ID 不能使用,因为它们可能与其他群组的史诗冲突。
move_before_id integer 应该放置在子史诗之前的兄弟史诗的全局 ID。
move_after_id integer 应该放置在子史诗之后的兄弟史诗的全局 ID。
curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/1/epics/4/epics/5"

示例响应:

[
  {
    "id": 29,
    "iid": 6,
    "group_id": 1,
    "parent_id": 5,
    "title": "Accusamus iste et ullam ratione voluptatem omnis debitis dolor est.",
    "description": "Molestias dolorem eos vitae expedita impedit necessitatibus quo voluptatum.",
    "author": {
      "id": 10,
      "name": "Lu Mayer",
      "username": "kam",
      "state": "active",
      "avatar_url": "http://www.gravatar.com/avatar/018729e129a6f31c80a6327a30196823?s=80&d=identicon",
      "web_url": "http://localhost:3001/kam"
    },
    "start_date": null,
    "start_date_is_fixed": false,
    "start_date_fixed": null,
    "start_date_from_milestones": null,       //deprecated in favor of start_date_from_inherited_source
    "start_date_from_inherited_source": null,
    "end_date": "2018-07-31",                 //deprecated in favor of due_date
    "due_date": "2018-07-31",
    "due_date_is_fixed": false,
    "due_date_fixed": null,
    "due_date_from_milestones": "2018-07-31", //deprecated in favor of start_date_from_inherited_source
    "due_date_from_inherited_source": "2018-07-31",
    "created_at": "2018-07-17T13:36:22.770Z",
    "updated_at": "2018-07-18T12:22:05.239Z",
    "labels": []
  }
]

取消指派子史诗

从父史诗中取消指派一个子史诗。

DELETE /groups/:id/epics/:epic_iid/epics/:child_epic_id
属性 类型 必需 描述
id integer/string 群组的 ID 或 URL 编码路径
epic_iid integer 史诗的内部 ID。
child_epic_id integer 子史诗的全局 ID。内部 ID 不能使用,因为它们可能与其他群组的史诗冲突。
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/groups/1/epics/4/epics/5"

示例响应:

{
  "id": 5,
  "iid": 38,
  "group_id": 1,
  "parent_id": null,
  "title": "Accusamus iste et ullam ratione voluptatem omnis debitis dolor est.",
  "description": "Molestias dolorem eos vitae expedita impedit necessitatibus quo voluptatum.",
  "author": {
    "id": 10,
    "name": "Lu Mayer",
    "username": "kam",
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/018729e129a6f31c80a6327a30196823?s=80&d=identicon",
    "web_url": "http://localhost:3001/kam"
  },
  "start_date": null,
  "start_date_is_fixed": false,
  "start_date_fixed": null,
  "start_date_from_milestones": null,       //deprecated in favor of start_date_from_inherited_source
  "start_date_from_inherited_source": null,
  "end_date": "2018-07-31",                 //deprecated in favor of due_date
  "due_date": "2018-07-31",
  "due_date_is_fixed": false,
  "due_date_fixed": null,
  "due_date_from_milestones": "2018-07-31", //deprecated in favor of start_date_from_inherited_source
  "due_date_from_inherited_source": "2018-07-31",
  "created_at": "2018-07-17T13:36:22.770Z",
  "updated_at": "2018-07-18T12:22:05.239Z",
  "labels": []
}