Ultimamente ho letto di Hypermedia come Engine of Application State (HATEOAS), il vincolo che si dice abbia reso l'API Web "veramente RESTful". Si riduce sostanzialmente a includere collegamenti con ogni risposta alle possibili transizioni che è possibile effettuare dallo stato corrente.
Permettetemi di illustrare ciò che HATEOAS si basa sulla mia comprensione - e per favore correggetemi se ho 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" }
}
}
Si dice che HATEOAS offra due vantaggi principali:
L'intero servizio è rilevabile a partire dall'URI principale, non è più necessaria la documentazione.
Il client è disaccoppiato dal server che ora può cambiare liberamente la struttura dell'URI. Ciò elimina la necessità di versionare le API.
Ma dal mio punto di vista, un servizio è molto più della sua struttura URI. Per usarlo in modo efficace, devi anche sapere:
- quali parametri di query è possibile utilizzare e i loro possibili valori
- la struttura di JSON / XML / qualunque documento sia necessario inviare nelle 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 minima parte dei problemi di rilevabilità e accoppiamento. È ancora necessario documentare i quattro aspetti precedenti e i client saranno comunque fortemente accoppiati al server a causa loro. Per evitare la rottura dei client, è comunque necessario eseguire la versione dell'API.
L'unico vantaggio che offre è che puoi modificare la struttura del tuo URL più o meno liberamente (a proposito, cosa è successo al principio "I cool URI non cambiano" ?). La mia comprensione è corretta?