## Bases & syntaxe
### Déclaration d'un schéma GraphQL
```graphql
type Query {
hello: String
}
Définit la structure des requêtes disponibles.
Résolution de champs
const resolvers = {
Query: {
hello: () => 'Hello world!'
}
};
Implémente les logiques pour chaque champ du schéma.
Structures de données
Types complexes
type User {
id: ID!
name: String!
age: Int
}
Définit des types qui peuvent contenir plusieurs champs.
Union et Interface
union SearchResult = User | Product
interface Named {
name: String!
}
type User implements Named {
id: ID!
name: String!
}
Permet la polyvalence et l'implémentation de contrats.
Fonctions & methodes essentielles
Mutation
mutation createUser($name: String!, $age: Int!) {
createUser(name: $name, age: $age) {
id
name
age
}
}
Modifie les données sur le serveur.
Subscriptions
const pubsub = new PubSub();
pubsub.publish('NEW_USER', { newUser });
app.use('/graphql', bodyParser.json(), expressGraphQL({
schema,
rootValue: {
subscription: pubsub.asyncIterator(['NEW_USER'])
}
}));
Permet aux clients de recevoir des mises à jour en temps réel.
Patterns courants
Pagination
type Query {
users(page: Int, limit: Int): [User]
}
Implémente la pagination pour les listes de données.
Filtrage et tri
type Query {
users(ageMin: Int, ageMax: Int, orderBy: String): [User]
}
Permet aux utilisateurs de filtrer et d'ordonner les résultats.
Opérations avancées
Fragments
fragment UserFields on User {
id
name
}
query GetUsers {
users {
...UserFields
}
}
Réutilise des parties communes dans des requêtes complexes.
Aliases
query GetUser {
me: user(id: "123") {
name
}
}
Permet de renommer les champs pour éviter les conflits.
Debugging & outils
Inspecteur de schéma
- Utiliser l'inspecteur de schéma en ligne
Permet de visualiser et d'explorer le schéma GraphQL.
GraphiQL
app.use('/graphiql', graphiqlExpress({
endpointURL: '/graphql'
}));
Interface interactive pour tester les requêtes GraphQL directement dans le navigateur.