服务器的 json api 的 response 一定要有 code, msg, data 这些字段吗

2016-11-18 11:08:23 +08:00
 wanganjun
看了"还能不能好好的写 API 了"( https://www.v2ex.com/t/321243) 这个帖子, 准备所有接口都按状态码 200 和 { code: Number, msg: String, data: Object } 这样的结构返回, 但是假如只返回一个有意义的字段的话(比如只是返回一个 id ), 感觉没必要用 data 字段套一层, 如果 code 是 0, msg 字段也可以不要了.

我看微信公众号开发文档里面, code, msg, data 这些字段都是有的, 就算不返回任何有意义的信息, 这三个字段都有.

有没有人可以说说这么做的优劣?
10069 次点击
所在节点    程序员
13 条回复
Totato5749
2016-11-18 11:16:01 +08:00
后端是 java 写的话,序列化一个 bean 对象一般就不去修剪了吧 我猜是这样的
justfindu
2016-11-18 11:18:09 +08:00
那其他人用你接口时候还得注意, 这个接口有没有 msg 有没有 data , 你自己写的时候还要区分 data 要不要 msg 要不要?
不嫌麻烦?
beneo
2016-11-18 11:22:30 +08:00
简单来说, http response code 不能完全的满足业务需求,也就是业务上的 error code 不能完全的映射到 http response code 上面,所以索性,全部返回 200 ,靠里面的 error code 来区分
Jakesoft
2016-11-18 11:45:32 +08:00
我是有的,{"code":0,"status":1,"data":[{object},{object},{object}],"message":"ok"},

或者 {"code":2333,"status":0,"data":[],"message":"fail"},

这样统一设计挺好的,可以通用,

并且 status 不使用字符串,比如"success"/"fail",也不使用 boolean ,
SoloCompany
2016-11-18 12:07:54 +08:00
10+年前定的协议
{“ code ”:” 233 ”,” var ”:{…}}
到现在都没有改过
为了适应业务的复杂性, code 是 string 类型而不是 int

当然 10+年前的 json 还没这么流行,所以其实是
<object><string name=“ code ”>233</string><object name=“ var ”>...</object></object>
wesley
2016-11-18 13:00:41 +08:00
底层错误用 http status code , 比如验证失败, Token 过期,没有权限等

业务部分用业务系统自己定义的 code ,此时 http status 为 200
garrydzeng
2016-11-18 13:27:40 +08:00
如果是使用 HTTP 协议,这样做没有任何优势。
mornlight
2016-11-18 13:59:15 +08:00
这么几个字节节省了没有啥意义,统一更重要
icris
2016-11-18 14:47:23 +08:00
省掉一个空的 msg 字段对 java 这样的强类型语言没有影响,大部分反序列化工具都能正确赋上默认值(手动取值本来就要处理异常),但 js 会从 null 变成 undefined , python ( json.loads())会有一个 KeyError
hekunhotmail
2016-11-18 15:49:36 +08:00
这种接口返回统一很重要
MajorAdam
2016-11-19 10:45:16 +08:00
统一很重要!
Miy4mori
2016-11-19 23:29:53 +08:00
你是没用 java 之类的对接过各种反人类系统吧,娘的每个接口一套结构,还得专门写个 bean 反序列化话,最坑的是无法直接获得业务状态,还得先反序列化成 map ,看有没有 error ,没有的话再用 bean 反序列化,一不小心就反序列化异常,简直想骂人………
godsoul
2020-05-04 18:26:54 +08:00
我同事也觉得完全没必要有 data,最主要是大厂 google 支付宝 微信 华为 等等接口,字段都是直接和 code msg 平级的,并不固定报在 data 里面

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/321419

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX