restful, really ? mixit 2014
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 ?TRANSCRIPT
![Page 1: Restful, really ? MixIt 2014](https://reader038.vdocuments.pub/reader038/viewer/2022100602/558695c3d8b42ab7308b45a2/html5/thumbnails/1.jpg)
#Restful, really ?Faire une architecture de type Rest, que cela implique-t-
il vraiment ?
Xavier Carpentier Twitter: @xcapetir [email protected]
![Page 2: Restful, really ? MixIt 2014](https://reader038.vdocuments.pub/reader038/viewer/2022100602/558695c3d8b42ab7308b45a2/html5/thumbnails/2.jpg)
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
![Page 3: Restful, really ? MixIt 2014](https://reader038.vdocuments.pub/reader038/viewer/2022100602/558695c3d8b42ab7308b45a2/html5/thumbnails/3.jpg)
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
![Page 4: Restful, really ? MixIt 2014](https://reader038.vdocuments.pub/reader038/viewer/2022100602/558695c3d8b42ab7308b45a2/html5/thumbnails/4.jpg)
–Phil Karlton
“There are only two hard things in Computer Science: cache invalidation and naming
things.”
![Page 5: Restful, really ? MixIt 2014](https://reader038.vdocuments.pub/reader038/viewer/2022100602/558695c3d8b42ab7308b45a2/html5/thumbnails/5.jpg)
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)
![Page 6: Restful, really ? MixIt 2014](https://reader038.vdocuments.pub/reader038/viewer/2022100602/558695c3d8b42ab7308b45a2/html5/thumbnails/6.jpg)
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.
![Page 7: Restful, really ? MixIt 2014](https://reader038.vdocuments.pub/reader038/viewer/2022100602/558695c3d8b42ab7308b45a2/html5/thumbnails/7.jpg)
Pure Rest :)
• Utiliser tous les verbes HTTP
• Stateless
• Paramètre(s) dans l’URI
• Cache
![Page 8: Restful, really ? MixIt 2014](https://reader038.vdocuments.pub/reader038/viewer/2022100602/558695c3d8b42ab7308b45a2/html5/thumbnails/8.jpg)
Practical Rest :(
• Utiliser seulement GET et POST
• Stateful
• Les paramètres dans la Query-String ou en POST
![Page 9: Restful, really ? MixIt 2014](https://reader038.vdocuments.pub/reader038/viewer/2022100602/558695c3d8b42ab7308b45a2/html5/thumbnails/9.jpg)
Hypermedia
• HATEOAS : hypermedia moteur de l’état de l’application
• Nœuds liés par des hyperliens
![Page 10: Restful, really ? MixIt 2014](https://reader038.vdocuments.pub/reader038/viewer/2022100602/558695c3d8b42ab7308b45a2/html5/thumbnails/10.jpg)
Hypermedia : ok
• Auto-documentation, auto-découverte de l’API
• Tolérance au changement
• Monté en charge toujours possible (scalable)
![Page 11: Restful, really ? MixIt 2014](https://reader038.vdocuments.pub/reader038/viewer/2022100602/558695c3d8b42ab7308b45a2/html5/thumbnails/11.jpg)
Hypermedia : nok
• Maintenir les liens et les relations
• Ajoute de la complexité côté serveur
• Pas "encore" de standard (simple, unique) pour JSON
![Page 12: Restful, really ? MixIt 2014](https://reader038.vdocuments.pub/reader038/viewer/2022100602/558695c3d8b42ab7308b45a2/html5/thumbnails/12.jpg)
Hypermedia et JSON
• JSON-LD : norme Linked Data pour JSON du W3C
• HAL : utilisé par Amazon AppStream
• Collection+JSON de Mike Amundsen
• Siren
![Page 13: Restful, really ? MixIt 2014](https://reader038.vdocuments.pub/reader038/viewer/2022100602/558695c3d8b42ab7308b45a2/html5/thumbnails/13.jpg)
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
![Page 14: Restful, really ? MixIt 2014](https://reader038.vdocuments.pub/reader038/viewer/2022100602/558695c3d8b42ab7308b45a2/html5/thumbnails/14.jpg)
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