Better

Ethan的博客,欢迎访问交流

接口格式与错误处理规范

umi 团队探索的接口格式与错误处理规范,还是很有借鉴意义的

HTTP Status Code

HTTP Status Codes

  • 1XX - Informational
    • 传输协议相关的信息,比如 101 Switching Protocals 表示请求协议切换
    • 初始化请求的状态,比如 100 Continue 表示服务端收到请求头,在等待请求体
  • 2XX - Success
    • 200 OK
    • 201 Created 表示请求被执行,新资源已经创建
    • 202 Accepted 表示请求被接受,开始处理
  • 3XX - Redirection
    • 表示资源的状态
    • 301 永久重定向
    • 302 临时重定向
    • 304 资源未更新
  • 4XX - Client Error
    • 400 Bad Request
    • 404 Not Found
    • 414 URI Too Long
    • 429 Too many Requests
  • 5XX – Server Error
    • 500
    • 502 Bad Gateway
    • 503 Service Unavailable

Error Code

错误码通常意味着两种情况

  • 请求或处理中出现了严重问题,API无法解析传递的数据
  • API本身存在许多问题,即使是格式最好的请求也会失败

好的错误码必须传递 3 个信息

  • HTTP Status Code
  • Internal Reference ID:用于特定的错误,在一些情况,可以代替 HTTP Status Code,只要内部参考表包括 HTTP 状态码方案或类似的参考材料。
  • readable messages

我觉得我们要分清楚状态码和错误码

  • HTTP Status Code 只是描述了请求的状态,但该状态下的错误码可以多种多样
  • Custom Error Code 具体错误下对应的错误码,这个肯定是很具体的,甚至可以帮助前后端工程师直接定位问题的。当然在某些情况下,HTTP Status Code 已经很具体了,比如 401 就是未登录,那么 Error Code 也可以直接和 HTTP Status Code 相等(因为这个已经是通识了)
    • 不仅需要传达错误的类型,还需要传达错误发生的位置
    • 错误码应该提供进一步的上下文,简单的 400 Bad Request,我们是看不出任何东西

所以我思考的结果是 HTTP Status Code + Custom Error Code 的方式。

文末资料中也提到,Twitter 和 Facebook 应该也是这样的方式。

参考方式

定义一套接口格式和错误处理的规范,当失败时统一提示错误,代码只需考虑成功即可,具体格式

  • success:表示是否成功,为 false 时按照 showType 和 errorMessage 做统一的错误提示,同时抛出异常
  • data:响应数据
  • errorCode:自定义的错误编码
  • errorMessage:提示给用户的错误信息
  • showType:错误信息的提示方式
    • silent:表示静默,不提示
    • message.warn:警告类消息提示
    • message.error:错误类消息提示
    • notification:通知类型
    • page:显示个错误页面,比如直接跳转到 /exception 页面
  • traceId:唯一的请求 ID,方便后端进行错误排查
  • host:当前访问的服务,也是为了后端进行错误排查

我个人十分想要的 showType 被公司后端同事吐槽,心塞塞

资料



留言