在开发 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