2012-01-21 71 views
3

我目前使用RESTful API開發任務隊列。糾正不可滿足的REST請求的HTTP狀態代碼

爲了處理任務,工作人員必須創建一個租約。

PUT .../leases 

如果任務隊列中有任務可用,這會成功,租約將被創建並在服務器狀態201響應。

我不確定在沒有任何任務可用時如何處理這種情況。當沒有可用的任務時,無法創建租約。哪種HTTP狀態碼適合這種情況?

  • 204 No Content - 客戶端沒有出錯,但沒有數據。

  • 400 Bad Request - 這是恕我直言不適用,因爲它意味着,這是不是這種情況

與此同時,我認爲「請求無法被服務器理解」,這種方法可能不是理想的。我可以按照Brian的推薦使用503,也可以使用REST in practice,否則我會改變整個過程。

我在考慮可以暫時創建的租約。這意味着

  1. PUT/leases
  2. 可以創建一個租賃,分配任務,並與201迴應,或創建一個試探性租賃與202
  3. 暫定租賃響應會停留一段時間。如果任務可用,則將其分配給暫定租約。如果對於一個特定的時間內沒有任務,租賃被刪除,服務器將與410
  4. 響應客戶端應該因爲資源是由服務器控制,然後再以1

回答

3

開始,客戶不能做任何事情來影響結果,500範圍的代碼將是最合適的。

503 - Service Unavailable聽起來對我。這意味着服務器沒有足夠的資源來滿足請求的需求。您應該還可能在響應主體中返回一個有意義的錯誤,以明確說明它失敗了,因爲沒有任何租約/任務可用,但未來可能不是這種情況。

1

404 - Not Found可以使用。 Wikipedia將其總結爲:

找不到請求的資源,但可能在將來再次可用。客戶的後續請求是允許的。

+0

我不喜歡說的概念,資源不存在,因爲它是存在的。也許我的做法是錯誤的。 – ccellar

+0

查看它的一種方法是,如果您嘗試在不存在的博客上查看頁面,則會得到404頁面。如果該頁面被創建,它將不再是404。它仍然不是一個確切的適合,但我不認爲他們中的任何一個。 – abraham

1

404幾乎可以工作,但我認爲它是您正在處理的資源,您正在做一個PUT來創建資源。當然,它不存在,這就是你創建它的原因。

我同意你對狹義的定義中的400錯誤請求的第一個想法。但是,如果你擴大定義以包含任何可能出現錯誤的請求,那麼它將適合你的情況,我認爲這是可以接受的。例如,如果請求不符合我們期望的模式,並且資源上存在驗證錯誤,我們會發回400。對於我們的服務,如果我們可以編程確定這是一個不好的請求,我們會發回一個400.

爲您的服務在沒有任何可用任務時創建租約構成了一個錯誤的請求,您可以發送400文本解釋問題是什麼。我認爲400是爲了更廣泛的定義,然後是你持有的。

我不認爲500的工作,因爲他們更多的未處理的東西,這是一種情況下,你可以處理和提供信息的答覆。

希望這會有所幫助。

0

如果我嘗試使用不支持的方法(即,當它期望GET時發送PUT),IIS將發送405方法不允許。如果端點根本不存在,它會發送404 Not Found。