Click here to load reader
Upload
xavier-carpentier
View
764
Download
0
Embed Size (px)
DESCRIPTION
Tout le monde dit faire ou vouloir faire une architecture de type Rest, que cela implique-t-il vraiment ? Où vous situez-vous sur le "Richardson Maturity Model" ? Votre API est à la fois Hypermedia et JSON, « Are you kidding ? » Si ce sont des questions qui vous taraudent l'esprit et même vous empêchent de dormir, alors venez écouter ce talk pour avoir des pistes de réflexions, des échanges et peut-être des réponses, qui sait ?
Citation preview
#Restful, really ?Faire une architecture de type Rest, que cela implique-t-
il vraiment ?
Xavier Carpentier Twitter: @xcapetir [email protected]
Définition
• Representational State Transfer
• Rest est un style d'architecture client / serveur, en couches avec une interface uniforme, utilisant le cache et étant stateless
Contexte & implication
• Retour d'expérience développeur
• d'API :communication avec partenaires
• d'applications web et mobile qui utilisent des APIs
• Arrêter de penser Remote Procedure Call
–Phil Karlton
“There are only two hard things in Computer Science: cache invalidation and naming
things.”
Problèmes avec Rest• Cache (API et apps)
• Resources : changement de paradigme (API et apps)
• Same Origin Policy (apps)
• Authentification (API et apps)
• Pas de standard de sécurité évolué (API et apps)
• Si besoin de moins de 100ms de latence (essayer d’éviter en interne)
Cool stuff !• Versioning : Accept-content : application/
vnd.acme.user+json;v=1
• Status code HTTP
• Hypertext
• Identification par URI
• Négociation de contenu : Accept-* (Language et Type)
• etc.
Pure Rest :)
• Utiliser tous les verbes HTTP
• Stateless
• Paramètre(s) dans l’URI
• Cache
Practical Rest :(
• Utiliser seulement GET et POST
• Stateful
• Les paramètres dans la Query-String ou en POST
Hypermedia
• HATEOAS : hypermedia moteur de l’état de l’application
• Nœuds liés par des hyperliens
Hypermedia : ok
• Auto-documentation, auto-découverte de l’API
• Tolérance au changement
• Monté en charge toujours possible (scalable)
Hypermedia : nok
• Maintenir les liens et les relations
• Ajoute de la complexité côté serveur
• Pas "encore" de standard (simple, unique) pour JSON
Hypermedia et JSON
• JSON-LD : norme Linked Data pour JSON du W3C
• HAL : utilisé par Amazon AppStream
• Collection+JSON de Mike Amundsen
• Siren
Conseils• Pas de verbes dans l’URL
• Utiliser des noms au pluriel dans l’URL
• Supprimer la complexité dans la Query-String
• Pas de version dans l’url
• Pas de content type dans l’url
• Eviter le practical Rest
• POST n'est pas idempotent (unsafe) contrairement à PUT
• Les versbes HTTP != CRUD
• Penser ressources et pas méthodes ou actions
Richardson Maturity Model
• niveau 0 : RPC sur HTTP
• niveau 1 : ressources différenciées
• niveau 2 : verbes et codes retours HTTP
• niveau 3 : contrôles hypermedia