2013-10-05 6 views
118

ここに新しいものはありません私はちょうど明確化を得ようとしており、他の投稿には何も見当たりません。私は、restulfully新しいリソースを作成してい安心なPOST応答のための「ベスト」プラクティス

は言う:身体と

/books (POST) 

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

私は返すべきであることを知っている201新しいのLocationヘッダを(作成されます)リソース:

Location: /books/12345 

私は自分自身で答えることができない質問は、サーバーが返すべきものです体の中にangularjsのようなフロントエンドフレームワークの

  1. 私が書かれているAPI:私はカップルの理由のためにこれを行っている

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

    は、私は多くの場合、この応答の種類を行っています。私の のケースでは、角度リソースを使用しています。私はしばしば、リソースのIDを見つけるのにちょうど が必要です。私が にIDを返さなかったなら、私はLocation ヘッダーからそれを解析する必要があります。

  2. すべての書籍のGETで私は通常 idだけでなくオブジェクト全体を返します。この意味で、私のクライアントコードは、 のどこからIDを取得するか(ロケーションヘッダーまたは本文)を区別する必要はありません。

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

答えて

70

アップデート全体のオブジェクトを返すことはあまり意味がありませんが、作成時にオブジェクト全体を返すのは、通常のユースケースでは悪いことでしょう。これは少なくともIDを簡単に取得し、関連する場合にはタイムスタンプを取得するのに便利です。 これは実際にはRailsで足場をとるときのデフォルトの動作です。

最初のPOSTで取得した可能性のあるデータを取得するために、IDだけを返してからGETリクエストを行うのは本当に利点がありません。

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

+15

私はこれが古いと知っていますが、あなたのPOST後にGETを使用するための説得力のある議論を与えることができます。 http/1.1の仕様では、履歴ツールはGETレスポンスから返されたキャッシュ設定を無視することができます。POSTで更新した後、ブラウザの戻るボタンを使用してこのページに戻ると、古い元のGETからキャッシュされたデータ。したがって、GETを再利用すると、キャッシュを更新して、ページがどのように残っていたかをよりよく把握できます。 – Shaded

+1

@ Shaded APIがアプリでも使用されるように設計されている場合は、保持していません。通常、モデルタイプのオブジェクトをメモリに保持することによってデータをキャッシュします。これは通常、POST要求に対する応答で行われます。また、ブラウザに関しては、GET apiエンドポイントがある限り、POST要求に対する応答は本当に傷つくことはありません。 – Dschee

101

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

API設計のための本当に優秀な参照がここにあります:Best Practices for Designing a Pragmatic RESTful API

それはここにあなたの質問への答え含まれています:それは言うUpdates & creation should return a resource representation

を:

からAPIの消費者を防ぐために 更新された表現のためにAPIに再びヒットしなければならない場合、APIは更新の(または作成された) 表現を応答の一部として返すようにしてください。

私にとってうまく実用的であり、上記のREST原理に適合します。

+2

関連オブジェクトのセット全体を返すのはどうですか?このように、可能なソートはサーバー側で行うことができ、フロントエンドの実装が容易になります – Blauhirn

関連する問題