336.md 27.3 KB
Newer Older
Lab机器人's avatar
readme  
Lab机器人 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430
# Merge request approvals API

> 原文:[https://docs.gitlab.com/ee/api/merge_request_approvals.html](https://docs.gitlab.com/ee/api/merge_request_approvals.html)

*   [Project-level MR approvals](#project-level-mr-approvals)
    *   [Get Configuration](#get-configuration)
    *   [Change configuration](#change-configuration)
    *   [Get project-level rules](#get-project-level-rules)
    *   [Create project-level rule](#create-project-level-rule)
    *   [Update project-level rule](#update-project-level-rule)
    *   [Delete project-level rule](#delete-project-level-rule)
    *   [Change allowed approvers](#change-allowed-approvers)
*   [Merge Request-level MR approvals](#merge-request-level-mr-approvals)
    *   [Get Configuration](#get-configuration-1)
    *   [Change approval configuration](#change-approval-configuration)
    *   [Change allowed approvers for Merge Request](#change-allowed-approvers-for-merge-request)
    *   [Get the approval state of merge requests](#get-the-approval-state-of-merge-requests)
    *   [Get merge request level rules](#get-merge-request-level-rules)
    *   [Create merge request level rule](#create-merge-request-level-rule)
    *   [Update merge request level rule](#update-merge-request-level-rule)
    *   [Delete merge request level rule](#delete-merge-request-level-rule)
*   [Approve Merge Request](#approve-merge-request)
*   [Unapprove Merge Request](#unapprove-merge-request)

# Merge request approvals API[](#merge-request-approvals-api-starter "Permalink")

配置项目中所有合并请求(MR)的批准. 必须对所有端点进行身份验证.

## Project-level MR approvals[](#project-level-mr-approvals "Permalink")

### Get Configuration[](#get-configuration "Permalink")

[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/183) in [GitLab Starter](https://about.gitlab.com/pricing/) 10.6.

您可以使用以下端点请求有关项目批准配置的信息:

```
GET /projects/:id/approvals 
```

**Parameters:**

| Attribute | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | integer | yes | 项目 ID |

```
{  "approvals_before_merge":  2,  "reset_approvals_on_push":  true,  "disable_overriding_approvers_per_merge_request":  false,  "merge_requests_author_approval":  true,  "merge_requests_disable_committers_approval":  false,  "require_password_to_approve":  true  } 
```

### Change configuration[](#change-configuration "Permalink")

[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/183) in [GitLab Starter](https://about.gitlab.com/pricing/) 10.6.

如果允许,则可以使用以下端点更改批准配置:

```
POST /projects/:id/approvals 
```

**Parameters:**

| Attribute | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | integer | yes | 项目 ID |
| `approvals_before_merge` | integer | no | MR 可以合并之前需要多少批准. 在 12.0 中已弃用,以支持批准规则 API. |
| `reset_approvals_on_push` | boolean | no | 重置批准以进行新的推送 |
| `disable_overriding_approvers_per_merge_request` | boolean | no | 允许/禁止每个 MR 的替代批准者 |
| `merge_requests_author_approval` | boolean | no | 允许/禁止作者自行批准合并请求; `true`表示作者可以自行批准 |
| `merge_requests_disable_committers_approval` | boolean | no | 允许/禁止提交者自我批准合并请求 |
| `require_password_to_approve` | boolean | no | 在添加批准之前,需要批准者输入密码才能进行身份验证 |

```
{  "approvals_before_merge":  2,  "reset_approvals_on_push":  true,  "disable_overriding_approvers_per_merge_request":  false,  "merge_requests_author_approval":  false,  "merge_requests_disable_committers_approval":  false,  "require_password_to_approve":  true  } 
```

### Get project-level rules[](#get-project-level-rules "Permalink")

版本历史

*[GitLab Starter](https://about.gitlab.com/pricing/) 12.3 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/11877) .
*   [GitLab Premium](https://about.gitlab.com/pricing/) 12.7 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/460)`protected_branches`属性.

您可以使用以下端点请求有关项目批准规则的信息:

```
GET /projects/:id/approval_rules 
```

**Parameters:**

| Attribute | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | integer | yes | 项目 ID |

```
[  {  "id":  1,  "name":  "security",  "rule_type":  "regular",  "eligible_approvers":  [  {  "id":  5,  "name":  "John Doe",  "username":  "jdoe",  "state":  "active",  "avatar_url":  "https://www.gravatar.com/avatar/0?s=80&d=identicon",  "web_url":  "http://localhost/jdoe"  },  {  "id":  50,  "name":  "Group Member 1",  "username":  "group_member_1",  "state":  "active",  "avatar_url":  "https://www.gravatar.com/avatar/0?s=80&d=identicon",  "web_url":  "http://localhost/group_member_1"  }  ],  "approvals_required":  3,  "users":  [  {  "id":  5,  "name":  "John Doe",  "username":  "jdoe",  "state":  "active",  "avatar_url":  "https://www.gravatar.com/avatar/0?s=80&d=identicon",  "web_url":  "http://localhost/jdoe"  }  ],  "groups":  [  {  "id":  5,  "name":  "group1",  "path":  "group1",  "description":  "",  "visibility":  "public",  "lfs_enabled":  false,  "avatar_url":  null,  "web_url":  "http://localhost/groups/group1",  "request_access_enabled":  false,  "full_name":  "group1",  "full_path":  "group1",  "parent_id":  null,  "ldap_cn":  null,  "ldap_access":  null  }  ],  "protected_branches":  [  {  "id":  1,  "name":  "master",  "push_access_levels":  [  {  "access_level":  30,  "access_level_description":  "Developers + Maintainers"  }  ],  "merge_access_levels":  [  {  "access_level":  30,  "access_level_description":  "Developers + Maintainers"  }  ],  "unprotect_access_levels":  [  {  "access_level":  40,  "access_level_description":  "Maintainers"  }  ],  "code_owner_approval_required":  "false"  }  ],  "contains_hidden_groups":  false  }  ] 
```

### Create project-level rule[](#create-project-level-rule "Permalink")

[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/11877) in [GitLab Starter](https://about.gitlab.com/pricing/) 12.3.

您可以使用以下端点创建项目批准规则:

```
POST /projects/:id/approval_rules 
```

**Parameters:**

| Attribute | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | integer | yes | 项目 ID |
| `name` | string | yes | 批准规则的名称 |
| `approvals_required` | integer | yes | 此规则所需的批准数量 |
| `user_ids` | Array | no | 批准者的用户 ID |
| `group_ids` | Array | no | 小组的 ID 为批准者 |
| `protected_branch_ids` | Array | no | 受保护分支的 ID 范围 |

```
{  "id":  1,  "name":  "security",  "rule_type":  "regular",  "eligible_approvers":  [  {  "id":  2,  "name":  "John Doe",  "username":  "jdoe",  "state":  "active",  "avatar_url":  "https://www.gravatar.com/avatar/0?s=80&d=identicon",  "web_url":  "http://localhost/jdoe"  },  {  "id":  50,  "name":  "Group Member 1",  "username":  "group_member_1",  "state":  "active",  "avatar_url":  "https://www.gravatar.com/avatar/0?s=80&d=identicon",  "web_url":  "http://localhost/group_member_1"  }  ],  "approvals_required":  1,  "users":  [  {  "id":  2,  "name":  "John Doe",  "username":  "jdoe",  "state":  "active",  "avatar_url":  "https://www.gravatar.com/avatar/0?s=80&d=identicon",  "web_url":  "http://localhost/jdoe"  }  ],  "groups":  [  {  "id":  5,  "name":  "group1",  "path":  "group1",  "description":  "",  "visibility":  "public",  "lfs_enabled":  false,  "avatar_url":  null,  "web_url":  "http://localhost/groups/group1",  "request_access_enabled":  false,  "full_name":  "group1",  "full_path":  "group1",  "parent_id":  null,  "ldap_cn":  null,  "ldap_access":  null  }  ],  "protected_branches":  [  {  "id":  1,  "name":  "master",  "push_access_levels":  [  {  "access_level":  30,  "access_level_description":  "Developers + Maintainers"  }  ],  "merge_access_levels":  [  {  "access_level":  30,  "access_level_description":  "Developers + Maintainers"  }  ],  "unprotect_access_levels":  [  {  "access_level":  40,  "access_level_description":  "Maintainers"  }  ],  "code_owner_approval_required":  "false"  }  ],  "contains_hidden_groups":  false  } 
```

### Update project-level rule[](#update-project-level-rule "Permalink")

[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/11877) in [GitLab Starter](https://about.gitlab.com/pricing/) 12.3.

您可以使用以下端点更新项目批准规则:

```
PUT /projects/:id/approval_rules/:approval_rule_id 
```

**重要提示:**不在`users` / `groups`参数中的批准者和组将被**删除**

**Parameters:**

| Attribute | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | integer | yes | 项目 ID |
| `approval_rule_id` | integer | yes | 批准规则的 ID |
| `name` | string | yes | 批准规则的名称 |
| `approvals_required` | integer | yes | 此规则所需的批准数量 |
| `user_ids` | Array | no | The ids of users as approvers |
| `group_ids` | Array | no | 小组的 ID 为批准者 |
| `protected_branch_ids` | Array | no | 受保护分支的 ID 范围 |

```
{  "id":  1,  "name":  "security",  "rule_type":  "regular",  "eligible_approvers":  [  {  "id":  2,  "name":  "John Doe",  "username":  "jdoe",  "state":  "active",  "avatar_url":  "https://www.gravatar.com/avatar/0?s=80&d=identicon",  "web_url":  "http://localhost/jdoe"  },  {  "id":  50,  "name":  "Group Member 1",  "username":  "group_member_1",  "state":  "active",  "avatar_url":  "https://www.gravatar.com/avatar/0?s=80&d=identicon",  "web_url":  "http://localhost/group_member_1"  }  ],  "approvals_required":  1,  "users":  [  {  "id":  2,  "name":  "John Doe",  "username":  "jdoe",  "state":  "active",  "avatar_url":  "https://www.gravatar.com/avatar/0?s=80&d=identicon",  "web_url":  "http://localhost/jdoe"  }  ],  "groups":  [  {  "id":  5,  "name":  "group1",  "path":  "group1",  "description":  "",  "visibility":  "public",  "lfs_enabled":  false,  "avatar_url":  null,  "web_url":  "http://localhost/groups/group1",  "request_access_enabled":  false,  "full_name":  "group1",  "full_path":  "group1",  "parent_id":  null,  "ldap_cn":  null,  "ldap_access":  null  }  ],  "protected_branches":  [  {  "id":  1,  "name":  "master",  "push_access_levels":  [  {  "access_level":  30,  "access_level_description":  "Developers + Maintainers"  }  ],  "merge_access_levels":  [  {  "access_level":  30,  "access_level_description":  "Developers + Maintainers"  }  ],  "unprotect_access_levels":  [  {  "access_level":  40,  "access_level_description":  "Maintainers"  }  ],  "code_owner_approval_required":  "false"  }  ],  "contains_hidden_groups":  false  } 
```

### Delete project-level rule[](#delete-project-level-rule "Permalink")

[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/11877) in [GitLab Starter](https://about.gitlab.com/pricing/) 12.3.

您可以使用以下端点删除项目批准规则:

```
DELETE /projects/:id/approval_rules/:approval_rule_id 
```

**Parameters:**

| Attribute | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | integer | yes | 项目 ID |
| `approval_rule_id` | integer | yes | 批准规则的 ID |

### Change allowed approvers[](#change-allowed-approvers "Permalink")

**注意:**此 API 端点已被弃用. 请改用批准规则 API. 在[GitLab Starter](https://about.gitlab.com/pricing/) 10.6 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/183) .

如果允许,则可以使用以下端点更改批准者和批准者组:

```
PUT /projects/:id/approvers 
```

**重要提示:**不在请求中的批准者和组将被**删除**

**Parameters:**

| Attribute | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | integer | yes | 项目 ID |
| `approver_ids` | Array | yes | 可以批准 MR 的用户 ID 数组 |
| `approver_group_ids` | Array | yes | 一组可以批准 MR 的组 ID |

```
{  "approvers":  [  {  "user":  {  "id":  5,  "name":  "John Doe6",  "username":  "user5",  "state":"active","avatar_url":"https://www.gravatar.com/avatar/4aea8cf834ed91844a2da4ff7ae6b491?s=80\u0026d=identicon","web_url":"http://localhost/user5"  }  }  ],  "approver_groups":  [  {  "group":  {  "id":  1,  "name":  "group1",  "path":  "group1",  "description":  "",  "visibility":  "public",  "lfs_enabled":  false,  "avatar_url":  null,  "web_url":  "http://localhost/groups/group1",  "request_access_enabled":  false,  "full_name":  "group1",  "full_path":  "group1",  "parent_id":  null,  "ldap_cn":  null,  "ldap_access":  null  }  }  ],  "approvals_before_merge":  2,  "reset_approvals_on_push":  true,  "disable_overriding_approvers_per_merge_request":  false,  "merge_requests_author_approval":  true,  "merge_requests_disable_committers_approval":  false,  "require_password_to_approve":  true  } 
```

## Merge Request-level MR approvals[](#merge-request-level-mr-approvals "Permalink")

配置特定合并请求的批准. 必须对所有端点进行身份验证.

### Get Configuration[](#get-configuration-1 "Permalink")

[GitLab Starter](https://about.gitlab.com/pricing/) 8.9 中引入.

您可以使用以下端点来请求有关合并请求的批准状态的信息:

```
GET /projects/:id/merge_requests/:merge_request_iid/approvals 
```

**Parameters:**

| Attribute | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | integer | yes | 项目 ID |
| `merge_request_iid` | integer | yes | MR 的 IID |

```
{  "id":  5,  "iid":  5,  "project_id":  1,  "title":  "Approvals API",  "description":  "Test",  "state":  "opened",  "created_at":  "2016-06-08T00:19:52.638Z",  "updated_at":  "2016-06-08T21:20:42.470Z",  "merge_status":  "cannot_be_merged",  "approvals_required":  2,  "approvals_left":  1,  "approved_by":  [  {  "user":  {  "name":  "Administrator",  "username":  "root",  "id":  1,  "state":  "active",  "avatar_url":  "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80\u0026d=identicon",  "web_url":  "http://localhost:3000/root"  }  }  ],  } 
```

### Change approval configuration[](#change-approval-configuration "Permalink")

[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/183) in [GitLab Starter](https://about.gitlab.com/pricing/) 10.6.

如果你被允许,你可以改变`approvals_required`使用以下端点:

```
POST /projects/:id/merge_requests/:merge_request_iid/approvals 
```

**Parameters:**

| Attribute | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | integer | yes | 项目 ID |
| `merge_request_iid` | integer | yes | MR 的 IID |
| `approvals_required` | integer | yes | 可以合并 MR 之前需要获得批准. 在 12.0 中已弃用,以支持批准规则 API. |

```
{  "id":  5,  "iid":  5,  "project_id":  1,  "title":  "Approvals API",  "description":  "Test",  "state":  "opened",  "created_at":  "2016-06-08T00:19:52.638Z",  "updated_at":  "2016-06-08T21:20:42.470Z",  "merge_status":  "cannot_be_merged",  "approvals_required":  2,  "approvals_left":  2,  "approved_by":  []  } 
```

### Change allowed approvers for Merge Request[](#change-allowed-approvers-for-merge-request "Permalink")

**注意:**此 API 端点已被弃用. 请改用批准规则 API. 在[GitLab Starter](https://about.gitlab.com/pricing/) 10.6 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/183) .

如果允许,则可以使用以下端点更改批准者和批准者组:

```
PUT /projects/:id/merge_requests/:merge_request_iid/approvers 
```

**重要提示:**不在请求中的批准者和组将被**删除**

**Parameters:**

| Attribute | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | integer | yes | 项目 ID |
| `merge_request_iid` | integer | yes | MR 的 IID |
| `approver_ids` | Array | yes | 可以批准 MR 的用户 ID 数组 |
| `approver_group_ids` | Array | yes | 一组可以批准 MR 的组 ID |

```
{  "id":  5,  "iid":  5,  "project_id":  1,  "title":  "Approvals API",  "description":  "Test",  "state":  "opened",  "created_at":  "2016-06-08T00:19:52.638Z",  "updated_at":  "2016-06-08T21:20:42.470Z",  "merge_status":  "cannot_be_merged",  "approvals_required":  2,  "approvals_left":  2,  "approved_by":  [],  "approvers":  [  {  "user":  {  "name":  "Administrator",  "username":  "root",  "id":  1,  "state":  "active",  "avatar_url":  "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80\u0026d=identicon",  "web_url":  "http://localhost:3000/root"  }  }  ],  "approver_groups":  [  {  "group":  {  "id":  5,  "name":  "group1",  "path":  "group1",  "description":  "",  "visibility":  "public",  "lfs_enabled":  false,  "avatar_url":  null,  "web_url":  "http://localhost/groups/group1",  "request_access_enabled":  false,  "full_name":  "group1",  "full_path":  "group1",  "parent_id":  null,  "ldap_cn":  null,  "ldap_access":  null  }  }  ]  } 
```

### Get the approval state of merge requests[](#get-the-approval-state-of-merge-requests "Permalink")

[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/13712) in [GitLab Starter](https://about.gitlab.com/pricing/) 12.3.

您可以使用以下端点来请求有关合并请求的批准状态的信息:

```
GET /projects/:id/merge_requests/:merge_request_iid/approval_state 
```

如果为合并请求创建了合并请求级别规则,则`approval_rules_overwritten`将为`true` . 如果不存在,则为`false` .

这包括有关已经批准的用户的更多信息( `approved_by` ),以及规则是否已经批准的( `approved` ).

**Parameters:**

| Attribute | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | integer | yes | 项目 ID |
| `merge_request_iid` | integer | yes | MR 的 IID |

```
{  "approval_rules_overwritten":  true,  "rules":  [  {  "id":  1,  "name":  "Ruby",  "rule_type":  "regular",  "eligible_approvers":  [  {  "id":  4,  "name":  "John Doe",  "username":  "jdoe",  "state":  "active",  "avatar_url":  "https://www.gravatar.com/avatar/0?s=80&d=identicon",  "web_url":  "http://localhost/jdoe"  }  ],  "approvals_required":  2,  "users":  [  {  "id":  4,  "name":  "John Doe",  "username":  "jdoe",  "state":  "active",  "avatar_url":  "https://www.gravatar.com/avatar/0?s=80&d=identicon",  "web_url":  "http://localhost/jdoe"  }  ],  "groups":  [],  "contains_hidden_groups":  false,  "approved_by":  [  {  "id":  4,  "name":  "John Doe",  "username":  "jdoe",  "state":  "active",  "avatar_url":  "https://www.gravatar.com/avatar/0?s=80&d=identicon",  "web_url":  "http://localhost/jdoe"  }  ],  "source_rule":  null,  "approved":  true,  "overridden":  false  }  ]  } 
```

### Get merge request level rules[](#get-merge-request-level-rules "Permalink")

[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/13712) in [GitLab Starter](https://about.gitlab.com/pricing/) 12.3.

您可以使用以下端点来请求有关合并请求的批准规则的信息:

```
GET /projects/:id/merge_requests/:merge_request_iid/approval_rules 
```

**Parameters:**

| Attribute | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | integer | yes | 项目 ID |
| `merge_request_iid` | integer | yes | MR 的 IID |

```
[  {  "id":  1,  "name":  "security",  "rule_type":  "regular",  "eligible_approvers":  [  {  "id":  5,  "name":  "John Doe",  "username":  "jdoe",  "state":  "active",  "avatar_url":  "https://www.gravatar.com/avatar/0?s=80&d=identicon",  "web_url":  "http://localhost/jdoe"  },  {  "id":  50,  "name":  "Group Member 1",  "username":  "group_member_1",  "state":  "active",  "avatar_url":  "https://www.gravatar.com/avatar/0?s=80&d=identicon",  "web_url":  "http://localhost/group_member_1"  }  ],  "approvals_required":  3,  "source_rule":  null,  "users":  [  {  "id":  5,  "name":  "John Doe",  "username":  "jdoe",  "state":  "active",  "avatar_url":  "https://www.gravatar.com/avatar/0?s=80&d=identicon",  "web_url":  "http://localhost/jdoe"  }  ],  "groups":  [  {  "id":  5,  "name":  "group1",  "path":  "group1",  "description":  "",  "visibility":  "public",  "lfs_enabled":  false,  "avatar_url":  null,  "web_url":  "http://localhost/groups/group1",  "request_access_enabled":  false,  "full_name":  "group1",  "full_path":  "group1",  "parent_id":  null,  "ldap_cn":  null,  "ldap_access":  null  }  ],  "contains_hidden_groups":  false,  "overridden":  false  }  ] 
```

### Create merge request level rule[](#create-merge-request-level-rule "Permalink")

[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/11877) in [GitLab Starter](https://about.gitlab.com/pricing/) 12.3.

您可以使用以下端点创建合并请求批准规则:

```
POST /projects/:id/merge_requests/:merge_request_iid/approval_rules 
```

**Parameters:**

| Attribute | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | integer | yes | 项目 ID |
| `merge_request_iid` | integer | yes | MR 的 IID |
| `name` | string | yes | 批准规则的名称 |
| `approvals_required` | integer | yes | 此规则所需的批准数量 |
| `approval_project_rule_id` | integer | no | 项目级批准规则的 ID |
| `user_ids` | Array | no | 批准者的用户 ID |
| `group_ids` | Array | no | 小组的 ID 为批准者 |

**重要提示:**`approval_project_rule_id`被设置, `name``users``groups`项目级的规则将被复制. 该`approvals_required`指定将被使用.

```
{  "id":  1,  "name":  "security",  "rule_type":  "regular",  "eligible_approvers":  [  {  "id":  2,  "name":  "John Doe",  "username":  "jdoe",  "state":  "active",  "avatar_url":  "https://www.gravatar.com/avatar/0?s=80&d=identicon",  "web_url":  "http://localhost/jdoe"  },  {  "id":  50,  "name":  "Group Member 1",  "username":  "group_member_1",  "state":  "active",  "avatar_url":  "https://www.gravatar.com/avatar/0?s=80&d=identicon",  "web_url":  "http://localhost/group_member_1"  }  ],  "approvals_required":  1,  "source_rule":  null,  "users":  [  {  "id":  2,  "name":  "John Doe",  "username":  "jdoe",  "state":  "active",  "avatar_url":  "https://www.gravatar.com/avatar/0?s=80&d=identicon",  "web_url":  "http://localhost/jdoe"  }  ],  "groups":  [  {  "id":  5,  "name":  "group1",  "path":  "group1",  "description":  "",  "visibility":  "public",  "lfs_enabled":  false,  "avatar_url":  null,  "web_url":  "http://localhost/groups/group1",  "request_access_enabled":  false,  "full_name":  "group1",  "full_path":  "group1",  "parent_id":  null,  "ldap_cn":  null,  "ldap_access":  null  }  ],  "contains_hidden_groups":  false,  "overridden":  false  } 
```

### Update merge request level rule[](#update-merge-request-level-rule "Permalink")

[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/11877) in [GitLab Starter](https://about.gitlab.com/pricing/) 12.3.

您可以使用以下端点更新合并请求批准规则:

```
PUT /projects/:id/merge_requests/:merge_request_iid/approval_rules/:approval_rule_id 
```

**重要提示:**不在`users` / `groups`参数中的批准者和组将被**删除**

**重要提示:**不允许更新`report_approver``code_owner`规则. 这些是系统生成的规则.

**Parameters:**

| Attribute | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | integer | yes | 项目 ID |
| `merge_request_iid` | integer | yes | MR 的 ID |
| `approval_rule_id` | integer | yes | 批准规则的 ID |
| `name` | string | yes | 批准规则的名称 |
| `approvals_required` | integer | yes | 此规则所需的批准数量 |
| `user_ids` | Array | no | 批准者的用户 ID |
| `group_ids` | Array | no | 小组的 ID 为批准者 |

```
{  "id":  1,  "name":  "security",  "rule_type":  "regular",  "eligible_approvers":  [  {  "id":  2,  "name":  "John Doe",  "username":  "jdoe",  "state":  "active",  "avatar_url":  "https://www.gravatar.com/avatar/0?s=80&d=identicon",  "web_url":  "http://localhost/jdoe"  },  {  "id":  50,  "name":  "Group Member 1",  "username":  "group_member_1",  "state":  "active",  "avatar_url":  "https://www.gravatar.com/avatar/0?s=80&d=identicon",  "web_url":  "http://localhost/group_member_1"  }  ],  "approvals_required":  1,  "source_rule":  null,  "users":  [  {  "id":  2,  "name":  "John Doe",  "username":  "jdoe",  "state":  "active",  "avatar_url":  "https://www.gravatar.com/avatar/0?s=80&d=identicon",  "web_url":  "http://localhost/jdoe"  }  ],  "groups":  [  {  "id":  5,  "name":  "group1",  "path":  "group1",  "description":  "",  "visibility":  "public",  "lfs_enabled":  false,  "avatar_url":  null,  "web_url":  "http://localhost/groups/group1",  "request_access_enabled":  false,  "full_name":  "group1",  "full_path":  "group1",  "parent_id":  null,  "ldap_cn":  null,  "ldap_access":  null  }  ],  "contains_hidden_groups":  false,  "overridden":  false  } 
```

### Delete merge request level rule[](#delete-merge-request-level-rule "Permalink")

[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/11877) in [GitLab Starter](https://about.gitlab.com/pricing/) 12.3.

您可以使用以下端点删除合并请求批准规则:

```
DELETE /projects/:id/merge_requests/:merge_request_iid/approval_rules/:approval_rule_id 
```

**重要提示:**不允许删除`report_approver``code_owner`规则. 这些是系统生成的规则.

**Parameters:**

| Attribute | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | integer | yes | 项目 ID |
| `merge_request_iid` | integer | yes | MR 的 ID |
| `approval_rule_id` | integer | yes | 批准规则的 ID |

## Approve Merge Request[](#approve-merge-request "Permalink")

[GitLab Starter](https://about.gitlab.com/pricing/) 8.9 中引入.

如果允许,则可以使用以下端点批准合并请求:

```
POST /projects/:id/merge_requests/:merge_request_iid/approve 
```

**Parameters:**

| Attribute | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | integer | yes | 项目 ID |
| `merge_request_iid` | integer | yes | MR 的 IID |
| `sha` | string | no | MR 的头 |
| `approval_password` | string | no | 当前用户的密码. 如果在项目设置中启用了" [**需要用户密码批准",**](../user/project/merge_requests/merge_request_approvals.html#require-authentication-when-approving-a-merge-request)则为必需. |

`sha`参数的工作方式与[接受合并请求](merge_requests.html#accept-mr)时的工作方式相同:如果传递了它,则它必须与合并请求的当前 HEAD 匹配才能添加批准. 如果不匹配,则响应代码将为`409` .

```
{  "id":  5,  "iid":  5,  "project_id":  1,  "title":  "Approvals API",  "description":  "Test",  "state":  "opened",  "created_at":  "2016-06-08T00:19:52.638Z",  "updated_at":  "2016-06-09T21:32:14.105Z",  "merge_status":  "can_be_merged",  "approvals_required":  2,  "approvals_left":  0,  "approved_by":  [  {  "user":  {  "name":  "Administrator",  "username":  "root",  "id":  1,  "state":  "active",  "avatar_url":  "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80\u0026d=identicon",  "web_url":  "http://localhost:3000/root"  }  },  {  "user":  {  "name":  "Nico Cartwright",  "username":  "ryley",  "id":  2,  "state":  "active",  "avatar_url":  "http://www.gravatar.com/avatar/cf7ad14b34162a76d593e3affca2adca?s=80\u0026d=identicon",  "web_url":  "http://localhost:3000/ryley"  }  }  ],  } 
```

## Unapprove Merge Request[](#unapprove-merge-request "Permalink")

[GitLab Starter](https://about.gitlab.com/pricing/) 9.0 中引入.

如果您确实批准了合并请求,则可以使用以下端点取消批准它:

```
POST /projects/:id/merge_requests/:merge_request_iid/unapprove 
```

**Parameters:**

| Attribute | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | integer | yes | 项目 ID |
| `merge_request_iid` | integer | yes | MR 的 IID |