@ray, excellente discussion
@jgerman, n'oubliez pas que ce n'est pas parce que c'est REST que les ressources doivent être gravées dans le marbre depuis POST.
Ce que vous choisissez d'inclure dans une représentation donnée d'une ressource dépend de vous.
Votre cas des couvertures référencées séparément est simplement la création d'une ressource parent (bande dessinée) dont les ressources enfants (couvertures) peuvent être référencées. Par exemple, vous souhaiterez peut-être également fournir des références aux auteurs, éditeurs, personnages ou catégories séparément. Vous souhaiterez peut-être créer ces ressources séparément ou avant la bande dessinée qui les référence en tant que ressources enfants. Vous pouvez également souhaiter créer de nouvelles ressources enfants lors de la création de la ressource parent.
Votre cas spécifique des couvertures est légèrement plus complexe dans la mesure où une couverture nécessite vraiment une bande dessinée, et vice versa.
Cependant, si vous considérez un message électronique comme une ressource et l'adresse d'expédition comme une ressource enfant, vous pouvez évidemment toujours référencer l'adresse d'expédition séparément. Par exemple, obtenez tout à partir des adresses. Ou créez un nouveau message avec une ancienne adresse d'expédition. Si le courrier électronique était REST, vous pouviez facilement voir que de nombreuses ressources à références croisées pourraient être disponibles: / reçus-messages, / brouillons-messages, / adresses-d'expéditeur, / adresses-à, / adresses, / sujets, / pièces jointes, / dossiers , / tags, / categories, / labels, et al.
Ce didacticiel fournit un excellent exemple de ressources à références croisées.
http://www.peej.co.uk/articles/restfully-delicious.html
Il s'agit du modèle le plus courant pour les données générées automatiquement. Par exemple, vous ne publiez pas d'URI, d'ID ou de date de création pour la nouvelle ressource, car ils sont générés par le serveur. Et pourtant, vous pouvez récupérer l'URI, l'ID ou la date de création lorsque vous récupérez la nouvelle ressource.
Un exemple dans votre cas de données binaires. Par exemple, vous souhaitez publier des données binaires en tant que ressources enfants. Lorsque vous obtenez la ressource parent, vous pouvez représenter ces ressources enfants comme les mêmes données binaires ou comme des URI qui représentent les données binaires.
Les formulaires et paramètres sont déjà différents des représentations HTML des ressources. Publier un paramètre binaire / fichier qui aboutit à une URL n'est pas une extension.
Lorsque vous obtenez le formulaire pour une nouvelle ressource (/ comic-books / new), ou obtenez le formulaire pour modifier une ressource (/ comic-books / 0 / edit), vous demandez une représentation spécifique au formulaire de la ressource. Si vous le publiez dans la collection de ressources avec le type de contenu "application / x-www-form-urlencoded" ou "multipart / form-data", vous demandez au serveur d'enregistrer cette représentation de type. Le serveur peut répondre avec la représentation HTML qui a été enregistrée, ou autre.
Vous pouvez également autoriser la publication d'une représentation HTML, XML ou JSON dans la collection de ressources, à des fins d'API ou similaire.
Il est également possible de représenter vos ressources et votre flux de travail tels que vous les décrivez, en tenant compte des couvertures postées après la bande dessinée, mais nécessitant que les bandes dessinées aient une couverture. Exemple comme suit.
- Permet la création de couverture différée
- Permet la création de bandes dessinées avec la couverture requise
- Permet aux couvertures d'être référencées
- Permet plusieurs couvertures
- Créer un brouillon de bande dessinée
- Créer des brouillons de couvertures de bandes dessinées
- Publier un brouillon de bande dessinée
GET / comic-books
=> 200 OK, obtenez toutes les bandes dessinées.
GET / comic-books / 0
=> 200 OK, Obtenez une bande dessinée (id: 0) avec des couvertures (/ couvertures / 1, / couvertures / 2).
GET / comic-books / 0 / cover
=> 200 OK, Obtenez des couvertures pour la bande dessinée (id: 0).
GET / couvertures
=> 200 OK, obtenez toutes les couvertures.
GET / couvertures / 1
=> 200 OK, obtenez une couverture (id: 1) avec une bande dessinée (/ comic-books / 0).
GET / comic-books / new
=> 200 OK, obtenez le formulaire pour créer une bande dessinée (formulaire: POST / draft-comic-books).
POST / draft-comic-books
title = foo
author = boo
publisher = goo
published = 2011-01-01
=> 302 Trouvé, Emplacement: / draft-comic-books / 3, Redirection vers le brouillon de bande dessinée (id: 3) avec couvertures (binaire).
GET / draft-comic-books / 3
=> 200 OK, Obtenez un brouillon de bande dessinée (id: 3) avec des couvertures.
GET / draft-comic-books / 3 / cover
=> 200 OK, Obtenez des couvertures pour le projet de bande dessinée (/ draft-comic-book / 3).
GET / draft-comic-books / 3 / cover / new
=> 200 OK, Obtenez le formulaire pour créer une couverture pour le projet de bande dessinée (/ draft-comic-book / 3) (formulaire: POST / draft-comic-books / 3 / couvertures).
POST / draft-comic-books / 3 / covers
cover_type = front
cover_data = (binary)
=> 302 Found, Location: / draft-comic-books / 3 / covers, Redirection vers une nouvelle couverture pour le projet de bande dessinée (/ draft-comic -livre / 3 / couvertures / 1).
GET / draft-comic-books / 3 / publish
=> 200 OK, Obtenez le formulaire pour publier un brouillon de bande dessinée (id: 3) (formulaire: POST / published-comic-books).
POST / published-comic-books
title = foo
author = boo
publisher = goo
published = 2011-01-01
cover_type = front
cover_data = (binary)
=> 302 Trouvé, Emplacement: / comic-books / 3, Redirection vers la bande dessinée publiée (id: 3) avec couvertures.