Dernièrement, j'ai lu quelque chose sur Hypermedia en tant que moteur d'état d'application (HATEOAS), la contrainte prétendue pour rendre une API Web "vraiment RESTful". Cela revient essentiellement à inclure des liens avec chaque réponse aux transitions possibles que vous pouvez effectuer à partir de l'état actuel.
Laissez-moi illustrer ce que HATEOAS est basé sur ma compréhension - et corrigez-moi s'il vous plaît si je rate quelque chose.
/
GET: {
"_links": {
"child": [
{ "href": "http://myapi.com/articles", "title": "articles" }
]
}
}
/articles?contains=HATEOAS
GET: {
"_items": [
{ "uri": "http://myapi.com/articles/0", "title": "Why Should I Care About HATEOAS?" },
{ "uri": "http://myapi.com/articles/1", "title": "HATEOAS: Problem or Solution?" }
],
"_links": {
"self": { "href": "http://myapi.com/articles", "title": "articles" },
"parent": { "href": "http://myapi.com/", "title": "home" }
}
}
POST: {
"title": "A New Article",
"body": "Article body",
"tags": [ "tag1", "tag2" ]
}
/articles/0
GET: {
"title": "Why Should I Care About HATEOAS?",
"body": "Blah blah blah"
"tags": [ "REST", "HATEOAS" ],
"_links": {
"self": { "href": "http://myapi.com/articles/0", "title": "article" },
"parent": { "href": "http://myapi.com/articles", "title": "articles" }
}
}
HATEOAS aurait deux avantages majeurs:
L'ensemble du service est découvrable à partir de l'URI racine, la documentation n'est plus nécessaire.
Le client est découplé du serveur, ce qui permet désormais de modifier librement la structure de l'URI. Cela élimine le besoin de versioning de l'API.
Mais à mon avis, un service est beaucoup plus que sa structure d'URI. Pour l'utiliser efficacement, vous devez également connaître:
- quels paramètres de requête vous pouvez utiliser et leurs valeurs possibles
- la structure du fichier JSON / XML / quels que soient les documents à envoyer dans vos demandes POST / PATCH / etc
- la structure de la réponse envoyée par le serveur
- les erreurs possibles qui pourraient se produire
- ...
Basé sur ce qui précède, HATEOAS ne résout qu'une infime partie des problèmes de découverte et de couplage. Vous devez toujours documenter les quatre aspects ci-dessus et les clients seront toujours fortement couplés au serveur à cause d'eux. Pour éviter de casser des clients, vous devez toujours mettre à jour votre API.
Le seul avantage qu'il offre est que vous pouvez modifier votre structure d'URL plus ou moins librement (soit dit en passant, que s'est-il passé avec le principe "Les URI cool ne changent pas" ?). Ma compréhension est-elle correcte?
La seule chose qui en fait une véritable API REST est de répondre à toutes les contraintes, pas à une seule.
C'est pourquoi nous avons besoin des autres contraintes, du message auto-descriptif, etc.
Peu importe comment vous essayez, vous aurez besoin de la version de votre API. Dans un client REST, vous devez toujours savoir comment accéder à une page sur laquelle vous souhaitez effectuer des tâches, quels liens suivre et quelles propriétés vous devez collecter en fonction du vocabulaire RDF décrivant le message. Si vous devez remplacer ou supprimer quelque chose de ce vocabulaire, tous vos clients seront probablement cassés et vous aurez besoin d'une nouvelle version. Je pense donc que REST n'est pas quelque chose que vous devriez publier tôt (et comprendre le modèle pendant que vous changez constamment l'API), sinon vous aurez plusieurs versions. Vous devez d'abord disposer d'un modèle de domaine stable sur lequel vous pouvez construire ...
la source