Sto cercando di capire i concetti di HATEOAS (Hypermedia As The Engine Of Application State) in REST. I seguenti sono stati molto utili:
Le API REST devono essere guidate da un ipertesto (da Roy Fielding se stesso)
Da loro capisco che HATEOAS non si limita a fornire link per dire al cliente quali sono le prossime azioni valide, ma anche fornire informazioni sui metodi validi che possono essere applicati a una risorsa e il formato dei dati passato in entrambe le direzioni tra il client e il server.
È il formato dei dati con cui ho problemi. Roy Fielding menziona la definizione di nuovi tipi di media per descrivere i formati dei dati. Se devono essere creati nuovi tipi di media per ogni API creata da qualcuno, verranno definiti centinaia di migliaia di tipi di supporti monouso.
Per ovviare a questo problema, qualcuno ha suggerito di utilizzare il tipo di supporto HAL ( Hypertext Application Language ) per le API RESTful. HAL include il concetto di CURIE, prefissi per nomi di relazioni che si espandono in URL che puntano alla documentazione.
Ad esempio,
"_links": {
"curies": [
{
"name": "doc",
"href": "http://haltalk.herokuapp.com/docs/{rel}",
"templated": true
}
],
"doc:latest-posts": {
"href": "/posts/latest"
}
}
Qui il nome della relazione è doc:latest-posts
dove doc
è un CURIE che si espande a http://haltalk.herokuapp.com/docs/
, e http://haltalk.herokuapp.com/docs/latest-posts
punterà alla documentazione sulla risorsa degli ultimi post (si noti che l'URL alla risorsa degli ultimi post di per sé, al contrario della documentazione su di esso, è /posts/latest
)
Questo sembra un buon modo per gli sviluppatori sul lato client di conoscere ogni risorsa fornita dall'API. Ma avere un collegamento automatico con la documentazione leggibile dall'uomo soddisfa i requisiti di rilevabilità di HATEOAS? O le informazioni che descrivono i formati di dati richiesti per ogni risorsa devono essere leggibili dal computer (ad esempio un tipo di supporto personalizzato per l'API)?