我試圖創建一個遵循REST最佳實踐的API,它很直觀,並且與開發人員從其他(精心設計的)API看到的模式相匹配。我相信我理解HTTP動詞典型的資源的不同映射,這是符合這兩個問題的答案:在REST API中處理CRUD需要POST時
Which HTTP methods match up to which CRUD methods?凡遇到麻煩
Understanding REST: Verbs, error codes, and authentication
是,由於我們業務的性質以及檢索數據(通常是GET)所需的數據,我們需要使用POST。這是由於請求的大小以及我們爲了執行搜索而傳遞的內容。
When do you use POST and when do you use GET?
所以,有幾個方法我能想到的就如何最好地處理CRUD,我也喜歡一些建議:
- 使用查詢參數在POST用於區分CREATE vs READ,其他動詞正常。不喜歡這個想法。
- 每個動作都有一個單獨的終結點,例如/ baseUrl/lookup,/ baseUrl/create。不遵循使用名詞而不是動詞的正確模式。
編輯:在清晰起見,在我的圖像查找服務,其中呼叫者可以搜索圖像是否是已經在數據庫中的意見人爲的例子,添加一個新的形象,更新圖像(例如添加元數據)或刪除圖像。
創建:我們應該在這裏做什麼? POST/image /創建並將Read端點更新爲/ image/search?
閱讀: POST /圖像{的imageData = someBase64EncodedImage}
更新: PUT /圖像/ {圖像標識}
刪除: DELETE /圖像/ {圖像標識}
我們需要一個更接近實際的例子。也就是說,當GET時不得不使用POST的問題聽起來像是在檢索查詢字符串中的明確信息(如ID之類的東西)中的資源列表,這是使用分頁解決的 – JSelser
作爲類似的例子,讓我們說谷歌逆向圖像搜索,但在我們的情況下,它只是返回最佳匹配。因此,您需要發佈圖像以查看是否有非常接近的圖像(在某個閾值內),否則不會返回任何圖像。您可能還想要將圖像添加到數據庫中,以便稍後檢索。 IT不是真正的分頁問題,也不是太多的數據被返回。這就是使用POST進行創建和檢索都很麻煩。 – Matt
你可能想用一個最接近你的問題的例子更新你的問題,以獲得更好的答案。特別是我不能根據上下文來推斷你的資源是哪一種,然後呢? – JSelser