GraphQL est un langage de requête pour API et un moteur d'exécution pour répondre aux requêtes avec vos données existantes.
Requêtes (Queries)
Requête de base et réponse JSON
{ status }
JSON Response:
{
"data": {
"status": "available"
}
}
Objets imbriqués
{
hero {
name
height
}
}
Listes
{
friends {
name
}
}
Arguments
{
hero(id: "1000") {
id
name
}
}
Alias
{
luke: hero(id: "1000") {
name
}
han: hero(id: "1001") {
name
}
}
Noms d'opération et variables
Query Definition:
query FindHero($id: String!) {
hero(id: $id) {
name
}
}
Variables Payload (JSON):
{
"id": "1000"
}
Mutations
mutation CreateReviewForEpisode($ep: Episode!, $review: ReviewInput!) {
createReview(episode: $ep, review: $review) {
stars
commentary
}
}
Fragments en ligne (Inline Fragments)
{
search(q: "john") {
id
... on User {
name
}
... on Comment {
body
author {
name
}
}
}
}
GraphQL via HTTP
Requête GET
fetch('https://api.example.com/graphql?query={me{name}}')
Requête POST
fetch('https://api.example.com/graphql', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
query: 'query GetHero($id: String!) { hero(id: $id) { name } }',
variables: { id: '1000' }
})
})
Langage de définition de schéma (SDL)
Types de base
type Query {
me: User
users(limit: Int): [User]
}
type User {
id: ID!
name: String
}
Types scalaires natifs
| Scalaire | Description |
|---|---|
Int |
Entier 32 bits signé |
Float |
Nombre à virgule flottante double précision |
String |
Chaîne de caractères UTF-8 |
Boolean |
Valeur booléenne true ou false |
ID |
Identifiant unique sérialisé sous forme de chaîne |
Mots-clés de définition de types
| Mot-clé | Description |
|---|---|
type |
Type d'objet représentant un ensemble de champs |
scalar |
Type scalaire primitif personnalisé |
interface |
Type abstrait définissant des champs requis |
union |
Type abstrait regroupant plusieurs types d'objets |
enum |
Énumération de valeurs littérales autorisées |
input |
Objet complexe fourni en argument de requête ou mutation |
Modificateurs de type
| Modificateur | Description |
|---|---|
String |
Chaîne autorisant null (Nullable) |
String! |
Chaîne obligatoire non nulle (Non-nullable) |
[String] |
Liste autorisant null avec éléments autorisant null |
[String]! |
Liste obligatoire avec éléments autorisant null |
[String!]! |
Liste obligatoire avec éléments obligatoires |
Interfaces
interface Entity {
id: ID!
}
type User implements Entity {
id: ID!
name: String
}
Énumérations (Enums)
enum Direction {
NORTH
EAST
SOUTH
WEST
}
Unions
union SearchResult = Human | Droid | Starship
type Query {
search(text: String): [SearchResult]
}