@ray、素晴らしい議論
@jgermanは、RESTであることを忘れないでください。リソースをPOSTから設定する必要があるという意味ではありません。
リソースの特定の表現に含めるものを選択するのは、あなた次第です。
個別に参照されるカバーのケースは、子リソース(カバー)が相互参照される可能性がある親リソース(コミックブック)の作成にすぎません。たとえば、著者、出版社、キャラクター、またはカテゴリへの参照を個別に提供することもできます。これらのリソースを個別に、または子リソースとして参照する漫画本の前に作成することもできます。または、親リソースの作成時に新しい子リソースを作成することもできます。
カバーの具体的なケースは、カバーが実際に漫画本を必要とし、その逆もあるので、少し複雑です。
ただし、電子メールメッセージをリソースと見なし、差出人アドレスを子リソースと見なす場合でも、差出人アドレスを個別に参照できることは明らかです。たとえば、アドレスからすべて取得します。または、以前の差出人アドレスを使用して新しいメッセージを作成します。メールがRESTの場合、相互参照された多くのリソース(/ received-messages、/ draft-messages、/ from-addresses、/ to-addresses、/ addresses、/ subjects、/ attachments、/ folders)が利用可能であることが簡単にわかります、/ tags、/ categories、/ labelsなど
このチュートリアルは、相互参照されたリソースの優れた例を提供します。
http://www.peej.co.uk/articles/restfully-delicious.html
これは、自動生成されたデータの最も一般的なパターンです。たとえば、新しいリソースのURI、ID、作成日はサーバーによって生成されるため、投稿しないでください。さらに、新しいリソースを取得するときに、URI、ID、または作成日を取得できます。
バイナリデータの例。たとえば、バイナリデータを子リソースとして投稿するとします。親リソースを取得すると、それらの子リソースを同じバイナリデータとして、またはバイナリデータを表すURIとして表すことができます。
フォームとパラメータは、リソースのHTML表現とはすでに異なります。URLを生成するバイナリ/ファイルパラメータの投稿は、ストレッチではありません。
新しいリソースのフォーム(/ comic-books / new)を取得するとき、またはリソースを編集するフォーム(/ comic-books / 0 / edit)を取得するときは、リソースのフォーム固有の表現を要求します。content-typeが「application / x-www-form-urlencoded」または「multipart / form-data」のリソースコレクションに投稿した場合、その型表現を保存するようサーバーに要求しています。サーバーは、保存されたHTML表現などで応答できます。
また、APIなどの目的で、HTML、XML、またはJSON表現をリソースコレクションに投稿できるようにすることもできます。
コミックの後に投稿されたカバーを考慮に入れて、コミックブックにカバーを要求することを考慮して、リソースやワークフローを表現することもできます。以下の例。
- カバーの作成を遅らせることができます
- 必要なカバーを付けてコミックブックを作成できます
- カバーを相互参照できるようにします
- 複数のカバーが可能
- ドラフトコミックブックを作成する
- 漫画本のドラフトを作成する
- 下書きの漫画本を公開する
GET / comic-books
=> 200 OK、すべての漫画本を取得します。
GET / comic-books / 0
=> 200 OK、カバー(/ covers / 1、/ covers / 2)付きのコミック(ID:0)を取得します。
GET / comic-books / 0 / covers
=> 200 OK、コミックブックのカバーを取得します(ID:0)。
GET / covers
=> 200 OK、すべてのカバーを取得します。
GET / covers / 1
=> 200 OK、コミック(/ comic-books / 0)のカバー(ID:1)を取得します。
GET / comic-books / new
=> 200 OK、フォームを取得してコミックブックを作成します(フォーム:POST / draft-comic-books)。
POST / draft-comic-books
title = foo
author = boo
publisher = goo
published = 2011-01-01
=> 302見つかりました、場所:/ draft-comic-books / 3、ドラフトコミックブック(ID:3)にリダイレクトしますカバー(バイナリ)。
GET / draft-comic-books / 3
=> 200 OK、カバー付きのドラフトコミックブック(ID:3)を取得します。
GET / draft-comic-books / 3 / covers
=> 200 OK、ドラフトコミックブックのカバーを取得(/ draft-comic-book / 3)。
GET / draft-comic-books / 3 / covers / new
=> 200 OK、フォームを取得してドラフトコミックのカバーを作成(/ draft-comic-book / 3)(フォーム:POST / draft-comic-books / 3 /カバー)。
POST / draft-comic-books / 3 / covers
cover_type = front
cover_data =(binary)
=> 302が見つかりました、場所:/ draft-comic-books / 3 / covers、ドラフトコミックの新しいカバーにリダイレクト(/ draft-comic -book / 3 / covers / 1)。
GET / draft-comic-books / 3 / publish
=> 200 OK、Getフォームを取得してドラフトコミックブックを発行します(id:3)(form: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見つかりました、場所:/ comic-books / 3、公開されたコミックブックにリダイレクトします(ID:3)カバー付き。