2016-09-21 68 views
2

我必須創建幾個Web服務來驗證給定字段的可能值。我考慮有這樣的:用於現場驗證的REST API

POST /entity/fieldName body { fieldValues } 

在POST將返回400(錯誤請求)如果參數無效和422(無法處理的實體),否則。不過,我並不十分喜歡422響應部分,因爲它使得請求總是返回一個錯誤。另一方面,因爲我只是在進行驗證,而這是一個POST,所以我不想在服務器上實際創建一個新資源(即返回200)。是否有另一個更適合於此的HTTP方法/ API端點?對於它的價值,我將檢查具有<fieldName>的實體字段在給定範圍內的值。

+0

嗯,終點是*驗證目的*在我看來,它應該返回** 422不可處理的實體**如果實體無效(而不是** 400錯誤請求**)並且** 200 OK **如果實體有效。 – BackSlash

+0

@BackSlash,但不使用POST並返回200意味着服務器上已創建新資源?因爲沒有這樣的事情會發生。 – asenovm

+3

我認爲「已創建新資源」是** 201 Created **。 200 OK表示「請求已處理,一切正常」給我。但我絕對不是REST專家,所以讓我們等待別人的回答/評論 – BackSlash

回答

1

如果你所做的只是驗證,那麼我認爲你應該通過驗證錯誤發送422並通過驗證成功發送200。 POST並不意味着你必須總是創建一個新的實體。

POST方法執行的操作可能不會導致可由URI標識的 資源。在這種情況下,根據 確定響應是否包含描述結果的實體,200 (OK)或204(無內容)是適當的響應狀態。

如果資源已經在源服務器上創建的,則響應 應該是201(創建)和包含其描述請求的 狀態,指的是新的資源的實體,和一個位置 報頭(見第14.30節)。

1

我喜歡google's api error response style

所以我的服務發送錯誤響應作爲JSON或XML和400 Bad request錯誤代碼:

{ 
    "status": "INVALID_REQUEST", 
    "type": "ERROR_MSG", 
    "data": { 
    "request": "/v2/data?age=23d", 
    "errors": [ 
     "age: not a number" 
    ] 
    }, 
    "time": -1 
} 

否則200和相應的消息