1. ホーム
  2. rest

[解決済み] restfulなPOSTレスポンスのための「ベスト」プラクティス

2022-04-05 12:17:46

質問

私はただ、他の投稿で見つけることができないいくつかの明確化を取得しようとしています。

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

/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を書いたことがあります。 私の場合 私はアンギュラーリソースを使用しており、多くの場合 リソースを見つけるために、リソースのidを指定します。 もし、idを返さなければ レスポンスボディから解析する必要があります。 ヘッダを表示します。
  2. すべての本のGETでは、私は通常、オブジェクト全体を返します。 を指定します。 この意味で、私のクライアントコードは、以下を区別する必要がありません。 をどこから取得するか(ロケーションヘッダまたはボディ)を決定します。

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

解決方法は?

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

IDだけを返して、最初のPOSTで取得できたはずのデータを取得するために、後でGETリクエストを行うことに何の利点も見いだせないのです。

とにかくAPIに一貫性があれば、ニーズに合ったパターンを選べばいいと思うんです。REST APIをどのように構築するか、正しい方法というのはないと思います。