我有這樣的銷售/客戶/ {} customerno的資源。如果客戶端發送一個PUT請求到這個資源我將返回400 - 錯誤的請求,如果在實體中的XML不是有效的XML。但是,如果xml有效,但xml的內容無效,該怎麼辦?例如說客戶端試圖更新客戶郵編,並提供其郵編無效。返回400是否正確 - 在這種情況下的錯誤請求,還是我應該使用的另一個http代碼?REST - 當使用400( 「錯誤的請求」)
回答
從Wikipedia's List of HTTP Status Codes:
400錯誤的請求: 要求不能得到滿足,由於惡劣的語法。
在這種情況下,您的客戶端向您發送了一個無效的郵政編碼的XML負載,這是一種無效的語法形式;因此,在這種情況下,發送400錯誤請求是一個適當的錯誤代碼。
此外,維基百科援引RFC-4918因爲關於這一主題的資源。從這個文件,你會發現以下信息:
服務器可能拒絕可疑的請求(即使 它們是由形成良好的XML),例如,一個400(壞 請求)狀態碼一個可選的響應主體說明 問題。
既然你的要求是格式良好的(在XML不壞,它只是包含語義上不正確的信息),你可以拒絕與狀態碼400字*may*
表明,還有其他選擇的內容。
雖然您可能會試圖使用狀態碼422,但在這種情況下,這樣做並不正確,因爲無效的郵政編碼不符合標準是語義錯誤。閱讀下面...
維基百科:
422無法處理的實體(WebDAV的; RFC 4918): 良好形成的請求,但是由於語義錯誤無法被遵守。
另外,這裏有一些definitions to assist in the interpretation of status code 422:輸入代碼解析期間發生
語法錯誤,並通過語法不正確語句引起的。典型錯誤可能是在輸入非法字符,丟失的運算符,兩個運營商成一排,其間沒有分號,不對稱的括號,錯位的保留字等發生
語義錯誤同一線路兩種說法在代碼執行過程中,在它被解析爲語法正確之後。這些不得與陳述的構建方式有關,而應涉及陳述的意思。諸如不正確的變量類型或大小,不存在的變量,下標超出範圍等是語義錯誤。
你無效郵政編碼既不是一個語法錯誤,也不是一個語義錯誤;因此,排除狀態碼422作爲選項是合理的。
要回答你的問題,狀態碼400爲宜;不過,您也可以選擇其他選項。
- 1. HTTP 400使用Spring Mvc對REST請求的錯誤請求
- 2. REST API與javax.xml.bind.JAXBException(400錯誤的請求)
- 3. 錯誤400錯誤請求
- 4. WCF REST服務400錯誤請求
- 5. Django Rest Framework JWT 400錯誤請求
- 6. PayPal REST API .net SDK - 400錯誤請求
- 7. REST服務獲取400錯誤請求
- 8. 錯誤400錯誤的請求,當我使用PHP CURL
- 9. 400錯誤請求
- 10. 錯誤請求400
- 11. 400(錯誤請求)錯誤
- 12. Cypher請求通過Rest返回400錯誤請求,爲什麼?
- 13. 400使用DotNetOpenAuth時的錯誤請求
- 14. Python的請求400錯誤使用JSON
- 15. 從HTTP獲取400(錯誤請求)錯誤的TFS REST API的HTTP PATCH請求
- 16. WCF REST使用POST或PUT 400錯誤請求添加數據
- 17. RESTful @FormParam 400錯誤請求
- 18. python3請求400錯誤的請求
- 19. 使用PUT請求與錯誤400的Afnetworking錯誤
- 20. 錯誤請求(400),同時試圖訪問請求使用REST API在Python
- 21. org.springframework.web.client.HttpClientErrorException:400錯誤的請求
- 22. 400:錯誤的請求!
- 23. 400錯誤的請求:oauth_callback
- 24. 在400錯誤的請求
- 25. WCF 400錯誤的請求
- 26. 400錯誤的請求2
- 27. Socket.IO:400錯誤的請求
- 28. com.google.api.client.googleapis.json.GoogleJsonResponseException:400錯誤的請求
- 29. 錯誤400錯誤請求JqGrid
- 30. HTTP/1.1 400錯誤請求400
而其他選項? –
我發現這個有用,但我有點困惑的結論。我明白,有一種「語義」的計算機科學定義與其一般用法不同。除了計算機科學之外,在這種情況下,無效的郵政編碼確實可以被稱爲語義錯誤。我懷疑你是正確的,特別是RFC在計算機科學意義上的意思,但那麼這樣的錯誤會有多大用處?事實上,它怎麼會是一個* client *錯誤呢? – Semicolon
@Semicolon - 我的理解是,如果良好形成的XML中,但郵政編碼不在範圍內,能夠滿足在最後一顆子彈點的定義。例如,在美國,123456將是一個糟糕的郵政編碼,但它不會是無效的XML。如果發回給客戶,說明「400錯誤請求 - 請輸入有效的郵政編碼」的錯誤可能會有所幫助。希望這可以幫助。 – jmort253