Sto cercando di comprendere il modo migliore per affrontare i concetti in un'API basata su REST. Risorse piatte che non contengono altre risorse non sono un problema. Dove mi trovo nei guai sono le risorse complesse.Complesso REST/Composite/Nested Resources
Ad esempio, ho una risorsa per ComicBook. ComicBook ha tutti i tipi di proprietà su di esso come autore, numero di rilascio, data, ecc.
Un fumetto include anche un elenco di copertine 1..n. Queste coperture sono oggetti complessi. Contengono molte informazioni sulla copertina, sull'artista, sulla data e persino su un'immagine codificata di base 64 della copertina.
Per un GET su ComicBook, potevo semplicemente restituire il fumetto e tutte le copertine incluse le immagini di base64. Questo probabilmente non è un grosso problema per ottenere un singolo fumetto. Ma supponiamo che sto costruendo un'app client che vuole elencare tutti i fumetti nel sistema in una tabella. La tabella conterrà alcune proprietà della risorsa ComicBook, ma certamente non vorremmo visualizzare tutte le copertine nella tabella. Restituire 1000 fumetti, ciascuno con più copertine, si tradurrebbe in una quantità ridicolmente grande di dati che arrivano attraverso il filo, dati che non sono necessari all'utente finale in quel caso.
Il mio istinto è quello di rendere Cover una risorsa e ComicBook contiene cover. Quindi ora Cover è un URI. RICEVI ora sui fumetti, invece della grossa risorsa Cover restituiamo un URI per ogni copertina e i clienti possono recuperare le risorse di Cover quando ne hanno bisogno.
Ora ho un problema con la creazione di nuovi fumetti. Sicuramente ho intenzione di creare almeno una copertina quando creo un fumetto, infatti è probabilmente una regola aziendale. Così ora sono bloccato, o costringo i clienti a far rispettare le regole di business inviando prima una cover, ottenendo l'URI per quella copertina, poi postando un ComicBook con quell'URI nella lista, o il mio POST su ComicBook ha un aspetto diverso Risorsa di quanto sputa fuori. Le risorse in entrata per POST e GET sono copie profonde, in cui le GET in uscita contengono riferimenti a risorse dipendenti.
La risorsa di copertura è probabilmente necessaria in ogni caso perché sono sicuro che come cliente vorrei in alcuni casi indirizzare la direzione di Covers. Quindi il problema esiste in una forma generale indipendentemente dalla dimensione della risorsa dipendente. In generale, come gestisci le risorse complesse senza costringere il cliente a "sapere" come sono composte tali risorse?
utilizza [RESTFUL SERVICE DISCOVERY] (http://barelyenough.org/blog/2008/01/restful-service-discovery-and-description/) ha senso? – treecoder
Sto cercando di aderire a HATEAOS che, a mio parere, è contrario all'uso di qualcosa del genere ma darò un'occhiata. – jgerman
Domanda diversa con lo stesso spirito. Tuttavia la proprietà è diversa dalla soluzione proposta (quella nella domanda). http://stackoverflow.com/questions/20951419/what-are-best-practices-for-rest-nested-resources – Wes