2019-07-09 08:45:23 -04:00
|
|
|
# GraphQL API
|
2018-05-21 03:52:24 -04:00
|
|
|
|
2019-07-10 14:11:06 -04:00
|
|
|
> - [Introduced][ce-19008] in GitLab 11.0 (enabled by feature flag `graphql`).
|
2019-09-18 10:02:45 -04:00
|
|
|
> - [Always enabled](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/30444)
|
2019-07-10 14:11:06 -04:00
|
|
|
in GitLab 12.1.
|
2018-05-21 03:52:24 -04:00
|
|
|
|
2018-05-23 03:55:14 -04:00
|
|
|
[GraphQL](https://graphql.org/) is a query language for APIs that
|
|
|
|
allows clients to request exactly the data they need, making it
|
|
|
|
possible to get all required data in a limited number of requests.
|
2018-05-21 03:52:24 -04:00
|
|
|
|
2018-05-23 03:55:14 -04:00
|
|
|
The GraphQL data (fields) can be described in the form of types,
|
|
|
|
allowing clients to use [clientside GraphQL
|
|
|
|
libraries](https://graphql.org/code/#graphql-clients) to consume the
|
|
|
|
API and avoid manual parsing.
|
2018-05-21 03:52:24 -04:00
|
|
|
|
2018-05-23 03:55:14 -04:00
|
|
|
Since there's no fixed endpoints and datamodel, new abilities can be
|
|
|
|
added to the API without creating breaking changes. This allows us to
|
|
|
|
have a versionless API as described in [the GraphQL
|
|
|
|
documentation](https://graphql.org/learn/best-practices/#versioning).
|
2018-05-21 03:52:24 -04:00
|
|
|
|
2019-05-01 11:19:54 -04:00
|
|
|
## Vision
|
|
|
|
|
|
|
|
We want the GraphQL API to be the **primary** means of interacting
|
|
|
|
programmatically with GitLab. To achieve this, it needs full coverage - anything
|
|
|
|
possible in the REST API should also be possible in the GraphQL API.
|
|
|
|
|
|
|
|
To help us meet this vision, the frontend should use GraphQL in preference to
|
2019-07-09 08:45:23 -04:00
|
|
|
the REST API for new features.
|
2019-05-01 11:19:54 -04:00
|
|
|
|
|
|
|
There are no plans to deprecate the REST API. To reduce the technical burden of
|
|
|
|
supporting two APIs in parallel, they should share implementations as much as
|
|
|
|
possible.
|
|
|
|
|
2018-05-21 03:52:24 -04:00
|
|
|
## Available queries
|
|
|
|
|
2019-04-23 13:24:48 -04:00
|
|
|
A first iteration of a GraphQL API includes the following queries
|
|
|
|
|
|
|
|
1. `project` : Within a project it is also possible to fetch a `mergeRequest` by IID.
|
2019-07-08 04:50:38 -04:00
|
|
|
1. `group` : Basic group information and epics **(ULTIMATE)** are currently supported.
|
2019-05-12 17:10:46 -04:00
|
|
|
1. `namespace` : Within a namespace it is also possible to fetch `projects`.
|
2018-05-21 03:52:24 -04:00
|
|
|
|
2019-05-09 05:27:07 -04:00
|
|
|
### Multiplex queries
|
|
|
|
|
|
|
|
GitLab supports batching queries into a single request using
|
2019-10-07 14:06:24 -04:00
|
|
|
[apollo-link-batch-http](https://www.apollographql.com/docs/link/links/batch-http/). More
|
2019-05-09 05:27:07 -04:00
|
|
|
info about multiplexed queries is also available for
|
|
|
|
[graphql-ruby](https://graphql-ruby.org/queries/multiplex.html) the
|
|
|
|
library GitLab uses on the backend.
|
|
|
|
|
2019-07-11 04:06:35 -04:00
|
|
|
## Reference
|
|
|
|
|
|
|
|
GitLab's GraphQL reference [is available](reference/index.md).
|
|
|
|
|
|
|
|
It is automatically generated from GitLab's GraphQL schema and embedded in a Markdown file.
|
|
|
|
|
2019-10-31 23:06:26 -04:00
|
|
|
Machine-readable versions are also available:
|
|
|
|
|
|
|
|
- [JSON format](reference/gitlab_schema.json)
|
|
|
|
- [IDL format](reference/gitlab_schema.graphql)
|
|
|
|
|
2018-05-21 03:52:24 -04:00
|
|
|
## GraphiQL
|
|
|
|
|
|
|
|
The API can be explored by using the GraphiQL IDE, it is available on your
|
2018-05-23 03:55:14 -04:00
|
|
|
instance on `gitlab.example.com/-/graphql-explorer`.
|
2018-05-21 03:52:24 -04:00
|
|
|
|
2019-09-18 10:02:45 -04:00
|
|
|
[ce-19008]: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/19008
|
2018-05-23 03:55:14 -04:00
|
|
|
[features-api]: ../features.md
|