@ray, eccellente discussione
@jgerman, non dimenticare che solo perché è REST, non significa che le risorse debbano essere messe in pietra da POST.
Ciò che scegli di includere in una determinata rappresentazione di una risorsa dipende da te.
Il tuo caso delle copertine a cui si fa riferimento separatamente è semplicemente la creazione di una risorsa padre (fumetto) le cui risorse secondarie (copertine) possono essere incrociate. Ad esempio, potresti anche voler fornire riferimenti ad autori, editori, personaggi o categorie separatamente. Potresti voler creare queste risorse separatamente o prima del fumetto che le fa riferimento come risorse secondarie. In alternativa, potresti creare nuove risorse secondarie al momento della creazione della risorsa principale.
Il tuo caso specifico delle copertine è leggermente più complesso in quanto una copertina richiede davvero un fumetto e viceversa.
Tuttavia, se si considera un messaggio di posta elettronica come risorsa e l'indirizzo mittente come risorsa figlio, è ovviamente possibile fare riferimento separatamente all'indirizzo mittente. Ad esempio, ottieni tutto dagli indirizzi. In alternativa, crea un nuovo messaggio con un precedente indirizzo da. Se l'e-mail fosse REST, si potrebbe facilmente vedere che molte risorse con riferimenti incrociati potrebbero essere disponibili: / messaggi-ricevuti, / bozze-messaggi, / da-indirizzi, / a-indirizzi, / indirizzi, / oggetti, / allegati, / cartelle , / tags, / categorie, / labels, et al.
Questo tutorial fornisce un ottimo esempio di risorse con riferimenti incrociati.
http://www.peej.co.uk/articles/restfully-delicious.html
Questo è il modello più comune per i dati generati automaticamente. Ad esempio, non pubblichi un URI, un ID o una data di creazione per la nuova risorsa, poiché questi sono generati dal server. Eppure, puoi recuperare l'URI, l'ID o la data di creazione quando recuperi la nuova risorsa.
Un esempio nel tuo caso di dati binari. Ad esempio, si desidera pubblicare dati binari come risorse secondarie. Quando si ottiene la risorsa padre, è possibile rappresentare tali risorse figlio come gli stessi dati binari o come URI che rappresentano i dati binari.
Forme e parametri sono già diversi dalle rappresentazioni HTML delle risorse. Pubblicare un parametro binario / file che si traduce in un URL non è un tratto.
Quando si ottiene il modulo per una nuova risorsa (/ fumetti / nuovo) o si ottiene il modulo per modificare una risorsa (/ fumetti / 0 / modifica), si richiede una rappresentazione specifica della risorsa relativa ai moduli. Se lo pubblichi nella raccolta di risorse con il tipo di contenuto "application / x-www-form-urlencoded" o "multipart / form-data", stai chiedendo al server di salvare la rappresentazione di quel tipo. Il server può rispondere con la rappresentazione HTML salvata o qualsiasi altra cosa.
È possibile consentire anche la pubblicazione di una rappresentazione HTML, XML o JSON nella raccolta di risorse, a scopo di API o simili.
È anche possibile rappresentare le risorse e il flusso di lavoro come descritto, tenendo conto delle copertine pubblicate dopo il fumetto, ma richiedendo che i fumetti abbiano una copertina. Esempio come segue.
- Consente la creazione ritardata della copertina
- Consente la creazione di fumetti con la copertina richiesta
- Consente alle copertine di essere incrociate
- Consente più copertine
- Crea bozze di fumetti
- Crea bozze di copertine di fumetti
- Pubblica bozza di fumetto
OTTIENI / fumetti
=> 200 OK, ricevi tutti i fumetti.
OTTIENI / fumetti / 0
=> 200 OK, ottieni fumetti (id: 0) con copertine (/ copertine / 1, / copertine / 2).
OTTIENI / fumetti / 0 / copertine
=> 200 OK, ottieni copertine per i fumetti (id: 0).
OTTIENI / copertine
=> 200 OK, ottieni tutte le copertine.
OTTIENI / covers / 1
=> 200 OK, ottieni la cover (id: 1) con il fumetto (/ comic-books / 0).
GET / comic-books / new
=> 200 OK, Ottieni modulo per creare fumetti (modulo: POST / draft-comic-books).
POST / draft-comic-books
title = pippo
autore = boo
editore = goo
pubblicato = 2011-01-01
=> 302 trovato, posizione: / draft-comic-books / 3, reindirizzare alla bozza di fumetti (id: 3) con copertine (binarie).
OTTIENI / bozze-fumetti / 3
=> 200 OK, ottieni bozze di fumetti (id: 3) con copertine.
OTTIENI / bozze di fumetti / 3 / copertine
=> 200 OK, ottieni copertine per bozze di fumetti (/ bozze di fumetti / 3).
GET / draft-comic-books / 3 / covers / new
=> 200 OK, Ottieni modulo per creare una copertina per bozza di fumetto (/ draft-comic-book / 3) (modulo: POST / draft-comic-books / 3 / copertine).
POST / draft-comic-books / 3 / covers
cover_type = front
cover_data = (binary)
=> 302 Found, Ubicazione: / draft-comic-books / 3 / covers, Reindirizzamento alla nuova copertina per draft comic book (/ draft-comic -Book / 3 / coperchi / 1).
GET / draft-comic-books / 3 / publishing
=> 200 OK, Ottieni modulo per pubblicare bozze di fumetti (id: 3) (modulo: POST / comic-comic-books).
POST /
titoli -libri-pubblicati =
autore foo =
editore boo = goo
pubblicato =
01-01-2011 cover_type = front
cover_data = (binario)
=> 302 trovati, posizione: / comic-books / 3, reindirizza al fumetto pubblicato (id: 3) con copertine.