【发布时间】:2016-06-04 17:05:20
【问题描述】:
我将使用 NodeJS 和 Express 框架开发一些 REST API。用户 API 就是其中之一。但是我很困惑为 API 的每个场景发送正确的响应。我决定发送响应 HTTP 状态的顺序如下:
GET /users HTTP/1.1
-
400 Bad Request检查 URL 是否格式错误。 -
401 Unauthorized检查是否没有提供访问令牌 -
403 Forbidden检查访问令牌中的用户是否不允许查看这些资源 -
200 OK如果没有,找到一条或多条记录
GET /users/:id HTTP/1.1
-
400 Bad Request检查 URL 是否格式错误。 -
422 Unprocessable Entity检查 ID 是否未正确验证,例如非数字字符串 -
401 Unauthorized检查是否没有提供访问令牌 -
403 Forbidden检查访问令牌中的用户是否不允许查看此实体 -
404 Not Found如果没有找到请求 -
200 OK如果正确找到实体 -
500 Internal Server Error如果在实体查找过程中 MySQL 或 Node 服务器端出现任何问题。
POST /users HTTP/1.1
-
415 Unsupported Media Type检查标头Content-Type是否不是application/json。 -
400 Bad Request检查 JSON 格式是否不正确或存在任何语法错误 -
401 Unauthorized检查是否没有提供访问令牌 -
403 Forbidden检查访问令牌中的用户是否不允许创建新实体 -
422 Unprocessable Request如果请求正文参数中的某些验证失败 -
409 Conflict Issue如果请求中的用户名或电子邮件不可用或已存在。 -
200 OK with new entity Location Header如果实体创建成功。 -
500 Internal Server Error如果在创建实体期间 MySQL 或 Node 服务器端出现任何问题。
PUT /users/:id HTTP/1.1
-
415 Unsupported Media Type检查标头Content-Type是否不是application/json。 -
400 Bad Request检查 JSON 格式是否不正确或存在任何语法错误 -
422 Unprocessable Entity检查 ID 是否未正确验证,例如非数字字符串 -
401 Unauthorized检查是否没有提供访问令牌 -
403 Forbidden检查访问令牌中的用户是否不允许更新此实体 -
422 Unprocessable Request如果请求正文参数中的某些验证失败 -
409 Conflict Issue如果请求中的用户名或电子邮件而不是此用户不可用或已存在。 -
204 OK with no content如果实体更新成功。 -
500 Internal Server Error如果在实体更新期间 MySQL 或 Node 服务器端出现任何问题。
删除 /users/:id HTTP/1.1
-
400 Bad Request检查 URL 是否格式错误。 -
422 Unprocessable Entity检查 ID 是否未正确验证,例如非数字字符串 -
401 Unauthorized检查是否没有提供访问令牌 -
403 Forbidden检查访问令牌中的用户是否不允许删除此实体 -
404 Not Found如果没有找到请求 -
204 OK with no content如果实体删除成功 -
500 Internal Server Error如果在实体删除过程中 MySQL 或 Node 服务器端出现任何问题
所以我想在 Stackoverflow 上讨论的是:
- 以上所有步骤的顺序是否正确或需要重新考虑?
- 此 API 会在导致最终用户看到非 JSON 响应的任何情况下中断吗?
【问题讨论】:
-
这不是讨论的论坛。编写并测试它应该可以回答您的问题,所以这样做。
-
我知道,但我想知道正确的方法。
-
你知道并写了它吗? 那更糟!