它将与当前的 v4 REST API 共存;如果我们有 v5 API,则它应该是 GraphQL 之上的兼容性层。
尽管 GraphQL 存在一些专利和许可问题,但通过 MIT 下的参考实现的重新许可以及 GraphQL 规范使用 OWF 许可证,我们已经满意得解决了这些问题。
## 兼容性指引[](#compatibility-guidelines "Permalink")
HTTP API 使用单个数字进行版本控制,当前版本为 4。此数字与[SemVer](https://semver.org/)描述的主要版本号[相同](https://semver.org/) ,这意味着向后不兼容的更改将需要更改此版本号。但是,次要版本不明确。这可以实现稳定的 API 接口,但也意味着可以将新功能以相同的版本号添加到 API。
当前仅提供 API 版本 v4,v3 版本已在[GitLab 11.0](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/36819)中移除。
## 基础用法[](#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://codechina.csdn.net/api/v4/projects"
```
该 API 使用 JSON 序列化数据,您无需在 API URL 的末尾指定`.json` 。
## 认证[](#authentication "Permalink")
大多数 API 请求都需要身份验证,或者仅在不提供身份验证时才返回公共数据。对于不需要的情况,将在文档中针对每个接口进行提及,例如, [`/projects/:id`接口](https://docs.gitlab.com/13.2/ee/api/projects.html#get-single-project)。
GET /api/v4/projects/1/repository/files/src%2FREADME-?ref=master
GET /api/v4/projects/1/branches/my%2Fbranch/commits
GET /api/v4/projects/1/repository/tags/my%2Ftag
```
## 请求有效载荷[](#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://codechina.csdn.net/api/v4/some_endpoint
```
### `hash`[](#hash "Permalink")
`override_params`是`hash`类型的参数:
```
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
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: