Ho riflettuto sul metodo corretto per definire le raccolte di risorse che hanno interdipendenza.API REST Progettare collegamenti tra raccolte di risorse
Per esempio, Consente di considerare "documenti" e "commenti", che sono in modo indipendente accessibile tramite l'URI:
/documents/{doc-uri}
/comments/{comment-id}
Tuttavia, di solito vogliamo la raccolta di commenti relativi a un documento specifico. Che crea una domanda di design su come questo dovrebbe essere archetected.
posso vedere alcune opzioni principali:
1.) Fornire un URI collezione dopo l'uri documento per i commenti
GET /documents/{doc-uri}/comments/
2.) Fornire un parametro per la raccolta commenti per selezionare dal documento
GET /comments/{comment-id}?related-doc={doc-uri}
3.) Utilizzare la negoziazione dei contenuti per richiedere i relativi commenti vengano reintrodotte attraverso l'intestazione Accept.
// Get all the comments for a document
GET /documents/{doc-uri} Accept: application/vnd.comments+xml
// Create a new comment
POST /documents/{doc-uri} Content-Type: application/vnd.comment+xml <comment>...</comment>
Metodo 1 ha il vantaggio di mettere automaticamente i commenti nel contesto del documento. Che è anche bello quando si creano, aggiornano ed eliminano commenti usando POST/PUT. Tuttavia non fornisce accesso globale ai commenti al di fuori del contesto di un documento. Quindi, se volessimo effettuare una ricerca su tutti i commenti nel sistema, avremmo bisogno del metodo # 2.
Il metodo 2 offre molti degli stessi vantaggi del numero 1, tuttavia la creazione di un commento senza il contesto di un documento non ha senso. Poiché i commenti devono essere esplicitamente correlati a un documento.
Il metodo 3 è interessante da un punto di vista GET e POST/create, ma diventa piuttosto peloso con l'aggiornamento e l'eliminazione.
Posso vedere pro e contro a tutti questi metodi, quindi sto cercando un altro consiglio da qualcuno che potrebbe aver affrontato e risolto questo problema prima.
Sto prendendo in considerazione l'idea di eseguire entrambi i metodi 1 & 2, quindi posso fornire tutte le funzionalità necessarie, ma sono preoccupato che possa complicare/duplicare eccessivamente le funzionalità.
Intendevi ipermedia, non ipertesto. Questa è la parte HATEOAS (http://en.wikipedia.org/wiki/HATEOAS) di REST. – jpbochi