ここでは何も新しいことはありません。ただ説明を求めているだけですが、他の投稿では何も見つからないようです。
私は新しいリソースを再び作成しています。
/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'
}
私がこれをしたのは、いくつかの理由からです:
- 私は、AngularJS のようなフロントエンド フレームワーク用の API を作成しました。私の場合は、Angular リソースを使用しており、リソースを見つけるにはリソースの ID だけが必要になることがよくあります。応答本文で ID を返さない場合は、Location ヘッダーから ID を解析する必要があります。
- すべての書籍の GET では、通常、ID だけでなくオブジェクト全体を返します。この意味で、クライアント コードでは、ID をどこから取得するか (場所ヘッダーまたは本文) を区別する必要がありません。
ここで私は本当にグレーゾーンにいることはわかっていますが、ほとんどの人は、リソース全体を返すことは「悪い」習慣だと言っています。しかし、サーバーがリソースの情報を変更/追加した場合はどうなるでしょうか。ID は確実に追加されますが、タイムスタンプなどの他のものも追加される可能性があります。リソース全体を返さない場合は、POST を実行して ID を返し、クライアントに GET を実行して新しいリソースを取得させる方が本当に良いのでしょうか。
ベストアンサー1
新しいオブジェクトを返すことは、「統一されたインターフェース - 表現によるリソースの操作」という REST の原則に適合します。完全なオブジェクトは、作成されたオブジェクトの新しい状態の表現です。
API 設計に関する非常に優れたリファレンスがここにあります:実用的な RESTful API を設計するためのベスト プラクティス
あなたの質問に対する答えはここに含まれています:更新と作成はリソース表現を返す必要があります
それはこう言います:
API コンシューマーが更新された表現を得るために API を再度実行しなくても済むようにするには、API が応答の一部として更新された (または作成された) 表現を返すようにします。
私にとっては非常に実用的であり、上で述べた REST の原則に適合しているように思えます。