2017-06-19 85 views
0

.NET中使用Web API的最佳實踐是什麼?特別是Web REST API。發生異常時,REST API是否會在響應主體中返回異常?REST API應該在響應體中返回異常嗎?

當然,我會返回500或類似的HTTP狀態。但是當我回應這個錯誤代碼時,最佳做法是什麼?或者甚至更好的是關於這個的規範或REST API是什麼?

  • 回報異常(我做什麼)
  • 回報EN空白的迴應? (是的,但我們失去了可以幫助調試的信息)
  • 返回一個空的默認JSON對象? (我覺得很困惑)
  • 別的東西?
+1

狀態碼500是'內部服務器錯誤',這意味着應用程序中出現了問題,消費者應該稍後再試,因爲它們無法直接解決。返回異常本身並不是一件好事,因爲它會暴露有關軟件的信息和該軟件的實現,並向消費者返回虛假希望,例如帶有空JSON對象的200,這將欺騙消費者認爲它是一切都好。我只是返回一個沒有任何內容的500,或者顯示「請稍後再試」的錯誤消息。 – ColinM

+0

2:異常不應該從應用程序本身回來了,我想,他們應該被處理時發生異常,然後有返回任何未捕獲錯誤500個狀態碼一個全球性的異常處理程序使用。如果問題是由用戶輸入造成的,那麼你應該返回4xx狀態碼之一,類似於user3051475描述了他的答案第2款 – ColinM

+0

我的REST API僅由一個客戶端也通過我們團隊的一個創建的消息。這不是一個完美的教條式REST API。實際上,我現在沒有時間全部測試,所以我喜歡讓系統創建併發送原始異常的想法。客戶團隊更容易理解錯誤。但是,在生產中我應該重寫這個。 –

回答

0

回報異常(我做什麼) - >你不應該返回的異常,因爲是因爲:1)它可能包含你不希望暴露給你的REST API的用戶的信息。例如,考慮IO異常時的文件路徑或sql異常時的sql server信息,等等。 2)您將發送REST API客戶端不需要的信息,從而浪費帶寬並序列化不必要的信息。

return en empty response body? - >編號

返回一個空的默認JSON對象? - >編號

別的東西? - >返回一個非常特定的錯誤消息(以及任何其他信息,您認爲這些信息可能對集成該REST API以解決該錯誤的開發人員有幫助,或者如果您提供了該錯誤消息,則會跟蹤該錯誤。所有你必須在某個時候查看一些問題,所以確保你傳遞的信息足以讓你知道什麼地方出了問題)。

+0

我將您的解決方案轉移到了其他方面......是的。這是對的嗎? –

+0

因此,我可以創建自己的例外,但我從不重新拋出異常,並且從不將信息放入內部異常中。如果可能的話,我清理堆棧跟蹤。現在「加上你認爲可能對開發人員有用的任何其他信息」本身就是例外。當然以後我應該改善這一點。 –

0

我有這個建議。

  • 該錯誤需要由您的應用程序(API)中的某個Filter來處理。該過濾器會得到意外的錯誤,與HTTP狀態代碼一個JSON變換誤差等於500
  • 返回的錯誤需要具有相同的JSON格式,如:

    { 
        code: 12321312, 
        message: "A fatal error occurred", 
        details: "An unexpected information was passed as parameter to the API." 
    } 
    
  • 錯誤格式需要提供信息。當您在過濾器中發生錯誤時,可以使用生成的代碼(錯誤代碼,如UUID)將錯誤保存在數據庫中,並返回JSON中的code。要獲得一個很好的API,使用錯誤代碼將是一個很好的功能,並且可以幫助您識別問題。

相關問題