Added frontend GraphQL docs
This commit is contained in:
parent
385e8f712c
commit
24b4c1e8bf
2 changed files with 86 additions and 0 deletions
83
doc/development/fe_guide/graphql.md
Normal file
83
doc/development/fe_guide/graphql.md
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
# GraphQL
|
||||||
|
|
||||||
|
We use [Apollo] and [Vue Apollo][vue-apollo] for working with GraphQL
|
||||||
|
on the frontend.
|
||||||
|
|
||||||
|
In order to use GraphQL, you need to enable the `graphql` feature flag,
|
||||||
|
read more about [Feature Flags][feature-flags].
|
||||||
|
|
||||||
|
## Apollo Client
|
||||||
|
|
||||||
|
To save duplicated clients getting created in different apps, we have a
|
||||||
|
[default client][defualt-client] that should be used. This setups the
|
||||||
|
Apollo client with the correct URL and also sets the CSRF headers.
|
||||||
|
|
||||||
|
## GraphQL Queries
|
||||||
|
|
||||||
|
To save query compilation at runtime, webpack can directly import `.graphql`
|
||||||
|
files. This allows webpack to preprocess the query at compile time instead
|
||||||
|
of the client doing compilation of queries.
|
||||||
|
|
||||||
|
## Usage in Vue
|
||||||
|
|
||||||
|
To use Vue Apollo, import the [Vue Apollo][vue-apollo] plugin as well
|
||||||
|
as the default client. This should be created at the same point
|
||||||
|
the Vue application is mounted.
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
import Vue from 'vue';
|
||||||
|
import VueApollo from 'vue-apollo';
|
||||||
|
import defaultClient from '~/lib/graphql';
|
||||||
|
Vue.use(VueApollo);
|
||||||
|
|
||||||
|
const apolloProvider = new VueApollo({
|
||||||
|
defaultClient,
|
||||||
|
});
|
||||||
|
|
||||||
|
new Vue({
|
||||||
|
...,
|
||||||
|
apolloProvider,
|
||||||
|
...
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
Read more about [Vue Apollo][vue-apollo] in the [Vue Apollo documentation][vue-apollo-docs].
|
||||||
|
|
||||||
|
### Testing
|
||||||
|
|
||||||
|
With [Vue test utils][vue-test-utils] it is easy to quickly test components that
|
||||||
|
fetch GraphQL queries. The simplest way is to use `shallowMount` and then set
|
||||||
|
the data on the component
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
it('tests apollo component', () => {
|
||||||
|
const vm = shallowMount(App);
|
||||||
|
|
||||||
|
vm.setData({
|
||||||
|
...mock data
|
||||||
|
});
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage outside of Vue
|
||||||
|
|
||||||
|
It is also possible to use GraphQL outside of Vue by directly importing
|
||||||
|
and using the default client with queries.
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
import defaultClient from '~/lib/graphql';
|
||||||
|
import query from './query.graphql';
|
||||||
|
|
||||||
|
defaultClient.query(query)
|
||||||
|
.then(result => console.log(result));
|
||||||
|
```
|
||||||
|
|
||||||
|
Read more about the [Apollo] client in the [Apollo documentation][apollo-client-docs].
|
||||||
|
|
||||||
|
[Apollo]: https://www.apollographql.com/
|
||||||
|
[vue-apollo]: https://github.com/Akryum/vue-apollo/
|
||||||
|
[vue-apollo-docs]: https://akryum.github.io/vue-apollo/
|
||||||
|
[feature-flags]: ../feature_flags.md
|
||||||
|
[default-client]: https://gitlab.com/gitlab-org/gitlab-ce/blob/master/app/assets/javascripts/lib/graphql.js
|
||||||
|
[apollo-client-docs]: https://www.apollographql.com/docs/tutorial/client.html
|
||||||
|
[vue-test-utils]: https://vue-test-utils.vuejs.org/
|
|
@ -54,6 +54,9 @@ Vuex specific design patterns and practices.
|
||||||
## [Axios](axios.md)
|
## [Axios](axios.md)
|
||||||
Axios specific practices and gotchas.
|
Axios specific practices and gotchas.
|
||||||
|
|
||||||
|
## [GraphQL](graphql.md)
|
||||||
|
How to use GraphQL
|
||||||
|
|
||||||
## [Icons and Illustrations](icons.md)
|
## [Icons and Illustrations](icons.md)
|
||||||
How we use SVG for our Icons and Illustrations.
|
How we use SVG for our Icons and Illustrations.
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue