来源:https://ken.io/note/api-error...1.前言客户端在请求API时,通常需要通过返回码来判断API返回的结果是否符合预期,以及如何处理返回结果的内容等等,相信很多同学都曾被返回码定义的困惑所困扰。有的API使用int类型的返回码,有的是string类型,有的用0表示成功,有的用1表示成功,有的用“true”表示Success,遇到这种事,我只能说:应该认真对待API返回码的设计。毕竟一个好的返回码设计可以降低通信成本和程序的维护成本。2、HTTP状态码参考以HTTP状态码为例,为了更清楚地表达和区分状态码的含义,对HTTP状态进行了分段。小节和小节描述1XX信息,服务器收到请求,请求者需要继续执行操作2XX成功,操作被成功接收并处理3XX重定向,需要进一步操作完成请求4XX客户端错误,请求containssyntaxerrorsorcannotCompletetherequest5XXservererror,服务器在处理请求的过程中出现错误对于后端开发,我们通常会看到:2XX状态码,比如200->请求成功,5XX状态码,如502->如果服务器异常,通常表示服务没有正常运行,或者出现代码执行错误。通过状态码可以初步判断问题的原因。HTTP状态的设计思路值得学习。3.参数约定虽然是返回码设计,但是只有code是不够的,必须要有对应的message,让人看懂字段类型描述codeint返回码messagestring返回码描述参考思路HTTP状态码,我们有错误码分段返回码值说明0成功99999系统出现未知异常10000-19999参数校验错误20000-29999A步执行失败30000-39999B步执行失败有了这个设计,两个程序而且人们很容易区分API的返回结果,关键是统一!4.个性化消息通常我们的消息都是写给工程师看的,但是在不同的场景下,同一个错误可能需要用户看到不同的错误提示。例如20000-29999表示订单创建失败:20001,订单创建失败,有订单正在处理中20002,订单创建失败,上一个订单正在排队等待创建。如果这两种错误情况是给用户看的,可能只适合查看To:Sorry,youhaveanorderinprogress,pleasetomyorderlisttoprocess.但是对于API来说,返回的信息一定要准确,但是用户看到的一定要经过翻译。这种翻译可以由调用者完成,但通常最好由API提供者提供个性化的Message功能。我们可以将翻译后的消息配置到数据库缓存到Redis或者API原生application_idcodemessage10000120001抱歉,您有一个订单正在处理中,请到我的订单列表中处理。10000120002抱歉,您有一个订单正在处理中,请到我的订单列表中处理。然后在请求处理完即将返回时,根据application_id+code匹配替换消息,这样我们就可以让手机APP用户、微信小程序用户、网页下单的企业用户看到不同的消息。5.返回信息统一处理有了统一的代码,我们可以使用Nginx或者APM工具统计API请求代码的数量和分布。我们可以根据单位时间99999的个数来做API异常报警。我们可以使用代码返回饼图来帮助我们发现系统和业务流程中的问题。总之,一个好的返回码设计可以帮助我们提高通信效率,降低代码维护成本。近期热点文章推荐:1.1000+Java面试题及答案(2022最新版)2.厉害了!Java协程来了。..3.SpringBoot2.x教程,太全面了!4.20w程序员红包封面,快拿。..5.《Java开发手册(嵩山版)》最新发布,赶快下载吧!感觉不错,别忘了点赞+转发!
