2015-10-06 86 views
0

我有一個REST API,其中GET請求可能需要10-20秒。所以我通常會返回一個202代碼,其位置如http://fakeserver/pending/blah,客戶端可以檢查此請求的狀態。 pending/blah返回一個200代碼,如果請求仍然未決,則返回「Status:pending」代碼,303代碼返回代碼,結果爲http://fakeserver/finished/blah對REST API的長GET請求,處理服務器崩潰

但是如果服務器在請求處理期間崩潰怎麼辦? pending/blah應該返回一個303的代碼,然後finished/blah返回一個404?我如何提醒客戶在某個位置可以使用資源,但我不確定?假設請求是持久的,所以當服務器重新啓動時,它將繼續處理請求。

回答

0

首先,我將使處理資源的狀態成爲此資源的內部字段。這樣,你能避免使用奇怪的終點一樣:如果你問/finished/blah//pending/blah/,而是它推出單一端點/resources/blah/其他領域將返回狀態它目前在

改變架構到端點後,上述blah和服務器已經崩潰,您可以:

  • 回報200 pending狀態 - 客戶機不必一定要了解墜毀
  • 回404,簡單的不能與發現和額外的消息服務器已經崩潰。
  • 返回500並明確告知客戶問題是什麼。

其他有用的代碼也可能是409或503.返回任何3XX不是一個好主意IMO,因爲這裏沒有重定向。我個人會選擇200或500(3)。

+0

@SteveD,你覺得我的答案有用嗎? – Opal