rest - 在相同的状态码中有不同的响应格式是一个好的 RESTFUL API 吗?
问题描述
前端是否应该在相同的状态码下处理不同 json 格式的响应?
或者将它们分成不同的状态码是后端的工作?
我问这个是因为我现在提供了一个 restful api,它在状态代码 200 下具有不同的 json 响应。
例如
第一:
{
"status": "error",
"msg": "have no user data",
"inputs": {
"id": "thisisafaketestid"
}
}
第二个:
{
"status": "success",
"user": {
"id": 1,
"name": "somename",
"email": "someEmail@gmail.com"
}
}
两个请求的状态码都是 200。
解决方案
状态代码,如200 OK,是通过网络域传输文档的元数据。您向服务器询问资源的当前表示,服务器正在向您发送资源的当前表示。200 OK 完全合适。
想象一下,例如,一个普通的老式 Web 服务器。您请求 的副本/example.json
,服务器在磁盘上查找,找到该文件并将其发送回给您。什么是正确的状态码?200 好的。文档内容的语义会改变答案吗?不。
它可能是好的资源设计,也可能不是好的资源设计——也就是说,这种文档模式是否能够带来良好的 API 体验?
在某些情况下,它确实很有意义:描述 job-123 结果的报告可能表明作业失败;描述 server-456 状态的报告可能表明服务器运行状况不佳。
告诉我们我们的域进程不在快乐路径上的文档可能正在共享非常不同的信息,具有不同的字段。
您在此处演示的设计可能“很好”,或者可能是最好的折衷方案。
是的,当这些设计适合时,客户端必须解析文档以确定语义。
推荐阅读
- sql - Postgres 查询在生产上很慢,在暂存和本地上都很快
- python - 在熊猫中每个月添加额外的天数
- c# - 没有 ReadKey 的计时器类,以便程序完成计划
- oracle - 选择列值至少出现两次且在另一列中具有不同值的行,最后按更新时间排序
- powershell - 使用 Powershell 从字符串中删除空格
- powershell - 如何从 server1 执行 powershell 脚本以在 server2 中部署 wsp
- android - 推荐一种在应用关闭后继续运行的可行方式
- spring-cloud - 具有反应弹性的弹簧云断路器4j
- tensorflow - Keras后端方法来创建与原始张量长度相同的平均值张量?
- database - 如何使用不基于数据库差异功能连接的架构?