如题所述
第1个回答 2022-07-06
在一个项目乃乃至整个团队在所有项目的开发过程中,统一设计和规范使用错误码,是必须要落实的一个点。
错误码的设计,直接关系到后端接口的条理性和优雅性;错误码的使用,直接关系到开发人员的开发规范和开发效率。
所以,对错误码进行优雅的管理,是非常有必要的,是一个团队的基石之一。
下面,我会从如何设计,管理和多语言错误码的具体实现等三个方面一一阐述。
首先,需要对错误码大致分为两类:
其次,错误码需要包含的要素:
主要包含:成功和失败(未知错误)
A_PARAM_VALIDATION_ERROR( "A0100", "参数校验失败", "parameter validation error" )
B_STORAGE_ERROR("B0100", "持久化存储错误", "storage error")
C_RESOURCE_OUT_ERROR( "C0100", "系统资源异常", "system resource error" )
由于目前没有人力投入到错误码管理平台的开发,市面上也没有比较合适的开源项目可以使用,因此,暂时使用飞书文档做错误码管理。详情见开放平台错误码管理
代码侧,首先要有一个枚举类,用于存放所有错误码。
前端发起请求,在 header 里携带 HttpHeaders. ACCEPT_LANGUAGE=zh-Hans ;
后端 LanguageInterceptor 拦截器拦截后,将 ACCEPT_LANGUAGE 塞入当前请求的 Threadlocal 变量里;
后端返回错误码给前端: ReturnBase.error(ReturnEnum. C_GENERAL_BUSINESS_ERROR );
在 ReturnBase.error() 方法中,会根据之前塞入到 Threadlocal 里的 ACCEPT_LANGUAGE 变量,自动选择返回中文还是英文的错误文案。
错误码的设计,直接关系到后端接口的条理性和优雅性;错误码的使用,直接关系到开发人员的开发规范和开发效率。
所以,对错误码进行优雅的管理,是非常有必要的,是一个团队的基石之一。
下面,我会从如何设计,管理和多语言错误码的具体实现等三个方面一一阐述。
首先,需要对错误码大致分为两类:
其次,错误码需要包含的要素:
主要包含:成功和失败(未知错误)
A_PARAM_VALIDATION_ERROR( "A0100", "参数校验失败", "parameter validation error" )
B_STORAGE_ERROR("B0100", "持久化存储错误", "storage error")
C_RESOURCE_OUT_ERROR( "C0100", "系统资源异常", "system resource error" )
由于目前没有人力投入到错误码管理平台的开发,市面上也没有比较合适的开源项目可以使用,因此,暂时使用飞书文档做错误码管理。详情见开放平台错误码管理
代码侧,首先要有一个枚举类,用于存放所有错误码。
前端发起请求,在 header 里携带 HttpHeaders. ACCEPT_LANGUAGE=zh-Hans ;
后端 LanguageInterceptor 拦截器拦截后,将 ACCEPT_LANGUAGE 塞入当前请求的 Threadlocal 变量里;
后端返回错误码给前端: ReturnBase.error(ReturnEnum. C_GENERAL_BUSINESS_ERROR );
在 ReturnBase.error() 方法中,会根据之前塞入到 Threadlocal 里的 ACCEPT_LANGUAGE 变量,自动选择返回中文还是英文的错误文案。