2

REST ストアの適切な応答を見つけようとしています。関連する RFC 2616 についてよく知っています。関連する部分は9つのメソッド定義です

今...

短い質問:

POST または PUT を使用してリソースを作成し、現在のリソース データを返したくない場合、どのコードを使用すればよいですか? 204でいいの?( 疑わしい)

ここで、 JsonRestStoreでこれらのメソッドをどのように実装したかを概説しました: https://github.com/mercmobily/JsonRestStores/blob/master/jsonrest.md

OK、これがロングバージョンです。

出発点:

  • PUT CREATES または OVERWRITES のいずれかのリソース (リソースが既に存在するかどうかに応じて)
  • リソースを CREATES または MODIFIES に POST します (渡される ID に応じて [「それに追加する」、つまり「特定の ID を渡す POST」]、または [作成する] に渡されない)
  • ストアは、サーバー上にあるリソースを返すか、コンテンツを返さない可能性があります

これは、ストアがよく使用される方法です。はい、リソース ID を POST に渡すことができます。奇妙に聞こえるかもしれませんが、そうするために行われています。

質問 1: コンテンツを返さずに NEW リソースを PUT する場合

RFC は次のように述べています。

新しいリソースが作成された場合、オリジン サーバーは 201 (Created) 応答を介してユーザー エージェントに通知する必要があります。既存のリソースが変更された場合、リクエストが正常に完了したことを示すために、200 (OK) または 204 (コンテンツなし) の応答コードを送信する必要があります。

  • ケース 1: PUT によって変更される既存のリソース:
    • 現在のリソースを返す場合は 200 (OK)
    • 「OK」と言って何も返さない場合は、204 (No content)。
  • ケース 2: 新しいリソースを作成中
    • 現在のリソースを返す場合は 201 (Created)
    • ??? 何も返したくない場合

では、新しいリソースを作成したものの、その現在のステータスをサーバーに返したくない場合はどうでしょうか? EMPTY コンテンツで 201 を返しても問題ありませんか? 204用じゃないの?しかし、(RFC によると) 201 を返さなければならないので、それはできません。

質問 2: コンテンツを返さずに NEW リソースを POST する場合

POSTing について、RFC は次のように述べています。

POST メソッドによって実行されるアクションは、URI によって識別できるリソースにならない場合があります。この場合、応答に結果を説明するエンティティが含まれているかどうかに応じて、200 (OK) または 204 (コンテンツなし) のいずれかが適切な応答ステータスです。

オリジンサーバーでリソースが作成されている場合、応答は 201 (Created) であり、要求のステータスを記述し、新しいリソースを参照するエンティティと、Location ヘッダーを含む必要があります (セクション 14.30 を参照)。

2 番目の部分が実際には REST ストアに適用されないことを受け入れると、POST は常に何らかの方法で到達可能なリソースになるため、最終的には次のようになります。

  • ケース 1: 既存のリソースが「追加」されている、別名「ID 付きの POST」(リソースは作成されていません)

    • ??? 現在のリソースを返したい場合
    • ??? 現在のリソースを返したくない場合
  • ケース 2: 新しいリソースが作成されている (通常は ID を渡さない)

    • 現在のリソースを返す場合は 201 (Created)
    • ??? 現在のリソースを返却したくない場合

ただし、RFC「The action perform by the POST method may not result (...)」を「If you do a Post append」として解釈することにした場合、これは非常に大きなストレッチであり、次のようになります。

  • ケース 1: 既存のリソースが「追加」されている、別名「ID 付きの POST」(リソースは作成されていません)

    • 現在のリソースを返す場合は 200 (OK)
    • 現在のリソースを返したくない場合は 204 (No content)
  • ケース 2: 新しいリソースが作成されている (通常は ID を渡さない)

    • 現在のリソースを返す場合は 201 (Created)
    • ??? 現在のリソースを返却したくない場合

したがって、RFC を可能な限り広く解釈しても、最終的には次のような疑問が生じます。リソースを作成し、現在のリソース データを返したくない場合、どのコードを使用すればよいでしょうか? 204でいいの?( 疑わしい)

さよなら、

メルク。

4

2 に答える 2

0

私はいつも201を返しますが、あなたは1つを返さなければならないと言われます。

あなた自身の引用からの注意:

リクエストのステータスを説明するエンティティが含まれています

リソースをコンテンツとして含める必要があると言っているわけではないことに注意してください。ステータスを説明する単なるエンティティ。しかし、考えられるステータスが1つしかない場合は、コンテンツがなくても問題はありません。

于 2013-02-28T07:07:54.240 に答える
0

HTTP / 1.1リビジョン(進行中の作業)、特にhttp://greenbytes.de/tech/webdav/draft-ietf-httpbis-p2-semantics-22.html#header.content-locationを確認することをお勧めします。

于 2013-02-28T07:35:47.527 に答える