@ray, ausgezeichnete Diskussion
@jgerman, vergiss nicht, dass nur weil es REST ist, die Ressourcen von POST nicht in Stein gemeißelt werden müssen.
Was Sie in eine bestimmte Darstellung einer Ressource aufnehmen möchten, liegt bei Ihnen.
Ihr Fall der Cover, auf die separat verwiesen wird, ist lediglich die Erstellung einer übergeordneten Ressource (Comic), auf deren untergeordnete Ressourcen (Cover) verwiesen werden kann. Beispielsweise möchten Sie möglicherweise auch Verweise auf Autoren, Herausgeber, Charaktere oder Kategorien separat bereitstellen. Möglicherweise möchten Sie diese Ressourcen separat oder vor dem Comic erstellen, in dem sie als untergeordnete Ressourcen referenziert werden. Alternativ möchten Sie möglicherweise beim Erstellen der übergeordneten Ressource neue untergeordnete Ressourcen erstellen.
Ihr spezieller Fall der Cover ist insofern etwas komplexer, als für ein Cover wirklich ein Comic erforderlich ist und umgekehrt.
Wenn Sie jedoch eine E-Mail-Nachricht als Ressource und die Absenderadresse als untergeordnete Ressource betrachten, können Sie die Absenderadresse natürlich immer noch separat referenzieren. Holen Sie sich zum Beispiel alles von Adressen. Oder erstellen Sie eine neue Nachricht mit einer vorherigen Absenderadresse. Wenn E-Mail REST war, konnten Sie leicht erkennen, dass viele Ressourcen mit Querverweisen verfügbar sein könnten: / empfangene Nachrichten, / Entwurfsnachrichten, / von Adressen, / an Adressen, / Adressen, / Betreff, / Anhänge, / Ordner , / Tags, / Kategorien, / Labels, et al.
Dieses Tutorial bietet ein hervorragendes Beispiel für Ressourcen, auf die verwiesen wird.
http://www.peej.co.uk/articles/restfully-delicious.html
Dies ist das häufigste Muster für automatisch generierte Daten. Beispielsweise veröffentlichen Sie keinen URI, keine ID oder kein Erstellungsdatum für die neue Ressource, da diese vom Server generiert werden. Sie können jedoch den URI, die ID oder das Erstellungsdatum abrufen, wenn Sie die neue Ressource zurückerhalten.
Ein Beispiel für Binärdaten. Beispielsweise möchten Sie Binärdaten als untergeordnete Ressourcen veröffentlichen. Wenn Sie die übergeordnete Ressource erhalten, können Sie diese untergeordneten Ressourcen als dieselben Binärdaten oder als URIs darstellen, die die Binärdaten darstellen.
Formulare und Parameter unterscheiden sich bereits von den HTML-Darstellungen der Ressourcen. Das Posten eines Binär- / Dateiparameters, der zu einer URL führt, ist kein Problem.
Wenn Sie das Formular für eine neue Ressource (/ comic-books / new) oder das Formular zum Bearbeiten einer Ressource (/ comic-books / 0 / edit) erhalten, fordern Sie eine formularspezifische Darstellung der Ressource an. Wenn Sie es mit dem Inhaltstyp "application / x-www-form-urlencoded" oder "multipart / form-data" in die Ressourcensammlung stellen, bitten Sie den Server, diese Typdarstellung zu speichern. Der Server kann mit der gespeicherten HTML-Darstellung oder was auch immer antworten.
Möglicherweise möchten Sie auch zulassen, dass eine HTML-, XML- oder JSON-Darstellung für Zwecke einer API oder ähnlichem in die Ressourcensammlung gestellt wird.
Es ist auch möglich, Ihre Ressourcen und Ihren Workflow so darzustellen, wie Sie es beschreiben, wobei nach dem Comic veröffentlichte Cover berücksichtigt werden, für Comics jedoch ein Cover erforderlich ist. Beispiel wie folgt.
- Ermöglicht die verzögerte Erstellung von Deckblättern
- Ermöglicht die Erstellung von Comics mit dem erforderlichen Cover
- Ermöglicht den Querverweis von Deckblättern
- Ermöglicht mehrere Abdeckungen
- Erstellen Sie einen Comic-Entwurf
- Erstellen Sie Entwürfe für Comic-Cover
- Comic-Entwurf veröffentlichen
GET / comic-books
=> 200 OK, Holen Sie sich alle Comics.
GET / comic-books / 0
=> 200 OK, Holen Sie sich das Comic-Buch (id: 0) mit den Covers (/ cover / 1, / cover / 2).
GET / comic-books / 0 / cover
=> 200 OK, Cover für Comic-Buch abrufen (id: 0).
GET / cover
=> 200 OK, Holen Sie sich alle Cover.
GET /
cover / 1 => 200 OK, Cover (id: 1) mit Comic (/ comic-books / 0) abrufen.
GET / comic-books / new
=> 200 OK, Formular zum Erstellen eines Comics abrufen (Formular: POST / Draft-Comic-Bücher).
POST / Draft-Comic-Bücher
Titel = foo
Autor = Boo
Verlag = Goo
veröffentlicht = 2011-01-01
=> 302 Gefunden, Ort: / Draft-Comic-Bücher / 3, Weiterleiten zum Entwurf eines Comics (ID: 3) mit Abdeckungen (binär).
GET / Draft-Comic-Bücher / 3
=> 200 OK, Holen Sie sich einen Comic-Entwurf (ID: 3) mit Umschlägen.
GET / Draft-Comic-Bücher / 3 / Cover
=> 200 OK, Cover für Draft-Comic-Buch (/ Draft-Comic-Buch / 3) abrufen.
GET / Draft-Comic-Bücher / 3 / Cover / New
=> 200 OK, Formular zum Erstellen eines Covers für Draft-Comic-Bücher (/ Draft-Comic-Buch / 3) abrufen (Formular: POST / Draft-Comic-Bücher / 3 / Abdeckungen).
POST / Draft-Comic-Bücher / 3 / Cover
cover_type =
Frontcover_data = (binär)
=> 302 Gefunden, Ort: / Draft-Comic-Bücher / 3 / Cover, Weiterleitung zum neuen Cover für Draft-Comic (/ Draft-Comic) -book / 3 / cover / 1).
GET / Draft-Comic-Bücher / 3 / Publish
=> 200 OK, Formular zum Veröffentlichen des Comic-Entwurfs (ID: 3) abrufen (Formular: POST / Published-Comic-Books).
POST / Published-Comic-Books
Titel = Foo-
Autor = Boo-
Publisher = Goo
Published = 2011-01-01
Cover_Type = Front
Cover_Data = (Binär)
=> 302 Gefunden, Ort: / Comic-Books / 3, Weiterleitung zum veröffentlichten Comic (id: 3) mit Abdeckungen.