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?