index.md 2.4 KB
Newer Older
C
charlie ablett 已提交
1
# GraphQL API
B
Bob Van Landuyt 已提交
2

3
> - [Introduced][ce-19008] in GitLab 11.0 (enabled by feature flag `graphql`).
4
> - [Always enabled](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/30444)
5
  in GitLab 12.1.
B
Bob Van Landuyt 已提交
6

7 8 9
[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.
B
Bob Van Landuyt 已提交
10

11 12 13 14
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.
B
Bob Van Landuyt 已提交
15

16 17 18 19
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).
B
Bob Van Landuyt 已提交
20

N
Nick Thomas 已提交
21 22 23 24 25 26 27
## 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
C
charlie ablett 已提交
28
the REST API for new features.
N
Nick Thomas 已提交
29 30 31 32 33

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.

B
Bob Van Landuyt 已提交
34 35
## Available queries

36 37 38
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.
39
1. `group` : Basic group information and epics **(ULTIMATE)** are currently supported.
40
1. `namespace` : Within a namespace it is also possible to fetch `projects`.
B
Bob Van Landuyt 已提交
41

P
Phil Hughes 已提交
42 43 44
### Multiplex queries

GitLab supports batching queries into a single request using
45
[apollo-link-batch-http](https://www.apollographql.com/docs/link/links/batch-http/). More
P
Phil Hughes 已提交
46 47 48 49
info about multiplexed queries is also available for
[graphql-ruby](https://graphql-ruby.org/queries/multiplex.html) the
library GitLab uses on the backend.

F
Felipe Artur 已提交
50 51 52 53 54 55
## 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.

B
Bob Van Landuyt 已提交
56 57 58
## GraphiQL

The API can be explored by using the GraphiQL IDE, it is available on your
59
instance on `gitlab.example.com/-/graphql-explorer`.
B
Bob Van Landuyt 已提交
60

61
[ce-19008]: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/19008
62
[features-api]: ../features.md