您好,登錄后才能下訂單哦!
本篇內容介紹了“API錯誤返回規范有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
API禁止拋Checked異常,即業務處理上的參數錯誤、邏輯錯誤、業務錯誤等禁止通過拋異常形式返回,應用Response#code, message表達業務錯誤。
注:不要逼調用方到處寫try{}catch()。
正例:
1 | Response<T> saveDesposit(...); |
反例:
1 | T saveDesposit(...) throws ServiceException, IllegalArgumentException, ValidationException; |
API禁止拋Checked異常,即業務處理上的參數錯誤、邏輯錯誤、業務錯誤等禁止通過拋異常形式返回,應用Response#code, message表達業務錯誤。
注:不要逼調用方到處寫try{}catch()。
正例:
1 | Response<T> saveDesposit(...); |
反例:
1 | T saveDesposit(...) throws ServiceException, IllegalArgumentException, ValidationException; |
正例:
1 2 3 4 5 6 7 8 9 10 11 | public void saveXXX(){ Response<T> result = xxxWriteService(...) if (!result.isSuccess()){ if (xxxUtils.isBankUnSupport(result.getCode)){ <<<API提供方提供工具類解析code含義,且code含義可持續迭代更新,調用方無感知。 //銀行渠道未開通,需要特殊提示 ... }else{ ... } } } |
反例:
1 2 3 4 5 6 7 8 9 10 11 | public void saveXXX(){ Response<T> result = xxxWriteService(...) if (!result.isSuccess()){ if ("10101".equals(result.getCode)){ <<<調用方按API提供方的錯誤碼值做硬編碼,代碼耦合。 //銀行渠道未開通,需要特殊提示 ... }else{ ... } } } |
API失敗時,只有API實現方最清楚是什么原因,該怎么提示。那么,請提供對應的提示信息。
我們系統中存在一些用國際化風格的error message,而當前的國際化實現方式真如你想的那么好用嗎?
代碼中的提示信息國際化配置文件
國際化提示原理
1) 提示信息國際化的行為發生在Web層,Web層啟動時會加載Web層的resources/messages提示信息文件
2)當REST API需要返回提示信息時,Web會根據HTTP 請求中的Locale值(例如:zh_CN、zh_TW、en_US、es_ES_Traditional_WIN等)來決定返回哪一種語言的提示信息。將errorMessage以此種語言方式返回給瀏覽器進行提示。
問題:
1)在分布式系統中,各個應用按領域自治,其resources/messages只維護了自身業務需要的errorMessage。
2)當圖中C Service 將errorMessage = template.status.not.match 返回給 XX Service,XX Service直接透傳給XX Web的情況下,XX Web的resources/messages是不包括template.status.not.match的,所以此errorMessage將無法正確的展示其本應該提示的信息。
所以,推薦API返回可直接顯示給用戶的中文提示信息。
正例:
1 2 3 4 5 6 7 8 9 10 11 12 | public Response<Boolean> saveTemplate(...) { try{ ... }catch(StateMachineException e){ log.warn("..."); ... return Response.fail("模板配置正在審核中,請在審核完成后再更新"); }catch(Exception e){ ... } } |
反例:
1 2 3 4 5 6 7 8 9 10 11 12 | public Response<Boolean> saveTemplate(...) { try{ ... }catch(StateMachineException e){ log.warn("..."); ... return Response.fail("模板管理狀態機異常"); }catch(Exception e){ ... } } |
正例:
1 2 3 4 5 6 7 8 9 10 11 12 | public Response<Boolean> saveTemplate(...) { try{ ... }catch(StateMachineException e){ log.warn("..."); ... return Response.fail("模板配置正在審核中,請在審核完成后再更新"); }catch(Exception e){ ... } } |
反例:
例1
1 2 3 4 5 6 7 8 9 10 11 12 | public Response<Boolean> saveTemplate(...) { try{ ... }catch(StateMachineException e){ log.warn("..."); ... return Response.fail("模板管理狀態機異常"); <<<< 你作為用戶,是不是嚇一跳? }catch(Exception e){ ... } } |
例2
1 2 3 4 5 6 7 8 9 10 11 12 | public Response<Boolean> saveTemplate(...) { try{ ... }catch(StateMachineException e){ log.warn("..."); ... return Response.fail(e.getMessage()); <<<< message誰都看不懂,沒有任何意義 }catch(Exception e){ ... } } |
“API錯誤返回規范有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。