《Java開發手冊(泰山版)》定義了統一的錯誤碼方案,是不是太理想化了?

時間 2021-05-05 16:36:54

1樓:yaoyao

我從來沒有使用超過50個錯誤碼,因為錯誤碼這個東西是給介面呼叫者用於處理錯誤的邏輯用的,不是給人看的。

譬如你token過期了需要重新整理,就需要乙個特定的錯誤碼。這樣客戶端得到這個錯誤碼就可以自動重新整理token,然後再次呼叫介面,這個錯誤不需要使用者感知。

如果是提交資料少傳了乙個關鍵資料,這個錯誤就不需要特定的錯誤碼,把錯誤訊息顯示給使用者看就行了。事實上99%+的錯誤都是這種,系統不需要處理錯誤,只需要讓使用者感知錯誤。這樣,無論有多少種錯誤,統一用乙個錯誤碼就行了,重要的是返回乙個特定的、能描述清楚錯誤產生原因的錯誤訊息。

2樓:京思祺

公司目前大體都是按照相關規範來的...關於錯誤碼這塊

個人感受最主要的是便於錯誤資訊的國際化和各個業務系統呼叫時對呼叫系統間的報錯做二次包裝,業務系統自身內部並不是非要數字,但是一定要便於區分,錯誤碼只是乙個錯誤資訊流轉規範,並不是非要完完全全按照阿里的規範生搬硬套呀~

比如乙個系統接入了中美東南亞的各個地區,對於客戶而言當然是希望提示資訊本地化,這時候用錯誤碼可以在resource裡做相應的地區配置調整就可以了

又或者在各個系統相互呼叫中,比如呼叫中颱的錯誤資訊對於業務系統的使用者並不友好,此時需要二次包裝的話,只需要獲取errorCode後,重新去message裡取一下自身的錯誤資訊就可以了

對於客戶來說只有錯誤提示才是他們關係的,而統一錯誤碼可以在面向業務客戶的底層做到錯誤資訊的針對性,畢竟乙個系統不是只給一種語言的人使用,也不能預設所有人都能看懂英語吧

3樓:exiledkingcc

錯誤碼用字串很不好用。

我一般都是用code+msg這樣的模式。

至於code的範圍,看具體的業務型別,不用拘泥於乙個固定的形式。有的時候你用到別人的庫,需要根據它的錯誤碼進行擴充套件。還有的情形下,你不僅需要錯誤碼,還需要正確碼,就是正確的情況有多種,需要區分。

用code+msg有個好處是msg可以用多語言。

4樓:hzldds2020

廖老師是多久沒上過線了?介面是對外的rest多?仔細數數網際網路大廠的內部介面,看看去吧,您說的rest,乙個裡面不知道套了多少個內部的序列化rpc呢,做好您的培訓吧,別操這個心咯

5樓:鞠騫

當我看到錯誤碼規範時,我很開心,終於有人對錯誤碼亂象下手了!

看完後,我有一點不同的看法:(不一定正確,規範)

先說說我是怎麼幹的,我個人比較喜歡用statusCode(數字型別):(如:200為成功,4**為前端引數錯誤,5**為服務端錯誤,可具體細分 ,這裡的錯誤碼,有點仿照http code碼的分類,但不是照搬)(這裡和孤盡老師的規範有點類似,就是給錯誤碼歸類,)

errorCode(字串型別):這裡則是具體的錯誤code,如:user. invalid. name,其規則為:應用.模組.具體字段

(這裡和孤盡老師的規範,有點背道而馳了)

errorMsg(字串型別):該欄位用於具體提示,給前端使用者看的,如:請輸入正確的姓名。

再說這麼幹的好處(主觀):

能通過statusCode 能快速鎖定問題所在,前端還是後端。

能通過 errorCode 知道具體哪個地方出現問題。(通過errorCode動態給errorMsg賦值,如在不同的國際化檔案配置不同的文案)

errorMsg 是用來提示給使用者,或者呼叫方的。

6樓:

錯誤碼分為三種:數字型、單詞型、字母數字混合型。

我選擇的是最後一種。

純數字不容易在分類上識別,純字母,對於英語不好的我來說挑戰太大。

7樓:張海

乙個系統要是9999個錯誤碼都不夠用。。。那早就該拆分了。

需要公升級加前導0即可。

多個服務的呼叫是鏈路追蹤的概念,可以另外加trace_id,內部使用,不用暴露到外部。

錯誤碼的解釋可以由手冊文件、配置中心的注釋和下文提到的error_message來詳細說明。

標準就是標準,具體實現是使用方自己的事。不同的架構和框架,具體實現方式肯定是不一樣的。不需要統一的管理錯誤碼的平台,只需要接入乙個統一的配置中心,在上面配置就好了。

這個標準沒什麼大毛病,但是有優化空間,首先引入ABC雖然閱讀和識別上有提公升,但是只能把錯誤碼定義為字串型別,作為乙個資深c黨,看的不是很順眼,當然是純數字的整型效率最高,實現最優雅。

(加ABC也可以認為是十六進製制的整數,但是內部要加0x轉換,說明上也沒有提到,那就只能認定是字串型別了。)

另外統一配置中心之後(後端所有工具和服務加上前端客戶端的大前端體系),code具體對應的error_message就不用在介面上傳遞了,介面只需要返回乙個code。想想google的極簡(1個bit表示性別,公共引數縮寫極致如_t表示timestamp _u表示user),特別是對阿里的體量,一點點改進都可以在頻寬、儲存等等各方面的資源上節約不少,更不用說日積月累。在這些純工程的環節阿里沒有做到最極致的工程思維,才是比較讓人失望的。

最後,對c黨來說,最完美的錯誤碼就是*inx的設計(mysql等無數開源專案都一脈相承):

0表示成功或者正常

所有大於0的十進位制整數表示錯誤

具體到業務實現上可以分級,1-99用來定義公共的錯誤,如:引數校驗錯誤、資料庫失去連線、請求超時未響應等,後續各系統按照分段申請保留錯誤碼段,如1000-1999用於使用者體系,2000-2999用於商品體系,依次遞增。

DevOps 研發(Java)和 Java 開發我該選擇哪乙個?

任衛 大量公司理解錯了Devops,我不騙你,不過我建議你加入devops和我一起宣傳正確的Devops姿勢。devops是一種軟體專案 特別是網際網路專案 的全生命期管理理念。僅僅維護個jenkins維護個ci cd工具,並不是完整的devops。devops本質上就是開發人員運維人員通力合作,開...

java開發真的超捲了嗎?

教育巨頭 其實很多人並不清楚內捲是什麼?甚至會以為這指的是頭髮天然卷向內捲。那咱們首先要知道內卷到底是什麼?內捲是2020年出現的流行語之一,最開始是由美中國人類學家格爾茨提出來的,其意義指的是 向內演化 所有沒有實質意義的消耗都可以稱作內卷,而這個詞傳到中國之後,多用以形容高校或者職場裡面的 非自...

java與web前端的開發分離?

DailyProgrammer 剛畢業的時候做過一些前後端分離的專案這裡可以給大家介紹一下。後端程式,主要是負責處理大量的業務資料,對資料進行一些增刪改查,將結果通過http協議返回給前端,一般採用JSON格式。前端程式,主要是負責頁面的展示,如何給使用者更人性化的使用體驗。當然前端也是需要考慮業務...