284.md 24.5 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 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595
# API Docs

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

*   [Available API resources](#available-api-resources)
*   [SCIM](#scim-silver-only)
*   [Road to GraphQL](#road-to-graphql)
*   [Compatibility guidelines](#compatibility-guidelines)
    *   [Current status](#current-status)
*   [Basic usage](#basic-usage)
*   [Authentication](#authentication)
    *   [OAuth2 tokens](#oauth2-tokens)
    *   [Personal/project access tokens](#personalproject-access-tokens)
    *   [Session cookie](#session-cookie)
    *   [GitLab CI job token](#gitlab-ci-job-token)
    *   [Impersonation tokens](#impersonation-tokens)
        *   [Disable impersonation](#disable-impersonation)
    *   [Sudo](#sudo)
*   [Status codes](#status-codes)
*   [Pagination](#pagination)
    *   [Offset-based pagination](#offset-based-pagination)
        *   [Pagination Link header](#pagination-link-header)
        *   [Other pagination headers](#other-pagination-headers)
    *   [Keyset-based pagination](#keyset-based-pagination)
*   [Path parameters](#path-parameters)
*   [Namespaced path encoding](#namespaced-path-encoding)
*   [File path, branches, and tags name encoding](#file-path-branches-and-tags-name-encoding)
*   [Request Payload](#request-payload)
*   [Encoding API parameters of `array` and `hash` types](#encoding-api-parameters-of-array-and-hash-types)
    *   [`array`](#array)
    *   [`hash`](#hash)
    *   [Array of hashes](#array-of-hashes)
*   [`id` vs `iid`](#id-vs-iid)
*   [Data validation and error reporting](#data-validation-and-error-reporting)
*   [Unknown route](#unknown-route)
*   [Encoding `+` in ISO 8601 dates](#encoding--in-iso-8601-dates)
*   [Clients](#clients)
*   [Rate limits](#rate-limits)

# API Docs[](#api-docs "Permalink")

通过简单而强大的 API 自动化 GitLab.

主要的 GitLab API 是[REST](https://en.wikipedia.org/wiki/Representational_state_transfer) API. 因此,本节中的文档假定您具有 REST 概念的知识.

## Available API resources[](#available-api-resources "Permalink")

有关可用资源及其端点的列表,请参阅[API 资源](api_resources.html) .

## SCIM[](#scim-silver-only "Permalink")

[GitLab.com Silver 和更高版本](https://about.gitlab.com/pricing/)提供了[SCIM API](scim.html)[](https://tools.ietf.org/html/rfc7644) [API](scim.html)实现[RFC7644 协议](https://tools.ietf.org/html/rfc7644)并提供`/Users`端点. 基本网址为: `/api/scim/v2/groups/:group_path/Users/` .

## Road to GraphQL[](#road-to-graphql "Permalink")

[GitLab](graphql/index.html)中提供了[GraphQL](graphql/index.html) ,它将允许弃用控制器特定的端点.

GraphQL 具有许多优点:

1.  我们避免维护两个不同的 API.
2.  API 的调用者只能请求他们需要的东西.
3.  默认情况下为版本.

它将与当前的 v4 REST API 共存. 如果我们有 v5 API,则这应该是 GraphQL 之上的兼容性层.

尽管 GraphQL 存在一些专利和许可问题,但通过 MIT 下的参考实现的重新许可以及 GraphQL 规范使用 OWF 许可证,这些问题已得到我们的满意解决.

## Compatibility guidelines[](#compatibility-guidelines "Permalink")

HTTP API 使用单个数字进行版本控制,当前数字为 4.此数字与[SemVer](https://semver.org/)描述的主要版本号[相同](https://semver.org/) . 这意味着向后不兼容的更改将需要更改此版本号. 但是,次要版本不明确. 这可以实现稳定的 API 端点,但也意味着可以将新功能以相同的版本号添加到 API.

新功能和错误修复与新的 GitLab 一起发布,除附带的修补程序和安全版本外,还于每月 22 日发布. 向后不兼容的更改(例如,端点删除,参数删除等)以及整个 API 版本的删除与 GitLab 本身的主要版本一起进行. 两个版本之间的所有弃用和更改都应在文档中列出. 对于 v3 和 v4 之间的更改; 请阅读[v3 至 v4 文档](v3_to_v4.html)

### Current status[](#current-status "Permalink")

当前仅提供 API 版本 v4\. v3 版本已在[GitLab 11.0](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/36819)中删除.

## Basic usage[](#basic-usage "Permalink")

API 请求应以`api`和 API 版本为前缀. API 版本在[`lib/api.rb`](https://gitlab.com/gitlab-org/gitlab/tree/master/lib/api/api.rb)定义. 例如,v4 API 的根位于`/api/v4` .

使用 cURL 的有效 API 请求的示例:

```
curl "https://gitlab.example.com/api/v4/projects" 
```

该 API 使用 JSON 序列化数据. 您无需在 API URL 的末尾指定`.json` .

## Authentication[](#authentication "Permalink")

大多数 API 请求都需要身份验证,或者仅在不提供身份验证时才返回公共数据. 对于不需要的情况,将在文档中针对每个端点进行提及. 例如, [`/projects/:id`端点](projects.html#get-single-project) .

使用 GitLab API 进行身份验证的方法有几种:

1.  [OAuth2 tokens](#oauth2-tokens)
2.  [Personal access tokens](../user/profile/personal_access_tokens.html)
3.  [Project access tokens](../user/project/settings/project_access_tokens.html)
4.  [Session cookie](#session-cookie)
5.  [GitLab CI/CD job token](#gitlab-ci-job-token) **(仅特定端点)**

对于想要以特定用户身份向 API 进行身份验证的管理员,或者想要构建执行此操作的应用程序或脚本的管理员,可以使用以下两种方法:

1.  [Impersonation tokens](#impersonation-tokens)
2.  [Sudo](#sudo)

如果身份验证信息无效或被忽略,将返回一条错误消息,状态码为`401`

```
{  "message":  "401 Unauthorized"  } 
```

### OAuth2 tokens[](#oauth2-tokens "Permalink")

您可以通过在`access_token`参数或`Authorization`标头中传递[OAuth2 令牌](oauth2.html)来对 API 进行身份验证.

在参数中使用 OAuth2 令牌的示例:

```
curl "https://gitlab.example.com/api/v4/projects?access_token=OAUTH-TOKEN" 
```

在标头中使用 OAuth2 令牌的示例:

```
curl --header "Authorization: Bearer OAUTH-TOKEN" "https://gitlab.example.com/api/v4/projects" 
```

阅读有关[GitLab 作为 OAuth2 提供程序的](oauth2.html)更多信息.

### Personal/project access tokens[](#personalproject-access-tokens "Permalink")

Access tokens can be used to authenticate with the API by passing it in either the `private_token` parameter or the `Private-Token` header.

在参数中使用个人/项目访问令牌的示例:

```
curl "https://gitlab.example.com/api/v4/projects?private_token=<your_access_token>" 
```

在标头中使用个人/项目访问令牌的示例:

```
curl --header "Private-Token: <your_access_token>" "https://gitlab.example.com/api/v4/projects" 
```

您还可以将个人/项目访问令牌与 OAuth 兼容标头一起使用:

```
curl --header "Authorization: Bearer <your_access_token>" "https://gitlab.example.com/api/v4/projects" 
```

### Session cookie[](#session-cookie "Permalink")

登录主 GitLab 应用程序时,将设置`_gitlab_session` cookie. 如果存在,API 将使用此 cookie 进行身份验证,但是当前不支持使用 API​​生成新的会话 cookie.

这种身份验证方法的主要用户是 GitLab 本身的 Web 前端,它可以将 API 用作经过身份验证的用户来获取其项目列表,例如,而无需显式传递访问令牌.

### GitLab CI job token[](#gitlab-ci-job-token "Permalink")

通过一些 API 端点,您可以使用[GitLab CI / CD 作业令牌](../user/project/new_ci_build_permissions_model.html#job-token)来对该 API 进行身份验证:

*   [Get job artifacts](jobs.html#get-job-artifacts)
*   [Pipeline triggers](pipeline_triggers.html)
*   [Release creation](releases/index.html#create-a-release)

### Impersonation tokens[](#impersonation-tokens "Permalink")

在 GitLab 9.0 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/9099) . 需要管理员权限.

模拟令牌是一种[个人访问令牌](../user/profile/personal_access_tokens.html) ,只能由管理员为特定用户创建. 如果您要构建以特定用户身份通过​​API 进行身份验证的应用程序或脚本,则它们非常适合.

它们是直接使用用户密码或他们的个人访问令牌之一以及使用[Sudo](#sudo)功能的替代方法,因为用户(或管理员,对于 Sudo 而言)的密码/令牌可能是未知的,或者可能随时间变化.

有关更多信息,请参考[用户 API](users.html#create-an-impersonation-token)文档.

模拟令牌的使用与常规个人访问令牌完全一样,并且可以在`private_token`参数或`Private-Token`标头中传递.

#### Disable impersonation[](#disable-impersonation "Permalink")

在 GitLab 11.6 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/40385) .

默认情况下,模拟是启用的. 禁用模拟:

**对于所有安装**

1.  Edit `/etc/gitlab/gitlab.rb`:

    ```
    gitlab_rails['impersonation_enabled'] = false 
    ```

2.  保存文件并[重新配置](../administration/restart_gitlab.html#omnibus-gitlab-reconfigure) GitLab,以使更改生效.

要重新启用模拟,请删除此配置并重新配置 GitLab.

**对于源安装**

1.  Edit `config/gitlab.yml`:

    ```
    gitlab:
      impersonation_enabled: false 
    ```

2.  保存文件并[重新启动](../administration/restart_gitlab.html#installations-from-source) GitLab,以使更改生效.

要重新启用模拟,请删除此配置并重新启动 GitLab.

### Sudo[](#sudo "Permalink")

**注意:**仅对[管理员](../user/permissions.html)可用.

如果已通过具有`sudo`范围的 OAuth 或 Personal Access Token 作为管理员进行身份验证,则所有 API 请求都支持执行 API 调用,就好像您是另一个用户一样.

您需要通过查询字符串或带有您要执行操作的用户的 ID /用户名的标头传递`sudo`参数. 如果作为标题传递,则标题名称必须为`Sudo` .

**注意:**用户名不区分大小写.

如果提供了非管理访问令牌,将返回错误消息,状态码为`403`

```
{  "message":  "403 Forbidden - Must be admin to use sudo"  } 
```

如果提供了没有`sudo`范围的访问令牌,则将返回错误消息,状态码为`403`

```
{  "error":  "insufficient_scope",  "error_description":  "The request requires higher privileges than provided by the access token.",  "scope":  "sudo"  } 
```

如果找不到 sudo 用户 ID 或用户名,将返回错误消息,状态码为`404`

```
{  "message":  "404 User with ID or username '123' Not Found"  } 
```

有效的 API 调用和使用 cURL 和 sudo request(提供用户名)的请求的示例:

```
GET /projects?private_token=<your_access_token>&sudo=username 
```

```
curl --header "Private-Token: <your_access_token>" --header "Sudo: username" "https://gitlab.example.com/api/v4/projects" 
```

提供 ID 的有效 API 调用和使用 cURL 和 sudo request 的请求的示例:

```
GET /projects?private_token=<your_access_token>&sudo=23 
```

```
curl --header "Private-Token: <your_access_token>" --header "Sudo: 23" "https://gitlab.example.com/api/v4/projects" 
```

## Status codes[](#status-codes "Permalink")

该 API 旨在根据上下文和操作返回不同的状态代码. 这样,如果请求导致错误,则调用者可以洞悉出了什么问题.

下表概述了 API 函数的一般行为.

| 请求类型 | Description |
| --- | --- |
| `GET` | 访问一个或多个资源,并将结果作为 JSON 返回. |
| `POST` | 如果成功创建资源,则返回`201 Created` ,然后将新创建的资源作为 JSON 返回. |
| `GET` / `PUT` | 如果成功访问或修改了资源,则返回`200 OK` . (修改后的)结果作为 JSON 返回. |
| `DELETE` | 如果资源已成功删除,则返回`204 No Content` . |

下表显示了 API 请求的可能返回码.

| 返回值 | Description |
| --- | --- |
| `200 OK` | `GET``PUT``DELETE`请求成功,资源本身作为 JSON 返回. |
| `204 No Content` | 服务器已成功满足请求,并且响应有效载荷主体中没有其他要发送的内容. |
| `201 Created` | `POST`请求成功,资源作为 JSON 返回. |
| `304 Not Modified` | 指示自上次请求以来尚未修改资源. |
| `400 Bad Request` | API 请求的必需属性丢失,例如,未提供问题标题. |
| `401 Unauthorized` | 用户未通过身份验证,有效的[用户令牌](#authentication)是必需的. |
| `403 Forbidden` | 不允许该请求,例如,不允许用户删除项目. |
| `404 Not Found` | 无法访问资源,例如,找不到资源的 ID. |
| `405 Method Not Allowed` | The request is not supported. |
| `409 Conflict` | 已经存在冲突的资源,例如,使用已经存在的名称创建项目. |
| `412` | 表示请求被拒绝. `If-Unmodified-Since`尝试删除资源时提供了`If-Unmodified-Since`标头,则可能会发生这种情况. |
| `422 Unprocessable` | 无法处理该实体. |
| `500 Server Error` | 在处理请求时,服务器端出了点问题. |

## Pagination[](#pagination "Permalink")

我们支持两种分页方法:

*   基于偏移的分页. 这是默认方法,并且在所有端点上都可用.
*   基于键集的分页. 已添加到选定的端点,但会[逐步推出](https://gitlab.com/groups/gitlab-org/-/epics/2039) .

对于大型集合,出于性能原因,我们建议键集分页(如果有)而不是偏移分页.

### Offset-based pagination[](#offset-based-pagination "Permalink")

有时,返回的结果将跨越许多页面. 列出资源时,可以传递以下参数:

| Parameter | Description |
| --- | --- |
| `page` | 页码(默认: `1` ) |
| `per_page` | 每页要列出的项目数(默认: `20` ,最大: `100` ) |

在下面的示例中,我们每页列出 50 个[名称空间](namespaces.html) .

```
curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/namespaces?per_page=50" 
```

#### Pagination Link header[](#pagination-link-header "Permalink")

[链接头](https://www.w3.org/wiki/LinkHeader)随每个响应一起发送回去. 它们的`rel`设置为 prev / next / first / last 并包含相关的 URL. 请使用这些链接,而不是生成自己的 URL.

在下面的卷曲的例子,我们限制输出到每页 3 项( `per_page=3` ),我们要求的第二页( `page=2`的) [评论](notes.html)与 ID 问题的`8`属于与 ID 项目`8`

```
curl --head --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/8/issues/8/notes?per_page=3&page=2" 
```

响应将是:

```
HTTP/1.1 200 OK
Cache-Control: no-cache
Content-Length: 1103
Content-Type: application/json
Date: Mon, 18 Jan 2016 09:43:18 GMT
Link: <https://gitlab.example.com/api/v4/projects/8/issues/8/notes?page=1&per_page=3>; rel="prev", <https://gitlab.example.com/api/v4/projects/8/issues/8/notes?page=3&per_page=3>; rel="next", <https://gitlab.example.com/api/v4/projects/8/issues/8/notes?page=1&per_page=3>; rel="first", <https://gitlab.example.com/api/v4/projects/8/issues/8/notes?page=3&per_page=3>; rel="last"
Status: 200 OK
Vary: Origin
X-Next-Page: 3
X-Page: 2
X-Per-Page: 3
X-Prev-Page: 1
X-Request-Id: 732ad4ee-9870-4866-a199-a9db0cde3c86
X-Runtime: 0.108688
X-Total: 8
X-Total-Pages: 3 
```

#### Other pagination headers[](#other-pagination-headers "Permalink")

其他分页标题也会发送回.

| Header | Description |
| --- | --- |
| `X-Total` | 项目总数 |
| `X-Total-Pages` | 总页数 |
| `X-Per-Page` | 每页的项目数 |
| `X-Page` | 当前页面的索引(从 1 开始) |
| `X-Next-Page` | 下一页的索引 |
| `X-Prev-Page` | 前一页的索引 |

**注意:**由于性能原因,自[GitLab 11.8 起](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/23931)**在`api_kaminari_count_with_limit` [功能标志](../development/feature_flags/index.html)后面** ,如果资源数量大于 10,000,则`X-Total``X-Total-Pages`标头以及`rel="last"` `Link`将不存在响应头.

### Keyset-based pagination[](#keyset-based-pagination "Permalink")

键集分页可以更有效地检索页面,并且与基于偏移的分页相比,运行时与集合的大小无关.

此方法由以下参数控制:

| Parameter | Description |
| --- | --- |
| `pagination` | `keyset` (启用键集分页) |
| `per_page` | 每页要列出的项目数(默认: `20` ,最大: `100` ) |

在下面的示例中,我们每页列出 50 [个项目](projects.html) ,并按`id`升序排列.

```
curl --request GET --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects?pagination=keyset&per_page=50&order_by=id&sort=asc" 
```

响应头包括指向下一页的链接. 例如:

```
HTTP/1.1 200 OK
...
Links: <https://gitlab.example.com/api/v4/projects?pagination=keyset&per_page=50&order_by=id&sort=asc&id_after=42>; rel="next"
Link: <https://gitlab.example.com/api/v4/projects?pagination=keyset&per_page=50&order_by=id&sort=asc&id_after=42>; rel="next"
Status: 200 OK
... 
```

**弃用:** `Links`标题将在 GitLab 14.0 中删除,以符合[W3C `Link`规范](https://www.w3.org/wiki/LinkHeader)

指向下一页的链接包含一个附加过滤器`id_after=42` ,该过滤器不包括我们已经检索到的记录. 请注意,过滤器的类型取决于所使用的`order_by`选项,我们可能有多个过滤器.

当到达集合的末尾并且没有其他要检索的记录时,将没有`Links`头,并且结果数组为空.

我们建议仅使用给定的链接来检索下一页,而不要构建自己的 URL. 除了显示的标题外,我们不公开其他分页标题.

仅针对所选资源和订购选项支持基于键集的分页:

| Resource | Order |
| --- | --- |
| [Projects](projects.html) | `order_by=id` only |

## Path parameters[](#path-parameters "Permalink")

如果端点具有路径参数,则文档将在它们前面加上冒号.

例如:

```
DELETE /projects/:id/share/:group_id 
```

`:id`路径参数需要替换为项目 ID,而`:group_id`需要替换为组的 ID. 冒号`:`不应包含在内.

因此,对 ID 为`5` ,组 ID 为`17`的项目的 cURL 调用为:

```
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/share/17" 
```

**注意:**必须遵循要求进行 URL 编码的路径参数. 如果不是,它将与 API 端点不匹配并以 404 进行响应.如果 API 前面有某些内容(例如 Apache),请确保它不会对 URL 编码的路径参数进行解码.

## Namespaced path encoding[](#namespaced-path-encoding "Permalink")

如果使用命名空间的 API 调用,请确保`NAMESPACE/PROJECT_PATH`是 URL 编码的.

例如, `/``/`表示:

```
GET /api/v4/projects/diaspora%2Fdiaspora 
```

**注意:**项目的**路径**不必与**名称**相同. 可以在项目的 URL 或项目设置中的**常规>高级>更改路径**下找到项目的**路径** .

## File path, branches, and tags name encoding[](#file-path-branches-and-tags-name-encoding "Permalink")

如果文件路径,分支或标记包含`/` ,请确保其经过 URL 编码.

例如, `/``/`表示:

```
GET /api/v4/projects/1/repository/files/src%2FREADME.md?ref=master
GET /api/v4/projects/1/branches/my%2Fbranch/commits
GET /api/v4/projects/1/repository/tags/my%2Ftag 
```

## Request Payload[](#request-payload "Permalink")

API 请求可以使用作为[查询字符串](https://en.wikipedia.org/wiki/Query_string)[有效载荷主体](https://tools.ietf.org/html/draft-ietf-httpbis-p3-payload-14#section-3.2)发送的参数. GET 请求通常发送查询字符串,而 PUT / POST 请求通常发送有效内容正文:

*   请求参数:

    ```
    curl --request POST "https://gitlab/api/v4/projects?name=<example-name>&description=<example-description>" 
    ```

*   请求有效载荷(JSON):

    ```
    curl --request POST --header "Content-Type: application/json" --data '{"name":"<example-name>", "description":"<example-description"}' "https://gitlab/api/v4/projects" 
    ```

URL 编码的查询字符串具有长度限制. 请求太大将导致`414 Request-URI Too Large`错误消息. 这可以通过使用有效载荷主体来解决.

## Encoding API parameters of `array` and `hash` types[](#encoding-api-parameters-of-array-and-hash-types "Permalink")

我们可以使用`array``hash`类型参数调用 API,如下所示:

### `array`[](#array "Permalink")

`import_sources``array`类型的参数:

```
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
-d "import_sources[]=github" \
-d "import_sources[]=bitbucket" \
https://gitlab.example.com/api/v4/some_endpoint 
```

### `hash`[](#hash "Permalink")

`override_params``hash`类型的参数:

```
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
--form "namespace=email" \
--form "path=impapi" \
--form "file=@/path/to/somefile.txt"
--form "override_params[visibility]=private" \
--form "override_params[some_other_param]=some_value" \
https://gitlab.example.com/api/v4/projects/import 
```

### Array of hashes[](#array-of-hashes "Permalink")

`variables`是包含哈希键/值对`[{ 'key' => 'UPLOAD_TO_S3', 'value' => 'true' }]` `array`类型的参数:

```
curl --globoff --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
"https://gitlab.example.com/api/v4/projects/169/pipeline?ref=master&variables[][key]=VAR1&variables[][value]=hello&variables[][key]=VAR2&variables[][value]=world"

curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
--header "Content-Type: application/json" \
--data '{ "ref": "master", "variables": [ {"key": "VAR1", "value": "hello"}, {"key": "VAR2", "value": "world"} ] }' \
"https://gitlab.example.com/api/v4/projects/169/pipeline" 
```

## `id` vs `iid`[](#id-vs-iid "Permalink")

Some resources have two similarly-named fields. For example, [issues](issues.html), [merge requests](merge_requests.html), and [project milestones](merge_requests.html). The fields are:

*   `id` :在所有项目中唯一的 ID.
*   `iid` :在单个项目范围内唯一的附加内部 ID.

**注意:** `iid`显示在 Web UI 中.

如果资源具有`iid`字段和`id`字段,则通常使用`iid`字段代替`id`来获取资源.

例如,假设一个`id: 42`的项目有一个`id: 46``iid: 5` . 在这种情况下:

*   检索问题的有效 API 调用是`GET /projects/42/issues/5`
*   检索问题的无效 API 调用是`GET /projects/42/issues/46` .

**注意:**并非所有具有`iid`字段的资源都由`iid`获取. 有关使用哪个字段的指导,请参阅特定资源的文档.

## Data validation and error reporting[](#data-validation-and-error-reporting "Permalink")

使用 API​​时,您可能会遇到验证错误,在这种情况下,API 会以 HTTP `400`状态进行回答.

这种错误在两种情况下出现:

*   API 请求的必需属性丢失,例如,未给出问题标题
*   属性未通过验证,例如,用户简历太长

当缺少属性时,您将获得类似以下内容的信息:

```
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
 "message":"400 (Bad request) \"title\" not given"
} 
```

发生验证错误时,错误消息将有所不同. 它们将包含验证错误的所有详细信息:

```
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
 "message": {
 "bio": [
 "is too long (maximum is 255 characters)"
 ]
 }
} 
```

这使错误消息更加机器可读. 格式可以描述如下:

```
{  "message":  {  "<property-name>":  [  "<error-message>",  "<error-message>",  ...  ],  "<embed-entity>":  {  "<property-name>":  [  "<error-message>",  "<error-message>",  ...  ],  }  }  } 
```

## Unknown route[](#unknown-route "Permalink")

当您尝试访问不存在的 API URL 时,您将收到 404 Not Found.

```
HTTP/1.1 404 Not Found
Content-Type: application/json
{
 "error": "404 Not Found"
} 
```

## Encoding `+` in ISO 8601 dates[](#encoding--in-iso-8601-dates "Permalink")

如果需要在查询参数中包含`+` ,则由于[W3 建议](http://www.w3.org/Addressing/URL/4_URI_Recommentations.html)会将`+`解释为空格,因此可能需要使用`+`来代替. 例如,在一个 ISO 8601 日期中,您可能希望以"山区标准时间"传递时间,例如:

```
2017-10-17T23:11:13.000+05:30 
```

The correct encoding for the query parameter would be:

```
2017-10-17T23:11:13.000%2B05:30 
```

## Clients[](#clients "Permalink")

大多数流行的编程语言都有许多非官方的 GitLab API 客户端. 访问[GitLab 网站](https://about.gitlab.com/partners/#api-clients)以获取完整列表.

## Rate limits[](#rate-limits "Permalink")

有关速率限制设置的管理员文档,请参阅[速率限制](../security/rate_limits.html) . 要查找 GitLab.com 专门使用的设置,请参阅[GitLab.com 特定的速率限制](../user/gitlab_com/index.html#gitlabcom-specific-rate-limits) .