Ultimamente ho letto su Hypermedia come il motore dello stato dell'applicazione (HATEOAS), il vincolo che si pretende di rendere un'API web "veramente RESTful". Si riduce fondamentalmente a includere collegamenti con ogni risposta alle possibili transizioni che si possono fare dallo stato corrente.
Lascia che ti illustri cosa è basato su HATEOAS sulla mia comprensione - e per favore correggimi se mi sono perso qualcosa.
/
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 afferma di fornire due importanti vantaggi:
-
L'intero servizio è individuabile a partire dall'URI radice, la documentazione non è più necessaria.
-
Il client è disaccoppiato dal server che ora può modificare liberamente la struttura dell'URI. Ciò elimina la necessità del versioning delle API.
Ma a mio avviso, un servizio è molto più della sua struttura URI. Per usarlo efficacemente, devi anche sapere:
- quali parametri di query puoi utilizzare e i loro possibili valori
- la struttura di JSON / XML / i documenti che devi inviare nelle tue richieste POST / PATCH / etc
- la struttura della risposta inviata dal server
- i possibili errori che potrebbero verificarsi
- ...
Sulla base di quanto sopra, HATEOAS risolve solo una piccola parte dei problemi di scopribilità e accoppiamento. È comunque necessario documentare i quattro aspetti di cui sopra e i client saranno comunque strongmente accoppiati al server a causa di questi. Per evitare di rompere i client, devi comunque eseguire la versione dell'API.
L'unico vantaggio che offre è che puoi modificare la struttura dell'URL più o meno liberamente (a proposito, cosa è successo al principio " Gli URI freschi non cambiano "?). La mia comprensione è corretta?