.NET中使用Web API的最佳實踐是什麼?特別是Web REST API。發生異常時,REST API是否會在響應主體中返回異常?REST API應該在響應體中返回異常嗎?
當然,我會返回500或類似的HTTP狀態。但是當我回應這個錯誤代碼時,最佳做法是什麼?或者甚至更好的是關於這個的規範或REST API是什麼?
- 回報異常(我做什麼)
- 回報EN空白的迴應? (是的,但我們失去了可以幫助調試的信息)
- 返回一個空的默認JSON對象? (我覺得很困惑)
- 別的東西?
.NET中使用Web API的最佳實踐是什麼?特別是Web REST API。發生異常時,REST API是否會在響應主體中返回異常?REST API應該在響應體中返回異常嗎?
當然,我會返回500或類似的HTTP狀態。但是當我回應這個錯誤代碼時,最佳做法是什麼?或者甚至更好的是關於這個的規範或REST API是什麼?
回報異常(我做什麼) - >你不應該返回的異常,因爲是因爲:1)它可能包含你不希望暴露給你的REST API的用戶的信息。例如,考慮IO異常時的文件路徑或sql異常時的sql server信息,等等。 2)您將發送REST API客戶端不需要的信息,從而浪費帶寬並序列化不必要的信息。
return en empty response body? - >編號
返回一個空的默認JSON對象? - >編號
別的東西? - >返回一個非常特定的錯誤消息(以及任何其他信息,您認爲這些信息可能對集成該REST API以解決該錯誤的開發人員有幫助,或者如果您提供了該錯誤消息,則會跟蹤該錯誤。所有你必須在某個時候查看一些問題,所以確保你傳遞的信息足以讓你知道什麼地方出了問題)。
我將您的解決方案轉移到了其他方面......是的。這是對的嗎? –
因此,我可以創建自己的例外,但我從不重新拋出異常,並且從不將信息放入內部異常中。如果可能的話,我清理堆棧跟蹤。現在「加上你認爲可能對開發人員有用的任何其他信息」本身就是例外。當然以後我應該改善這一點。 –
我有這個建議。
返回的錯誤需要具有相同的JSON格式,如:
{
code: 12321312,
message: "A fatal error occurred",
details: "An unexpected information was passed as parameter to the API."
}
錯誤格式需要提供信息。當您在過濾器中發生錯誤時,可以使用生成的代碼(錯誤代碼,如UUID)將錯誤保存在數據庫中,並返回JSON中的code
。要獲得一個很好的API,使用錯誤代碼將是一個很好的功能,並且可以幫助您識別問題。
狀態碼500是'內部服務器錯誤',這意味着應用程序中出現了問題,消費者應該稍後再試,因爲它們無法直接解決。返回異常本身並不是一件好事,因爲它會暴露有關軟件的信息和該軟件的實現,並向消費者返回虛假希望,例如帶有空JSON對象的200,這將欺騙消費者認爲它是一切都好。我只是返回一個沒有任何內容的500,或者顯示「請稍後再試」的錯誤消息。 – ColinM
2:異常不應該從應用程序本身回來了,我想,他們應該被處理時發生異常,然後有返回任何未捕獲錯誤500個狀態碼一個全球性的異常處理程序使用。如果問題是由用戶輸入造成的,那麼你應該返回4xx狀態碼之一,類似於user3051475描述了他的答案第2款 – ColinM
我的REST API僅由一個客戶端也通過我們團隊的一個創建的消息。這不是一個完美的教條式REST API。實際上,我現在沒有時間全部測試,所以我喜歡讓系統創建併發送原始異常的想法。客戶團隊更容易理解錯誤。但是,在生產中我應該重寫這個。 –