我正在構建一個API,它對名詞Foo
進行操作。當呼叫者使用POST請求創建Foo
的實例時,他們需要爲第二個名詞Bar
提供ID。如果他們提供的ID是正確的類型,但沒有該ID的Bar
,那麼404是正確的迴應?如果POST請求返回404,如果對其他實體的引用失敗?
回答
簡而言之:不可以。您的API應該是「用戶友好的」,這意味着,如果出現錯誤,應該以用戶可以找出問題的方式返回。返回404就好像在說服務沒有被發現,這是不正確的。響應應該是403 - 可能是因爲具有客戶端試圖訪問的ID的資源屬於不同的客戶端!
此外,響應應該包含客戶端可以解析和分析的錯誤消息/代碼(在主體中)。
我會建議使用HTTP 400(錯誤請求)。
請參閱http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.1。可以將400解釋爲客戶沒有正確形成請求的一般性指示。
人們也可以提出一個案例來回復500響應。如果客戶認爲Bar引用是有效的,那麼服務器未能處理這個請求可能被視爲例外。例如,如果引用有效,則會發生這種情況,但不同的客戶端將其刪除。在這種情況下,第一個客戶端沒有做錯任何事情。
只有當處理是由於服務器本身的錯誤配置(即內部服務器錯誤),而不是客戶端故障導致500響應的情況才適合。如果客戶端發送錯誤的數據,則需要400系列的響應代碼。 –
我認爲這取決於ID是否在URL中。該URL是資源的地址,如果該ID在URL中,並且沒有該ID存在的項目,或者根本沒有提供它,則該URL無效,因此不會找到資源,所以這是一個404.
但是,如果ID是而不是而不是來自POST請求的數據,並且該URL是資源的有效地址,則應返回400錯誤請求。
- 1. 返回404,如果被請求
- 2. C#Webapi POST請求失敗 - 404 NOT FOUND
- 3. 如何用ajax返回「失敗」請求?
- 4. 放心 - 重試請求如果失敗
- 5. file_get_contents如果失敗,請使用其他服務器
- 6. POST請求節點返回404
- 7. React/Rails AJAX POST請求返回404
- 8. OpenCV的camshift返回值,如果失敗
- 9. Grails操作適用於GET請求,返回404 POST請求
- 10. 如何返回請求的結果?
- 11. 如果(isset($ _ POST [ 「MYVAR」])&& isset($ _ POST [ 「myvar2」])失敗
- 12. 請求失敗的SOAP WS返回碼404
- 13. 如果條件失敗,則返回false
- 14. 如果驗證失敗,CodeIgniter返回值
- 15. CORS失敗的POST請求
- 16. 如果它是»或其他實體
- 17. 對pdf.js的locale.properties的請求返回404
- 18. Alamofire請求總是失敗,如果Socket.io連接「請求超時」
- 19. 如果其他只返回IF語句
- 20. 其他如果和返回javascript
- 21. JavaScript如果有其他人返回
- 22. Java8謂詞如果有其他返回
- 23. 返回WinJS.xhr請求結果
- 24. 如果有任何鏈接/引用失敗的實驗室測試404
- 25. MVC - 如何避免操作返回404,如果不是POST
- 26. 驗證前Laravel驗證修改請求。如果失敗返回原始
- 27. HAproxy + Lua:如果通過Lua腳本驗證失敗,則返回請求
- 28. AFHTTPRequestOperationManager POST請求失敗(-1005)
- 29. Express JS POST請求失敗
- 30. Angular2 http POST請求失敗
400如果請求在語法上是正確的,400感覺像是一個奇怪的選擇:調用者爲'id'提供了正確的類型,但值無法正確解析。 422 /不可處理的實體是否足夠使用? – ehdv
@ehdv 422意味着語義錯誤。看起來像403會更適合。 – alfasin
語義錯誤在這種情況下意味着什麼? – ehdv