簡體   English   中英

在REST API中使用檢查異常與未檢查異常

[英]Using Checked Exceptions vs Unchecked Exceptions with REST APIs

根據[1],

“在確定受檢查的異常還是未受檢查的異常時,請問自己,發生異常時客戶端代碼可以采取什么措施?如果客戶端代碼無法執行任何操作,請將其設置為未經檢查的異常。並且如果客戶端代碼將采取一些有用的措施根據異常中的信息執行恢復操作,將其設置為已檢查的異常。”

我有整體想法。 但是,我的困惑是“客戶代碼”的含義。 假設我正在編寫REST API,該API的服務層調用了實際后端層(我也在其中進行驗證)。

API User --calls--> { |Service Layer| --internally calls--> |Backend Layer| }
  1. 因此,API用戶也被視為“客戶端代碼”嗎?
  2. 對於請求驗證,我應該拋出Checked或Unchecked異常嗎?
  3. 最佳實踐是避免使用檢查的異常嗎?
  4. 是否可以在驗證中拋出未經檢查的異常,並使其冒泡,然后在服務層使用自定義異常捕獲並包裝它? (並使用JAX-RS ExceptionMapper [3]向API用戶顯示該信息)

參考文獻:

[1] http://www.onjava.com/pub/a/onjava/2003/11/19/exceptions.html

[2] http://archive.oreilly.com/pub/post/avoiding_checked_exceptions.html

[3] https://docs.oracle.com/javaee/6/api/javax/ws/rs/ext/ExceptionMapper.html

問題1:API用戶也被視為“客戶代碼”嗎?

是。

問題2:對於請求驗證,我應該拋出檢查異常還是未檢查異常?

引用問題中的建議: “如果客戶端代碼無法執行任何操作,請將其設置為未經檢查的異常。並且如果客戶端代碼將基於該異常中的信息采取一些有用的恢復操作,請將其設置為已檢查的異常。”

Q3:最佳做法是避免使用檢查的異常?

沒有。

問題4:是否可以在驗證中引發未經檢查的異常,然后使其冒泡,並在服務層使用自定義異常捕獲並包裝它? (並使用JAX-RS ExceptionMapper [3]向API用戶顯示該信息)

“可以嗎”取決於您問誰。 這也取決於它是否對您有用。

如果將所有內容都轉換為未經檢查的異常,那么編譯器將無法通過檢查應處理的異常來幫助您

在您的模型中,必須對某些錯誤進行分類,這些錯誤需要由客戶端API的調用者處理,而哪些則不需要。 可以做到...但是您更多地依賴於API客戶端程序員來了解正確的做法。 在沒有檢查到的異常的情況下,他/她能夠簡單地忽略異常……直到它們導致系統測試失敗,生產失敗。

您的程序員有多好? 您的文檔有多好? 您的質量控制/測試制度有多好?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM