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 !

  • 347