2016-11-14 13 views
0

上のGETリクエストのためにPOSTを使用しても大丈夫ですchecklistIdsArrayにリストされているすべてのチェックリストを見つけます。これはうまくいきましたが、GETリクエストの代わりにPOSTリクエストを使用しました.GETリクエストにはボディがないため、サーバーに「checklistIdsArray」オブジェクトを送信してGETリクエストで処理できないためでした技術的にはそれが持つことはできますが、推奨されません。は、それは私がMongoDBの、マングースを使用して表現し、私はこのような「見つける」メソッドを使いたいんだサーバー

function getTripChecklists(checklistsIds) { 
      var URL = SERVER_URL + '/checklists/tripchecklists'; 
      return $http.post(URL, checklistsIds) 
       .then(successHandler) 
       .catch(errorHandler); 
} 

これは、私が欲しいものを達成するための最良のアプローチですか、それとも良い方法ですか?

+0

'/ checklists/tripchecklists'エンドポイントはクエリパラメータを受け入れませんか? –

+0

できますが、checklistIdsArrayは次のような要素でかなり大きくなることがあります:["582a1174affead1b0c0fbb55"。 "582a1174affead1b0c0fbb55"私はそれらをparamsとして入れることができません、大きすぎます。 – FraK

+0

私の提案では、パフォーマンス面ではこれが最善の方法です。 – Sam

答えて

1

さて、あなたが「最良」について話すとき、あなたが慣例とRESTful慣例に固執する必要がありますをフェッチするためにPOSTを使用するを示唆していませんデータ、それは常にGETする必要があります。

退屈で退屈であるため、すでにクエリパラメータを無視しています。だからPOSTは使用できますが、それはRESTfulではありませんが、複数のコールの代わりに1つのコールで十分で、パフォーマンス面で勝っています。

RESTfulに固執したい場合は、すべてのチェックリストを事前に呼び出して、UIで選択したチェックリストに従って使用する場合のように、デザインを変更する範囲を確認することができます。 checklistIdsを提供したAPIがそれに追加されたチェックリストを提供できれば、別途の呼び出しは必要ありません。

もちろん、冗長性と大きなレスポンスを考えているかもしれませんが、私たちは「ベスト」と呼ぶものを定義する必要があります。

1

これを行うためのRESTfulな方法は、後でGETでフェッチできるPOST(身体のID付き)を介して 'クエリ結果リソース'を作成するエンドポイントを持つことです。この方法は、checklistIdsが長いIDのリストである場合や、クエリ結果を収集する処理に時間がかかる場合に特に便利です。

もう1つの簡単な方法は、checklistIdsをクエリパラメータとして渡すことです.IDの数が少ないことがわかっている場合は便利です。

このことについて大きな議論がSO答える他にあります:HTTP GET with request body

+0

idsが大きいので正確な数がわからないので、idsを渡すことはできません。 POSTでエンドポイントを持つことについての最初の考えをより詳しく説明できますか? POSTリクエストだけでなく、サーバー内でGETリクエストを追加することと同じではないでしょうか? – FraK

+0

私は2つの関連しているが異なることを意味した。まず、予想されるペイロードが大きすぎる場合、POSTを使用することは珍しくありません。この場合、POST本体にペイロードを含むPOST、トリップチェックリストを取得してPOST応答に戻ります。 2番目のアイデアは、あなたのクエリが実際に処理するのに時間がかかるかもしれないということです。ブロッキングの代わりに、 'queryId'を戻して、後でGETで戻ってクエリ結果を取得できるPOSTをPOSTできます。本当にあなたのリソース使用量に依存します。これが明確になることを望む。 –

+0

どのようにして後で戻って、queryIDでクエリ結果を取得することは可能ですか?私はあなたがそれをすることができるのか知らなかったのですか? – FraK

関連する問題