2016-11-14 64 views
0

我使用MongoDB的,貓鼬和表達的,我想用這樣的「發現」的方法:它是確定使用POST在服務器上的GET請求

checklist.find({ _id: { $in: checklistIdsArray } }) 

基本上我想找到checklistIdsArray中列出的所有清單。現在,這工作正常,但我使用POST請求,而不是GET請求,因爲我需要發送「checklistIdsArray」對象到服務器,我不能在GET請求中執行它,因爲GET請求沒有正文,技術上它可以有但不推薦。

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

這是最好的方法來完成我想要的,還是有更好的方法?

+0

的'/清單/ tripchecklists'端點不接受查詢參數? –

+0

它可以,但checklistIdsArray可以用像這樣的元素非常大:[「582a1174affead1b0c0fbb55」。 「582a1174affead1b0c0fbb55」。等等]我不能把這些作爲params,太大。 – FraK

+0

在我的建議中,就性能而言,這是一個最好的方法。 – Sam

回答

1

好了,當你談論「最好的」,你需要堅持公約和RESTful約定不建議使用POST獲取數據,它應該總是GET。

我們已經忽略了查詢參數,因爲它是乏味和並不被看好。所以是的,可以使用POST,它不會是RESTful,但然後,而不是多個電話,只有一個電話就足夠了,你在性能方面取勝。

如果你要堅持REST風格,你可能想看看不同的設計它,就像如果你事先所說的所有的清單和在UI上使用每所選擇的清單的範圍是什麼?如果提供checklistIds的API可以提供附加到它的清單,那麼您將不需要單獨的調用。

Ofcourse你會想冗餘和大的反應,但接下來我們就來定義,就是我們所說的「最好的」。

1

一個RESTful的方式做,這將是有一個創建通過張貼「查詢結果資源」(在體內IDS)的端點,然後可以用GET獲取之後。如果您的checklistIds是一個長長的ID列表,或者收集查詢結果的處理過程可能需要一段時間,這種方式尤其有用。

另一種更簡單的方法是通過checklistIds作爲查詢參數,有用的,如果你知道ID的數量會很小。

有一個在另一個關於這個更大的討論,讓回答:HTTP GET with request body

+0

我不能通過ID,因爲它們很大,不知道它們的確切數量。你能否更詳細地解釋你的第一個關於使用POST的端點的想法?它不會像只有POST請求一樣,而是在服務器內部添加GET請求嗎? – FraK

+0

當然。我的意思是兩個相關但不同的東西。首先,如果預期的有效載荷太大,使用POST並不罕見。在這種情況下,使用POST主體中的有效內容POST,獲取您的旅程清單並返回POST響應。第二個想法是,如果您的查詢實際上可能需要一段時間才能處理,那麼您可以POST您的查詢,而不是阻止將以其他方式返回'queryId',以便稍後以GET和查詢結果返回。真的取決於您的資源使用情況。希望這有助於澄清。 –

+0

以後如何返回並使用queryID獲取查詢結果?我不知道你能做到這一點?! – FraK

相關問題