乐趣区

关于java:如何设计-API-返回码错误码

起源:https://ken.io/note/api-error…

一、前言

客户端申请 API,通常须要通过返回码来判断 API 返回的后果是否合乎预期,以及该如何解决返回的内容等

置信很多同学都吃过返回码定义凌乱的亏,有的 API 用返回码是 int 类型,有的是 string 类型,有的用 0 示意胜利,又有的用 1 示意胜利,还有用”true”示意胜利,碰上这种事件,只能说:头疼

API 返回码的设计还是要认真对待,毕竟好的返回码设计能够升高沟通老本以及程序的保护老本

二、HTTP 状态码参考

以 HTTP 状态码为例,为了更加清晰的表述和辨别状态码的含意,HTTP 状态做了分段。

分段 分段形容
1XX 信息,服务器收到申请,须要请求者继续执行操作
2XX 胜利,操作被胜利接管并解决
3XX 重定向,须要进一步的操作以实现申请
4XX 客户端谬误,申请蕴含语法错误或无奈实现申请
5XX 服务器谬误,服务器在解决申请的过程中产生了谬误

对于后端开发来说,咱们通常见到的都是:

2XX 状态码,比方 200-> 申请胜利,

5XX 状态码,比方 502-> 服务器异样,通常就是服务没失常运行,或者代码执行出错

通过状态码即可初步判断问题起因,HTTP 状态的设计思路值得借鉴。

三、参数约定

虽说是返回码设计,然而只有 code 是不行的,还要有对应的 message,让人能够看懂

字段 类型 阐明
code int 返回码
message string 返回码阐明

参考 HTTP 状态码的思路,咱们对错误码进行分段

返回码值 阐明
0 胜利
99999 零碎产生未知异样
10000-19999 参数校验谬误
20000-29999 A 步骤执行失败
30000-39999 B 步骤执行失败

通过这样的设计,不论是程序还是人都能够十分不便的辨别 API 的返回后果,要害是对立!

四、个性化 Message

通常咱们的 message 都是写给工程师看的,然而在不同的场景下,同样的谬误,可能须要给用户看到不一样的谬误提醒。

比方说 20000-29999 示意订单创立失败:

  • 20001,订单创立失败,存在进行中的订单
  • 20002,订单创立失败,上一个订单正在排队创立中

这两种谬误状况如果是给用户看,可能就只适宜看到:很道歉,您有一个正在进行中的订单,请到我的订单列表中解决。

然而对于 API 来说,返回的信息又必须是精确的,但用户看到的就必须转译,这个转译的工作调用方能够做,然而通常 API 提供者来提供个性化的 Message 能力会更好

咱们能够把转译的音讯配置到数据库,并缓存到 Redis 或者 API 本机

application_id code message
100001 20001 很道歉,您有一个正在进行中的订单,请到我的订单列表中解决。
100001 20002 很道歉,您有一个正在进行中的订单,请到我的订单列表中解决。

而后在申请解决完结行将返回的时候,依据 application_id+code,去匹配替换 message

这样咱们就能够让手机 APP 的用户、微信小程序的用户、网页下单的企业用户看到不同的音讯

五、返回信息的对立解决

有了对立的 code,咱们就能够通过 Nginx 或者 APM 工具统计 API 申请 Code 数量及散布信息。

咱们能够依据单位工夫内 99999 的数量来做 API 的异样告警

咱们能够依据 Code 的返回饼图,帮忙咱们发现零碎、业务流程中的问题

等等,总之,好的返回码设计,能够帮忙咱们进步沟通效率,升高代码的保护老本。

近期热文举荐:

1.1,000+ 道 Java 面试题及答案整顿 (2022 最新版)

2. 劲爆!Java 协程要来了。。。

3.Spring Boot 2.x 教程,太全了!

4.20w 程序员红包封面,快快支付。。。

5.《Java 开发手册(嵩山版)》最新公布,速速下载!

感觉不错,别忘了顺手点赞 + 转发哦!

退出移动版