GraphQL
Il ne laisse pas de REST...
#dev #web #data #api
DATA API
Une histoire de données
Des ressources manipulées : création, lecture, modification et suppression par une
façade générique & interopérable
par le protocole HTTP
API REST
Application
Programming
Interface
Representational
state
transfer
WEB SERVICE SOAP
Simple
Object
Access
Protocol
WEB SERVICE
Une histoire de SERVICE
Des fonctions métiers d'un système exposées par une signature XML (WSDL)
POST /post
API REST
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
API REST
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
GRAPH Query LANGUAGE
{
"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
QUERY
SCHEMA
RESPONSE
GRAPH Query LANGUAGE
{
"id": 1,
"title": "Lorem ipsum",
"votes": 2
}
/ MUTATE
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
Comparaison
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 |
GraphQL, il ne laisse pas de reste !
By Michel EDIGHOFFER
GraphQL, il ne laisse pas de reste !
- 416