RESTful POSTレスポンスの「ベスト」プラクティス 質問する

RESTful POSTレスポンスの「ベスト」プラクティス 質問する

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

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

/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 ヘッダーから ID を解析する必要があります。
  2. すべての書籍の GET では、通常、ID だけでなくオブジェクト全体を返します。この意味で、クライアント コードでは、ID をどこから取得するか (場所ヘッダーまたは本文) を区別する必要がありません。

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

ベストアンサー1

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

API 設計に関する非常に優れたリファレンスがここにあります:実用的な RESTful API を設計するためのベスト プラクティス

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

それはこう言います:

API コンシューマーが更新された表現を得るために API を再度実行しなくても済むようにするには、API が応答の一部として更新された (または作成された) 表現を返すようにします。

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

おすすめ記事