偶爾我的API接收PUT請求,其中一個布爾屬性設置爲null。事情是這樣的:PUT無效屬性
{
"name": "John Doe",
"email": "[email protected]",
"active": null
}
如果這將是一個補丁,我會忽略的屬性,但在PUT的情況下,我該怎麼辦?我的直覺說:設置主動爲假。但我不相信這是正確的REST行爲。
您認爲如何?
偶爾我的API接收PUT請求,其中一個布爾屬性設置爲null。事情是這樣的:PUT無效屬性
{
"name": "John Doe",
"email": "[email protected]",
"active": null
}
如果這將是一個補丁,我會忽略的屬性,但在PUT的情況下,我該怎麼辦?我的直覺說:設置主動爲假。但我不相信這是正確的REST行爲。
您認爲如何?
按RFC7231:
6.5.1。 400錯誤的請求
400(錯誤請求)狀態代碼表示該服務器不能或 不會請求過程中由於一些被認爲是 客戶端錯誤(例如,惡意請求語法,無效請求 消息成幀或欺騙性請求路由)。
我會說你應該拒絕處理客戶端的請求,它不會通過數據驗證與400 Bad Request
響應。
還要注意的是:
4.3.4。 PUT
目標資源的狀態是 創建或與由封閉在所述請求消息的有效載荷的表示 定義的狀態替換 PUT方法的請求。
所以,你不應該忽略無效的字段值。但是,如果您跳過數據驗證並接受客戶端發送的新資源狀態,則表示將與目標資源不一致,並且您可以嘗試重寫請求或使用409 Conflict
(RFC7231) :
原始服務器應該驗證PUT表示是 符合任何約束服務器有目標 資源不能或不會被PUT改變。當源服務器使用與URI相關的內部 配置信息以便爲GET響應上的表示元數據設置 值時,這是 特別重要。當PUT 表示是與目標資源不一致,原點 服務器應當要麼使它們保持一致,通過變換 表示或改變資源的配置,或用含有足夠的信息 到一個適當的錯誤消息響應 解釋爲什麼表示不合適。建議使用409(衝突) 或415(不支持的媒體類型)狀態碼,其中 特定於內容類型值的約束。