GraphQL
Il ne laisse pas de REST...
#dev #web #data #api
Des ressources manipulées : création, lecture, modification et suppression par une
façade générique & interopérable
par le protocole HTTP
Des fonctions métiers d'un système exposées par une signature XML (WSDL)
POST /post
GET /post/1/
PATCH /post/1/
DELETE /post/1
{ title : '...', content: '...' }
{ id: 1, title : '...', content: '...' }
{ id: 1, title : '...', content: '...' }
{ title : 'AAA' }
{ id: 1, title : 'AAA', content: '...'
{ }
GET /post/
[{ id: 1, title : '...', content: '...' }]
REQUEST BODY
URI (endpoint)
RESPONSE
POST /post
GET /author/1/post
{ author: 1, ... }
{ id: 1, author: 1, ... }
[{ id: 1, author: 1, ... }]
GET /post/1/
{ id: 1, author: 1, ... }
GET /author/1
{ id: 1, name: '...', ... }
Il est nécessaire de faire une requête supplémentaire pour
la récupération des informations de l'auteur
REQUEST BODY
URI (endpoint)
RESPONSE
{
"id": 1,
"name": "Joe",
"posts": [
"id": 1,
"title": "Lorem ipsum"
]
}
type Author {
id: Int!
name: String!
gender: Int!
posts: [Post]
}
type Post{
id: Int!
title: String!
content: String!
}
type Query {
author(id: Int): Author
...
}
query AuthorPosts {
author(id: "1") {
id
name
posts {
id
title
}
}
}
QUERY
SCHEMA
RESPONSE
{
"id": 1,
"title": "Lorem ipsum",
"votes": 2
}
mutation UpVote {
upVote(id: "1") {
id
title
votes
}
}
type Author {
id: Int!
name: String!
gender: Int!
posts: [Post]
}
type Post{
id: Int!
title: String!
content: String!
}
type Mutation {
upVote (id: Int!): Post
...
}
QUERY
SCHEMA
RESPONSE
PLUS | MOINS | |
---|---|---|
API REST Orienté donnée JSON |
Simple (Mise en oeuvre et utilisation) Signature générique Forte testabilité |
Faible typage Structuration non partagé Données brutes en vrac |
SW SOAP Orienté service XML |
Signature claire et typée |
Complexe à mettre en œuvre Services unitaires Formalisé en XML |
GRAPHQL Orienté donnée et service JSON |
Données à la demande Typage fort Schema partagé Par HTTP ou Web Socket |
Sa jeunesse |