几种不同风格的json返回值应该怎么取舍

发布于 2022-09-05 23:18:29 字数 1255 浏览 17 评论 0

后端回给前端的数据格式有很多种。

下面以一个登陆返回的数据为例子,这里写了一下它们的成功和失败的请求报文。

第一种。最简单粗暴的。通过HTTP状态码来表示失败和成功的状态。只有在错误或者其他的情况的时候才会有message信息。

# 登陆成功
HTTP/1.1 200 OK

{ 
    "user" : { "name" : "..." , "age" : "..."  }
}

# 密码错误
HTTP/1.1 400 Bad Request

{
    "message" : "password invalid"
}

第二种是前面一种的类似的版本。不过它会在任何时候都带上message信息。

# 登陆成功
HTTP/1.1 200 OK

{
    "message" : "success" ,
    "user"    : { "name" : "..." , "age" : "..."  }
}

# 密码错误
HTTP/1.1 400 Bad Request

{
    "message" : "password invalid"
}

第三种的状态码永远都是200。因为它有属于自己的状态码,非HTTP协议规定的状态码。一般是自己的业务的状态码。

# 登陆成功
HTTP/1.1 200 OK

{
    "status"  : 0,
    "message" : "success" ,
    "user"    : { "name" : "..." , "age" : "..."  }
}

# 密码错误
HTTP/1.1 200 OK

{
    "status"  : 419
    "message" : "password invalid"
}

第四种。和第三种混用。包含了自己业务的状态码还有HTTP规定的状态码。

# 登陆成功
HTTP/1.1 200 OK

{
    "status"  : 0,
    "message" : "success" ,
    "user"    : { "name" : "..." , "age" : "..."  }
}

# 密码错误
HTTP/1.1 400 Bad Request

{
    "status"  : 419
    "message" : "password invalid"
}

上面的几种格式应该怎么选择呢。或者有其他更好的格式。如果上面有给你不明所以的格式。那大概就是我写错了。直接跳过就好了。讲讲看的明白的格式就好了。谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

聽兲甴掵 2022-09-12 23:18:29

从项目上讲,感觉不搭噶,像http返回的状态码,像验证问题,网络问题,这些其实和传输协议直接挂钩,像自己写的业务逻辑返回值,例如密码错误,或者登录成功,这个在请求上是已经成功的,个人觉得,这两种方式不能混为一谈,因为是不同的层次,,当然前台有必要的还是要处理 请求失败时 回调。例如用error函数,
如果是 业务返回成功的话,前台错误捕获是不行的

抠脚大汉 2022-09-12 23:18:29

个人来说,第四种用的最多一些,其优点是易于扩展,适用于复杂接口,相对而言其传输成本会高一些,理解成本大致相同,数据结构稍显复杂,但是相对于其优点来说这点劣势基本可以忽略不计。
其次可能是第二种,用于十分明确的独立接口,也就是基本不会考虑再次更改,属于那种不会更改的类型,这个时候更加需要考虑的是成本问题。

梦言归人 2022-09-12 23:18:29

个人感觉第三种好

面如桃花 2022-09-12 23:18:29

看你的API给谁用。

如果是自己用(提供给其他平台开发人员),则第二种就可以,提供message,可以很大程度上在API把控提示信息。

但是一般公开的API,比如各大厂子的开放API,会加上 code方便其他开发者查看具体什么原因,也方便定位错误什么的。不过各大厂好像有的是不会使用http状态码控制成功还是失败,一般都是成功,使用code+status两者控制,在加上message。因为使用http状态码有时候可能会导致排错误区

乖乖哒 2022-09-12 23:18:29

一般开发用的比较多的是第四种

缱绻入梦 2022-09-12 23:18:29

个人感觉大部分情况下使用第三种就能够满足,可以参考下那些开放平台的接口,比如微信公众号,直接赶回错误信息,也就是第二种还是太简单了些,有可能前端的开发可以根据约定的状态码做些逻辑处理,进行封装,不用每次都单独处理;另外有些时候,比如像用户授权认证的,可以直接使用Http状态码,比如401,这时可以考虑第四种,感觉使用的场景相对比较少。

终止放荡 2022-09-12 23:18:29

推荐第1种

  1. 数据没有冗余(没有什么 status和success),传输速度快。
  2. 可以使用到HTTP标准状态码。这种API具有开放性。调用者通过你的HTTP状态码大致知道什么问题。

比如你访问401状态码,开发者就知道需要登录才能调用这个。
而其他的都是返回

{
    "status": 0,
    "message": "xxx"
}

需要一次解JSON才能得到具体操作,而且上例中貌似还要判断message里面包含"未登录"之类的字符

一笑百媚生 2022-09-12 23:18:29

第一种是最规范的方式,国内实际使用中好像第四种比较常见。
推荐第一种,很多APIDoc生成工具(比如Swagger、APIDoc)只支持第一种方式,而且大多数开源项目API也使用的是第一种方式。

甜点 2022-09-12 23:18:29

第一种即可,通过判断返回的http状态码判断请求是否成功。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文