265

したがって、ここで新しいことは何もありません。明確化しようとしているだけで、他の投稿では何も見つからないようです。

私は新しいリソースを作成しています。

/books (POST)

体で:

{
  title: 'The Lion, the Witch and the Wardrobe',
  author: 'C. S. Lewis'
}

新しいリソースの Location ヘッダーで 201 (Created) を返す必要があることはわかっています。

Location: /books/12345

私が自分で答えることができないように見える質問は、サーバーが本体で何を返すべきかということです。

私はしばしばこのタイプの応答をしました:

{
  id: 12345,
  title: 'The Lion, the Witch and the Wardrobe',
  author: 'C. S. Lewis'
}

私がこれを行った理由はいくつかあります。

  1. angularjs のようなフロント エンド フレームワーク用の API を作成しました。私の特定のケースでは、Angular リソースを使用しており、リソースを見つけるためにリソースの ID だけが必要になることがよくあります。応答本文で ID を返さなかった場合は、Location ヘッダーからそれを解析する必要があります。
  2. すべての本の GET では、通常、ID だけでなくオブジェクト全体を返します。この意味で、私のクライアント コードは、ID を取得する場所 (場所のヘッダーまたは本文) を区別する必要はありません。

今、私はここで本当に灰色の領域にいることを知っていますが、ほとんどの人は、リソース全体を返すことは「悪い」習慣だと言っています. しかし、サーバーがリソースの情報を変更/追加した場合はどうなるでしょうか。それは間違いなくIDを追加しますが、タイムスタンプなどの他のものも追加する可能性があります. リソース全体を返さない場合は、POST を実行して ID を返し、クライアントに GET を実行させて新しいリソースを取得する方が本当に良いでしょうか。

4

3 に答える 3

266

新しいオブジェクトを返すことは、「統一インターフェース - 表現によるリソースの操作」という REST 原則に適合します。完全なオブジェクトは、作成されたオブジェクトの新しい状態を表現したものです。

API 設計に関する非常に優れたリファレンスがここにあります: Best Practices for Designing a Pragmatic RESTful API

ここにあなたの質問への回答が含まれています:更新と作成はリソース表現を返す必要があります

それは言います:

API コンシューマが更新された表現のために API を再度ヒットする必要がないようにするには、API が更新された (または作成された) 表現を応答の一部として返すようにします。

私にはかなり実用的で、上で述べた REST の原則に適合しているように思えます。

于 2015-03-09T20:21:18.817 に答える
164

更新時にオブジェクト全体を返すことはあまり関係ないように思えますが、オブジェクトが作成されたときにオブジェクト全体を返すことが、通常のユースケースではなぜ悪い習慣になるのか、私にはほとんどわかりません。これは、少なくとも ID を簡単に取得し、関連する場合にタイムスタンプを取得するのに役立ちます。これは実際、Rails で scaffolding を行ったときのデフォルトの動作です。

最初の POST で取得できたデータを取得するために、ID のみを返し、後で GET 要求を実行する利点はまったくありません。

とにかく、API が一貫している限り、ニーズに最も適したパターンを選択する必要があると思います。REST API を構築する正しい方法はありません。

于 2013-10-05T19:27:00.047 に答える