SlideShare a Scribd company logo
1 of 36
Download to read offline
API RESTful 
Retour d’expérience 
Christophe Laprun / @metacosm 
Jahia Solutions Group SA
REST? 
• REpresentational State Transfert 
• “Architectural style for distributed 
hypermedia system” - Roy Fielding
REST? 
• Certes… mais plus concrètement? 
• Ensemble de contraintes pour le web donc 
HTTP
Client - serveur 
• Séparation des clients et des serveurs 
• Serveur publie une collection de 
“resources”… 
• … que les clients peuvent manipuler via 
leur représentations
Serveur sans état 
• Toutes les requêtes doivent contenir toutes 
les informations nécessaires pour que le 
serveur puisse y répondre
Caches 
• Les réponses peuvent être cachées par les 
clients 
• Une réponse doit établir sous quelles 
conditions elle peut être cachée
Interface uniforme 
• Identification des resources 
• Manipulation des resources via leur 
représentations 
• Messages auto-descriptifs 
• Hypermedia As The Engine Of Application 
State (HATEOAS)
Système à couche 
• L’architecture doit prendre en compte et 
permettre l’existence potentielle d’éléments 
intermédiaires entre le client et le serveur 
• Requêtes et réponses peuvent être 
modifiées de manière transparente
Code à la demande 
(optionnel) 
• Clients peuvent être étendus en 
demandant du code au serveur
Contraintes 
• Pourquoi?
Caractéristiques 
architecturales 
• Performance 
• Évolutivité (changement / charge) 
• Simplicité 
• Modifiabilité 
• Visibilité des interactions (monitoring) 
• Portabilité 
• Fiabilité
Contraintes? 
• Les 3 premières contraintes permettent 
une architecture web scalable et 
performante: 
• Couplage faible client / serveur 
(évolutivité) 
• Pas d’état géré par le serveur: multi-threading, 
clustering facilités 
• Performance via caches
Contraintes? 
• La 5ème contrainte permet de gérer la 
performance/évolutivité (load-balancers), la 
sécurité (firewall) et l’encapsulation 
(gateway) de manière transparente 
• La 6ème contrainte permet au serveur de 
déléguer une partie du travail aux clients 
(scripts, applets)
4ème contrainte? 
• Le vrai centre des architectures REST 
• Unifie l’interface entre les différentes 
parties de l’architecture 
• Permet de créer une architecture similaire 
aux pipes UNIX
API RESTful? 
• Techniquement, on doit parler d’API 
RESTful, pas d’API REST 
• Une API qui respecte les principes de 
l’architecture REST
API RESTful? 
• Certes… mais plus concrètement?
API RESTful? 
• Beaucoup (tout?) réside sur comment 
respecter le principe d’interface uniforme
RESTful? 
• GET: /getAllClients 
• GET: /addClient?id=foo 
• GET: /invoiceClient?client=foo&id=1234
Questions pertinentes 
• Quelles sont les resources que le serveur 
expose? 
• Comment sont-elles identifiées (URIs)? 
• Comment sont-elles représentées? 
• Comment mapper le fonctionnel sur la 
sémantique réduite des verbes HTTP? 
• Comment gérer l’état dans une 
architecture stateless?
Modèle de maturité de 
Richardson
Niveau 1: resources 
• Resources sont identifiées avec URI 
• Tunneling des requêtes (GET ou POST) 
• Pas de sémantique
Resources 
• Noms, pas verbes 
• Similaire à une conception orientée objet 
• Uniform Resource Identifier (URI) associé 
à chaque resource
Niveau 2: verbes HTTP 
• Multiples resources 
• Utilisation sémantiquement correcte des 
verbes HTTP 
• Utilisation correcte des code de réponse
Sémantique méthodes 
HTTP 
• CRUD operations 
• POST / PUT: création 
• GET: lecture 
• PUT / POST: mise à jour 
• DELETE: destruction
Niveau 3: contrôles 
hypermédia 
• Resources auto-descriptives 
• État ET comportement accessible via les 
représentations 
• HATEOAS
Représentations 
• Les clients n’ont pas accès aux resources, 
seulement leur représentations 
• Doivent contenir suffisamment 
d’informations pour assurer les transitions 
d’état
Choix du content-type 
• Dépend des clients cibles 
• Négociation de contenu 
• Réutiliser un media type existant ou 
développer un media type propre?
Cas d’utilisation: JCR 
• Besoin: exposer un repository JCR via une 
architecture REST 
• Optimisé pour un accès facilité via JS
Aperçu JCR 
• Java Content Repository 
• Modèle de données et services associés 
pour le stockage et la manipulation de 
contenu numérique 
• Repository: ensemble de workspaces 
• Workspace: graphe orienté acyclique 
• Sommets: Items (Node / Property) 
• Arcs: relation parent - fils
Aperçu JCR 
• Item: 
• Type 
• Path 
• Node: 
• Identifiant 
• Enfants 
• Propriétés 
• Mixins 
• Versions 
• Property: 
• Valeur(s)
Aperçu JCR
Resources 
• Mapping assez simple dans notre cas: 
resource => node
Sémantique HTTP 
• CRUD sur les noeuds JCR 
• Mapping assez simple encore une fois 
• Mais: 
• Liberté sur la sémantique PUT/POST vs. 
PATCH
Représentations 
• JSON seul 
• augmenté de Hypertext Application 
Language 
• Content-type: application/hal+json
RESTful? 
• Sémantique des verbes HTTP? 
• Transition d’état par les liens? 
• Pas de media type propre 
• Versionning dans les URLs vs. via media 
type
Références 
• La thèse de Roy Fielding: http:// 
www.ics.uci.edu/~fielding/pubs/ 
dissertation/top.htm 
• RESTful Web Services Cookbook 
(Allamaraju - O’Reilly) 
• RESTful Web APIs (Richardson / 
Amundsen - O’Reilly) 
• HAL: https://tools.ietf.org/html/draft-kelly-json- 
hal-06

More Related Content

What's hot

Les plateformes de développement des web services
Les plateformes de développement des web servicesLes plateformes de développement des web services
Les plateformes de développement des web servicesoussemos
 
Introduction aux web services
Introduction aux web servicesIntroduction aux web services
Introduction aux web servicesmohammed addoumi
 
Services web soap-el-habib-nfaoui
Services web soap-el-habib-nfaouiServices web soap-el-habib-nfaoui
Services web soap-el-habib-nfaouiEl Habib NFAOUI
 
S51 vos projets web services ibm i a l aide de php
S51   vos projets web services ibm i a l aide de phpS51   vos projets web services ibm i a l aide de php
S51 vos projets web services ibm i a l aide de phpGautier DUMAS
 
De l'open source à l'open API avec Restlet
De l'open source à l'open API avec RestletDe l'open source à l'open API avec Restlet
De l'open source à l'open API avec RestletJerome Louvel
 
Presentation article rest : How-to
Presentation article rest : How-toPresentation article rest : How-to
Presentation article rest : How-toDamien Cavaillès
 
Services web rest_support_cours_nfaoui_el_habib
Services web rest_support_cours_nfaoui_el_habibServices web rest_support_cours_nfaoui_el_habib
Services web rest_support_cours_nfaoui_el_habibEl Habib NFAOUI
 

What's hot (15)

Soap, wsdl et uddi
Soap, wsdl et uddiSoap, wsdl et uddi
Soap, wsdl et uddi
 
Les plateformes de développement des web services
Les plateformes de développement des web servicesLes plateformes de développement des web services
Les plateformes de développement des web services
 
Introduction aux web services
Introduction aux web servicesIntroduction aux web services
Introduction aux web services
 
Ter Web Service Intro
Ter Web Service IntroTer Web Service Intro
Ter Web Service Intro
 
Services web soap-el-habib-nfaoui
Services web soap-el-habib-nfaouiServices web soap-el-habib-nfaoui
Services web soap-el-habib-nfaoui
 
S51 vos projets web services ibm i a l aide de php
S51   vos projets web services ibm i a l aide de phpS51   vos projets web services ibm i a l aide de php
S51 vos projets web services ibm i a l aide de php
 
Soap
SoapSoap
Soap
 
De l'open source à l'open API avec Restlet
De l'open source à l'open API avec RestletDe l'open source à l'open API avec Restlet
De l'open source à l'open API avec Restlet
 
Presentation SOAP
 Presentation SOAP Presentation SOAP
Presentation SOAP
 
Langage HTML
Langage HTMLLangage HTML
Langage HTML
 
Presentation article rest : How-to
Presentation article rest : How-toPresentation article rest : How-to
Presentation article rest : How-to
 
Services web rest_support_cours_nfaoui_el_habib
Services web rest_support_cours_nfaoui_el_habibServices web rest_support_cours_nfaoui_el_habib
Services web rest_support_cours_nfaoui_el_habib
 
Soap
SoapSoap
Soap
 
.NET DotNet CF - 3
.NET DotNet CF - 3.NET DotNet CF - 3
.NET DotNet CF - 3
 
education
educationeducation
education
 

Viewers also liked

REST API Overview with Nutanix
REST API Overview with Nutanix REST API Overview with Nutanix
REST API Overview with Nutanix NEXTtour
 
[FR] C'est quoi une API ?
[FR] C'est quoi une API ?[FR] C'est quoi une API ?
[FR] C'est quoi une API ?OVHcloud
 
Advanced designs for reusable lightning components
Advanced designs for reusable lightning componentsAdvanced designs for reusable lightning components
Advanced designs for reusable lightning componentsthomaswaud
 
Containers and Nutanix - Acropolis Container Services
Containers and Nutanix - Acropolis Container ServicesContainers and Nutanix - Acropolis Container Services
Containers and Nutanix - Acropolis Container ServicesNEXTtour
 
Gestion des risques contractuels / HEG Genève
Gestion des risques contractuels / HEG GenèveGestion des risques contractuels / HEG Genève
Gestion des risques contractuels / HEG GenèveCougar Partners
 
Lightning Components - Advanced Features
Lightning Components - Advanced FeaturesLightning Components - Advanced Features
Lightning Components - Advanced FeaturesSalesforce Developers
 
Le cycle de vie de la gestion des risques
Le cycle de vie de la gestion des risquesLe cycle de vie de la gestion des risques
Le cycle de vie de la gestion des risquesPMI-Montréal
 
Best Practices for Lightning Apps
Best Practices for Lightning AppsBest Practices for Lightning Apps
Best Practices for Lightning AppsMark Adcock
 
Services web RESTful
Services web RESTfulServices web RESTful
Services web RESTfulgoldoraf
 
AngularJS - Présentation (french)
AngularJS - Présentation (french)AngularJS - Présentation (french)
AngularJS - Présentation (french)Yacine Rezgui
 
Symfony with angular.pptx
Symfony with angular.pptxSymfony with angular.pptx
Symfony with angular.pptxEsokia
 
Présentation ACROPOLIS - ÉVÉNEMENT TOUR D'ARGENT : ACROPOLIS - NUTANIX - SIPA...
Présentation ACROPOLIS - ÉVÉNEMENT TOUR D'ARGENT : ACROPOLIS - NUTANIX - SIPA...Présentation ACROPOLIS - ÉVÉNEMENT TOUR D'ARGENT : ACROPOLIS - NUTANIX - SIPA...
Présentation ACROPOLIS - ÉVÉNEMENT TOUR D'ARGENT : ACROPOLIS - NUTANIX - SIPA...Acropolis Telecom
 
En quoi un logiciel peut booster votre Business ?
En quoi un logiciel peut booster votre Business ?En quoi un logiciel peut booster votre Business ?
En quoi un logiciel peut booster votre Business ?Fred Canevet
 
ENIB 2013-2014 - CAI Web #1: Côté navigateur 3/3
ENIB 2013-2014 - CAI Web #1: Côté navigateur 3/3 ENIB 2013-2014 - CAI Web #1: Côté navigateur 3/3
ENIB 2013-2014 - CAI Web #1: Côté navigateur 3/3 Horacio Gonzalez
 

Viewers also liked (20)

11 sylvain siou nutanix
11 sylvain siou nutanix11 sylvain siou nutanix
11 sylvain siou nutanix
 
REST API Overview with Nutanix
REST API Overview with Nutanix REST API Overview with Nutanix
REST API Overview with Nutanix
 
[FR] C'est quoi une API ?
[FR] C'est quoi une API ?[FR] C'est quoi une API ?
[FR] C'est quoi une API ?
 
Advanced designs for reusable lightning components
Advanced designs for reusable lightning componentsAdvanced designs for reusable lightning components
Advanced designs for reusable lightning components
 
Containers and Nutanix - Acropolis Container Services
Containers and Nutanix - Acropolis Container ServicesContainers and Nutanix - Acropolis Container Services
Containers and Nutanix - Acropolis Container Services
 
Gestion des risques contractuels / HEG Genève
Gestion des risques contractuels / HEG GenèveGestion des risques contractuels / HEG Genève
Gestion des risques contractuels / HEG Genève
 
Lightning Components - Advanced Features
Lightning Components - Advanced FeaturesLightning Components - Advanced Features
Lightning Components - Advanced Features
 
Advanced Lightning Components
Advanced Lightning ComponentsAdvanced Lightning Components
Advanced Lightning Components
 
Le cycle de vie de la gestion des risques
Le cycle de vie de la gestion des risquesLe cycle de vie de la gestion des risques
Le cycle de vie de la gestion des risques
 
Api presentation
Api presentationApi presentation
Api presentation
 
Best Practices for Lightning Apps
Best Practices for Lightning AppsBest Practices for Lightning Apps
Best Practices for Lightning Apps
 
Services web RESTful
Services web RESTfulServices web RESTful
Services web RESTful
 
AngularJS - Présentation (french)
AngularJS - Présentation (french)AngularJS - Présentation (french)
AngularJS - Présentation (french)
 
RESTful Web Services
RESTful Web ServicesRESTful Web Services
RESTful Web Services
 
Symfony with angular.pptx
Symfony with angular.pptxSymfony with angular.pptx
Symfony with angular.pptx
 
Présentation ACROPOLIS - ÉVÉNEMENT TOUR D'ARGENT : ACROPOLIS - NUTANIX - SIPA...
Présentation ACROPOLIS - ÉVÉNEMENT TOUR D'ARGENT : ACROPOLIS - NUTANIX - SIPA...Présentation ACROPOLIS - ÉVÉNEMENT TOUR D'ARGENT : ACROPOLIS - NUTANIX - SIPA...
Présentation ACROPOLIS - ÉVÉNEMENT TOUR D'ARGENT : ACROPOLIS - NUTANIX - SIPA...
 
NodeJs in real life
NodeJs in real lifeNodeJs in real life
NodeJs in real life
 
Le HTML5 & les API
Le HTML5 & les APILe HTML5 & les API
Le HTML5 & les API
 
En quoi un logiciel peut booster votre Business ?
En quoi un logiciel peut booster votre Business ?En quoi un logiciel peut booster votre Business ?
En quoi un logiciel peut booster votre Business ?
 
ENIB 2013-2014 - CAI Web #1: Côté navigateur 3/3
ENIB 2013-2014 - CAI Web #1: Côté navigateur 3/3 ENIB 2013-2014 - CAI Web #1: Côté navigateur 3/3
ENIB 2013-2014 - CAI Web #1: Côté navigateur 3/3
 

Similar to RESTful API - Retour d'expérience

Restful, really ? MixIt 2014
Restful, really ? MixIt 2014Restful, really ? MixIt 2014
Restful, really ? MixIt 2014Xavier Carpentier
 
Comprendre, utiliser et créer une API
Comprendre, utiliser et créer une APIComprendre, utiliser et créer une API
Comprendre, utiliser et créer une APIOlivia Reaney
 
De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)Restlet
 
Node.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascriptNode.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascriptKhalid Jebbari
 
Formation d'architecte logiciel AFCEPF
Formation d'architecte logiciel AFCEPFFormation d'architecte logiciel AFCEPF
Formation d'architecte logiciel AFCEPFBoubker ABERWAG
 
Aspectize meetup
Aspectize meetupAspectize meetup
Aspectize meetupAspectize
 
Architectures microservices
Architectures microservicesArchitectures microservices
Architectures microservicesRiadh MNASRI
 
1 - chapitre 1 chapitre 2 SOA.pdf
1 - chapitre 1 chapitre 2 SOA.pdf1 - chapitre 1 chapitre 2 SOA.pdf
1 - chapitre 1 chapitre 2 SOA.pdfhaythem bouzouraa
 
Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesENSET, Université Hassan II Casablanca
 
Le design d'API avec Mulesoft
Le design d'API avec MulesoftLe design d'API avec Mulesoft
Le design d'API avec MulesoftSpikeeLabs
 
11 visual basic .net - acces aux donnees avec ado .net
11 visual basic .net - acces aux donnees avec ado .net11 visual basic .net - acces aux donnees avec ado .net
11 visual basic .net - acces aux donnees avec ado .netHamza SAID
 
ENIB 2013-2014 - CAI Web #1: Côté navigateur 1/3
ENIB 2013-2014 - CAI Web #1: Côté navigateur 1/3ENIB 2013-2014 - CAI Web #1: Côté navigateur 1/3
ENIB 2013-2014 - CAI Web #1: Côté navigateur 1/3Horacio Gonzalez
 
0570-les-services-web.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
0570-les-services-web.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0570-les-services-web.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
0570-les-services-web.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbhindguendouz2000
 
Azure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmediaAzure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmediaMicrosoft
 
[JSS2015] Infra bi#4 - le scale out
[JSS2015] Infra bi#4 - le scale out[JSS2015] Infra bi#4 - le scale out
[JSS2015] Infra bi#4 - le scale outGUSS
 
Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...
Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...
Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...Valtech
 

Similar to RESTful API - Retour d'expérience (20)

Restful, really ? MixIt 2014
Restful, really ? MixIt 2014Restful, really ? MixIt 2014
Restful, really ? MixIt 2014
 
Comprendre, utiliser et créer une API
Comprendre, utiliser et créer une APIComprendre, utiliser et créer une API
Comprendre, utiliser et créer une API
 
De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)
 
Node.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascriptNode.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascript
 
Formation d'architecte logiciel AFCEPF
Formation d'architecte logiciel AFCEPFFormation d'architecte logiciel AFCEPF
Formation d'architecte logiciel AFCEPF
 
Aspectize meetup
Aspectize meetupAspectize meetup
Aspectize meetup
 
Présentation sharepoint 2013
Présentation sharepoint 2013Présentation sharepoint 2013
Présentation sharepoint 2013
 
Architectures microservices
Architectures microservicesArchitectures microservices
Architectures microservices
 
1 - chapitre 1 chapitre 2 SOA.pdf
1 - chapitre 1 chapitre 2 SOA.pdf1 - chapitre 1 chapitre 2 SOA.pdf
1 - chapitre 1 chapitre 2 SOA.pdf
 
Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependances
 
Le design d'API avec Mulesoft
Le design d'API avec MulesoftLe design d'API avec Mulesoft
Le design d'API avec Mulesoft
 
11 visual basic .net - acces aux donnees avec ado .net
11 visual basic .net - acces aux donnees avec ado .net11 visual basic .net - acces aux donnees avec ado .net
11 visual basic .net - acces aux donnees avec ado .net
 
Esiea - 5A - Archi 1/3
Esiea - 5A - Archi 1/3Esiea - 5A - Archi 1/3
Esiea - 5A - Archi 1/3
 
Rails 3 au Djangocong
Rails 3 au DjangocongRails 3 au Djangocong
Rails 3 au Djangocong
 
Java Entreprise Edition
Java Entreprise EditionJava Entreprise Edition
Java Entreprise Edition
 
ENIB 2013-2014 - CAI Web #1: Côté navigateur 1/3
ENIB 2013-2014 - CAI Web #1: Côté navigateur 1/3ENIB 2013-2014 - CAI Web #1: Côté navigateur 1/3
ENIB 2013-2014 - CAI Web #1: Côté navigateur 1/3
 
0570-les-services-web.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
0570-les-services-web.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0570-les-services-web.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
0570-les-services-web.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
 
Azure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmediaAzure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmedia
 
[JSS2015] Infra bi#4 - le scale out
[JSS2015] Infra bi#4 - le scale out[JSS2015] Infra bi#4 - le scale out
[JSS2015] Infra bi#4 - le scale out
 
Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...
Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...
Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...
 

RESTful API - Retour d'expérience

  • 1. API RESTful Retour d’expérience Christophe Laprun / @metacosm Jahia Solutions Group SA
  • 2. REST? • REpresentational State Transfert • “Architectural style for distributed hypermedia system” - Roy Fielding
  • 3. REST? • Certes… mais plus concrètement? • Ensemble de contraintes pour le web donc HTTP
  • 4. Client - serveur • Séparation des clients et des serveurs • Serveur publie une collection de “resources”… • … que les clients peuvent manipuler via leur représentations
  • 5. Serveur sans état • Toutes les requêtes doivent contenir toutes les informations nécessaires pour que le serveur puisse y répondre
  • 6. Caches • Les réponses peuvent être cachées par les clients • Une réponse doit établir sous quelles conditions elle peut être cachée
  • 7. Interface uniforme • Identification des resources • Manipulation des resources via leur représentations • Messages auto-descriptifs • Hypermedia As The Engine Of Application State (HATEOAS)
  • 8. Système à couche • L’architecture doit prendre en compte et permettre l’existence potentielle d’éléments intermédiaires entre le client et le serveur • Requêtes et réponses peuvent être modifiées de manière transparente
  • 9. Code à la demande (optionnel) • Clients peuvent être étendus en demandant du code au serveur
  • 11. Caractéristiques architecturales • Performance • Évolutivité (changement / charge) • Simplicité • Modifiabilité • Visibilité des interactions (monitoring) • Portabilité • Fiabilité
  • 12. Contraintes? • Les 3 premières contraintes permettent une architecture web scalable et performante: • Couplage faible client / serveur (évolutivité) • Pas d’état géré par le serveur: multi-threading, clustering facilités • Performance via caches
  • 13. Contraintes? • La 5ème contrainte permet de gérer la performance/évolutivité (load-balancers), la sécurité (firewall) et l’encapsulation (gateway) de manière transparente • La 6ème contrainte permet au serveur de déléguer une partie du travail aux clients (scripts, applets)
  • 14. 4ème contrainte? • Le vrai centre des architectures REST • Unifie l’interface entre les différentes parties de l’architecture • Permet de créer une architecture similaire aux pipes UNIX
  • 15. API RESTful? • Techniquement, on doit parler d’API RESTful, pas d’API REST • Une API qui respecte les principes de l’architecture REST
  • 16. API RESTful? • Certes… mais plus concrètement?
  • 17. API RESTful? • Beaucoup (tout?) réside sur comment respecter le principe d’interface uniforme
  • 18. RESTful? • GET: /getAllClients • GET: /addClient?id=foo • GET: /invoiceClient?client=foo&id=1234
  • 19. Questions pertinentes • Quelles sont les resources que le serveur expose? • Comment sont-elles identifiées (URIs)? • Comment sont-elles représentées? • Comment mapper le fonctionnel sur la sémantique réduite des verbes HTTP? • Comment gérer l’état dans une architecture stateless?
  • 20. Modèle de maturité de Richardson
  • 21. Niveau 1: resources • Resources sont identifiées avec URI • Tunneling des requêtes (GET ou POST) • Pas de sémantique
  • 22. Resources • Noms, pas verbes • Similaire à une conception orientée objet • Uniform Resource Identifier (URI) associé à chaque resource
  • 23. Niveau 2: verbes HTTP • Multiples resources • Utilisation sémantiquement correcte des verbes HTTP • Utilisation correcte des code de réponse
  • 24. Sémantique méthodes HTTP • CRUD operations • POST / PUT: création • GET: lecture • PUT / POST: mise à jour • DELETE: destruction
  • 25. Niveau 3: contrôles hypermédia • Resources auto-descriptives • État ET comportement accessible via les représentations • HATEOAS
  • 26. Représentations • Les clients n’ont pas accès aux resources, seulement leur représentations • Doivent contenir suffisamment d’informations pour assurer les transitions d’état
  • 27. Choix du content-type • Dépend des clients cibles • Négociation de contenu • Réutiliser un media type existant ou développer un media type propre?
  • 28. Cas d’utilisation: JCR • Besoin: exposer un repository JCR via une architecture REST • Optimisé pour un accès facilité via JS
  • 29. Aperçu JCR • Java Content Repository • Modèle de données et services associés pour le stockage et la manipulation de contenu numérique • Repository: ensemble de workspaces • Workspace: graphe orienté acyclique • Sommets: Items (Node / Property) • Arcs: relation parent - fils
  • 30. Aperçu JCR • Item: • Type • Path • Node: • Identifiant • Enfants • Propriétés • Mixins • Versions • Property: • Valeur(s)
  • 32. Resources • Mapping assez simple dans notre cas: resource => node
  • 33. Sémantique HTTP • CRUD sur les noeuds JCR • Mapping assez simple encore une fois • Mais: • Liberté sur la sémantique PUT/POST vs. PATCH
  • 34. Représentations • JSON seul • augmenté de Hypertext Application Language • Content-type: application/hal+json
  • 35. RESTful? • Sémantique des verbes HTTP? • Transition d’état par les liens? • Pas de media type propre • Versionning dans les URLs vs. via media type
  • 36. Références • La thèse de Roy Fielding: http:// www.ics.uci.edu/~fielding/pubs/ dissertation/top.htm • RESTful Web Services Cookbook (Allamaraju - O’Reilly) • RESTful Web APIs (Richardson / Amundsen - O’Reilly) • HAL: https://tools.ietf.org/html/draft-kelly-json- hal-06