RESTful API 中的错误处理

阅读时长 6 分钟读完

在开发 RESTful API 时,必须考虑错误处理。仅仅是回复一个 404 错误消息不足以便于调试或解决用户的问题。更好的方式是定义一组错误码,以及每个错误码所对应的人类可读的消息。下面将介绍错误处理的最佳实践。

HTTP 状态码

在 RESTful API 中,常用的 HTTP 状态码有以下几种:

  • 200 OK:请求已成功,请求所需要的信息包含在响应中。
  • 201 Created:请求已成功,并且服务器已创建了一个新的资源,并将其 URI 返回给客户端。
  • 204 No Content:请求已成功,但是响应中不包含任何实体信息。
  • 400 Bad Request:请求格式错误,服务器无法理解该请求。
  • 401 Unauthorized:请求未包含认证信息,或者认证信息无效。
  • 403 Forbidden:服务器拒绝执行该请求。
  • 404 Not Found:请求的资源不存在。
  • 405 Method Not Allowed:请求方法不被允许。
  • 500 Internal Server Error:服务器内部错误。

错误码

在定义错误码时,建议使用整数值,以便于处理。一般而言,错误码的格式为 xxxyyyzzz,其中 xxx 表示模块类型,yyy 表示错误类型,zzz 表示具体错误。例如:

  • 100100001 表示「用户」模块下的「用户名不存在」错误。
  • 100100002 表示「用户」模块下的「密码错误」错误。
  • 200100001 表示「文章」模块下的「文章标题太短」错误。
  • 200100002 表示「文章」模块下的「文章已被删除」错误。

错误码应该在后端定义,并且应该与前端约定好。以下是一个示例:

-- -------------------- ---- -------
----- ------ - -
  -- ----
  -------------- ----------

  -- ----
  --------------- ----------
  ------------------- ----------

  -- ----
  ------------------------ ----------
  ------------------ ----------
--
展开代码

错误消息

错误消息应该是人类可读的,并且应该尽可能清晰明了。同时,在错误码和错误消息之间,应该有一个映射关系。例如:

-- -------------------- ---- -------
----- -------------- - -
  ----------------------- -------

  ------------------------ ---------
  ---------------------------- -------

  --------------------------------- ---------
  --------------------------- --------
--
展开代码

统一处理错误

在实际开发中,错误处理是非常重要的。为了方便统一处理错误,可以定义一个中间件来捕捉并处理所有的错误。以下是一个基本的示例:

-- -------------------- ---- -------
------------- ----- ----- -- -
  --- -
    ----- -------
  - ----- ------- -
    ---------- - ------------ -- ----
    -------- - -
      -------- ------
      ------ -
        ----- ---------- -- ---------------------
        -------- ------------- -- -------------------------------------
      --
    --
  -
---
展开代码

最佳实践

以下是错误处理的几点最佳实践:

  • 定义一组错误码,以及每个错误码所对应的人类可读的消息。
  • 将错误码定义在后端,并与前端约定好。
  • 错误消息应该是人类可读的,并且尽可能清晰明了。
  • 统一处理错误,并返回一个标准格式的错误消息。

示例代码

以下是一个完整的示例代码:

-- -------------------- ---- -------
----- --- - ---------------

----- ------ - -
  -- ----
  -------------- ----------

  -- ----
  --------------- ----------
  ------------------- ----------

  -- ----
  ------------------------ ----------
  ------------------ ----------
--
----- -------------- - -
  ----------------------- -------

  ------------------------ ---------
  ---------------------------- -------

  --------------------------------- ---------
  --------------------------- --------
--

----- --- - --- ------

------------- ----- ----- -- -
  --- -
    ----- -------
  - ----- ------- -
    ---------- - ------------ -- ----
    -------- - -
      -------- ------
      ------ -
        ----- ---------- -- ---------------------
        -------- ------------- -- -------------------------------------
      --
    --
  -
---

------------- ----- ----- -- -
  -- --------- --- -------- -
    ----- -
      ----- ----------------------
      -------- --------------------------------------
    --
  - ---- -- --------- --- ----------- -
    ----- -
      ----- -------------------------
      -------- -----------------------------------------
    --
  - ---- -
    -------- - -
      -------- -----
    --
  -
---

---------------- -- -- -
  ------------------- -- ------- -- ------------------------
---
展开代码

以上代码会监听 3000 端口,在访问 /user/article 时抛出错误,并输出标准格式的错误消息。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67c14c79314edc2684927b8e

纠错
反馈

纠错反馈