2017-03-20 38 views
1

我們使用JSON-API標準來開發我們的API,並且我們遇到了一個問題,它沒有明顯的解決方案遵循標準。JSON API:沒有資源的成功消息

用例是:

有一個API端點,使您可以訂閱郵件列表。 一個可能的流程是用戶添加爲PENDING,其中 表示用戶將收到並選擇加入電子郵件以進行確認。

如果是這種情況,我們想要給前端 回覆一條消息,可以顯示給用戶,並敦促他點擊鏈接。

從我的觀點來看,這不是一個真正的錯誤狀態,更多的是後續元信息。所以這意味着把它放在錯誤信息中在概念上是不合邏輯的。另外,如果我們確實將它放在錯誤消息中,前端必須以某種方式將其與「真實錯誤」區分開來(狀態碼具有如此低的分辨率以致碰撞似乎不可避免)。

但是,我們不返回資源,因此我們無法將其作爲元信息添加到資源中。所以現在我不知道該把這些信息放在哪裏。

一個可能的解決方案是定義某種「響應」資源並將其放在那裏,但看起來像是一堆蠕蟲。

任何想法?輸入將被極大地重視

回答

1

如果調用的結果是用戶被添加到郵件列表,返回200 OK。如果通話結果是用戶必須通過電子郵件選擇加入,請返回202 Accepted。返回包含相關信息的202響應對象。

從規格:

的202(已接受)狀態代碼表示該請求已經 接受處理,但是處理尚未完成。 該請求可能最終可能會也可能不會最終採取行動,因爲在處理實際發生時,它可能會被禁止。 HTTP中沒有 工具用於從異步 操作重新發送狀態代碼。

202的迴應是有意無意的。其目的是讓 允許服務器接受一些其他進程的請求(也許是一個 面向批處理的進程,每天只運行一次),而不需要 要求用戶代理與服務器的連接持續存在 ,直到該進程完成。與此 響應一起發送的表示應該描述請求的當前狀態並指向 (或嵌入)狀態監視器,該狀態監視器可以向用戶提供關於何時將滿足請求的估計。

+0

我剛剛看到,按規格你可以返回一個沒有資源但帶有頂級_meta類別的Response對象。這是你鼓勵成功的信息還是你有不同的選擇? – shokora

+1

對於沒有後續電子郵件的請求,我會返回200/204(如果您需要身體請輸入200,如果不需要,則輸入204)。對於需要後續電子郵件的請求,我會返回202包含任何相關信息的主體,例如您要提供的信息。我不認爲鼓勵的信息是元信息,不。 –

+0

我不完全確定你最後一句話的意思。你說你會返回一個包含鼓勵消息的身體,但不是在meta領域?你會把它放在哪裏?或者你是不是在考慮json-api規範? – shokora