Contesto
Per essere pienamente conforme ai principi REST enumerati nella tesi di Fielding, una risorsa deve contenere collegamenti che reindirizzano ad altre risorse che hanno una relazione con esso funzionalmente, come per un conto bancario che visualizza dinamicamente un link di prelievo, o semanticamente potrebbe essere correlato a un altro concetto correlato alla risorsa.
Più in generale questo concetto di collegamento è presentato ha HATEOAS. L. Richardson lo ha descritto molto bene come parte del suo Modello di maturità (in particolare il livello 3)
Problema
Da un punto di vista tecnico, i collegamenti non sono così facili da implementare. Sto affrontando in particolare un problema durante la modellazione delle mie risorse in classi. Devo associare diversi campi che corrispondono a un URI. Ecco un esempio di ciò che sembra (basato su questo esempio ), con una risorsa BankingAccount che descrive la sua caratteristica:
class BankingAccount() {
Double totalAmount;
String ownerName;
URI uriToCloseAccount;
URI uriToWithdrawMoney;
}
Qui, il campo uriToCloseAccount
è un URI (= un collegamento) che reindirizza a un'altra risorsa per chiudere l'account. Nella stessa mente, un altro URI uriToWithdrawMoney
reindirizzerà a una risorsa che elabora il prelievo.
Potrebbe essere possibile per un client recuperare questa risorsa tramite GET (su URI / bankingAccount / [id]) ma aggiornare anche solo il nome del proprietario, per qualsiasi motivo.
Problema
È realistico supporre che un client possa aggiornare il campo uriToCloseAccount
della risorsa di un BankingAccount?
Non sto completamente bene con questo. Ho sempre dato per scontato in passato che non è un cliente responsabile della gestione dell'URI. Sono qui solo per indicare un percorso da seguire (o le operazioni da fare, a seconda del formato hypermedia scelto) dal server stesso al client.
Quindi la domanda di fondo è: i link fanno parte del modello di risorsa? Oppure è un'informazione che è al di fuori del modello (non so, forse nel formato scelto?)
Grazie in anticipo!