采取 RESTful 风格的 api 是否应该对结果包一层?

2019-10-21 23:18:13 +08:00
 h82258652

RT,今天公司的新项目开始对接,app 端的一看我这接口就吐槽我。让我改成如下这种: { "code": 200, "message": "", "data": xxx }

但我觉得首先这 code 肯定是多余的,可以直接从 http 状态码里面读取。之前也看过 twitter 的 api,也没有说包一层,200 的话那就直接返回 data 了。 公司项目我就忍忍算了,毕竟人家老员工。但后面有自己项目的话,还是想弄标准一点。不知道一般来说,大家是怎样实现?

25757 次点击
所在节点    程序员
305 条回复
petelin
2019-10-22 09:12:06 +08:00
这是一道好的面试题
嘻嘻😁
Narcissu5
2019-10-22 09:12:57 +08:00
@yuan7712 不可能,不会有哪家监控把 body 拆开了看,何况监控看的是统计数据,每个接口的 businesscode 都不一样没办法汇总。

再者,非 200 返回的时候也是可以带 code 的,那走的就是异常流程了
h82258652
2019-10-22 09:13:01 +08:00
@yc8332 不,楼主我说的就是正常 200 的情况,例如 GET /person/1,我前端的意思是这样也要包一层。
ryougifujino
2019-10-22 09:17:21 +08:00
感觉还是 twitter 那样好,成功的时候直接返回不包一层,失败且有必要的时候再提供 code 进行进一步判断
Ixizi
2019-10-22 09:17:29 +08:00
包不包都无所谓 能用就行
sm0king
2019-10-22 09:29:06 +08:00
打一架,谁赢了听谁的。
Leigg
2019-10-22 09:32:41 +08:00
我想问楼主工作几年?
WeKeey
2019-10-22 09:33:01 +08:00
之前公司的原则是只用 errorCode,httpCode 一律 200

我自己的项目是正常 httpCode 200,直接返回内容,异常 httpCode 400,500 等,返回 code 和 message

自己的接口: https://xapi.vip/

参考: https://github.com/cryptlex/rest-api-response-format
OSF2E
2019-10-22 09:34:49 +08:00
那么问题来了,是给不了,还是不想给,或者他是不是故意为难你。

放下对人心的揣测,真的很难。
eason1874
2019-10-22 09:35:12 +08:00
@Narcissu5 #58 登录错误提示能有什么漏洞,最大的可能也就是穷举,做好访问限制什么都不用怕,单 IP 三次错误以上放验证码,全网十分钟内错误超过日常平均值*3 全网放验证码。
Vegetable
2019-10-22 09:36:31 +08:00
你用 http 状态码表示一下用户 token 即将过期,请主动刷新这个状态
cmobiooo
2019-10-22 09:39:35 +08:00
如果内部错误,http code 返回 200 然后 json 里的 code 为自定义错误码还能理解

不能理解的是:
HTTP CODE:200
{
"code": 404,
"msg": "page not found"
}
dog82
2019-10-22 09:41:24 +08:00
业务向的 code 是必须的,http 那几个状态码很难表达更多意思,但是我反对用数字的 code,用字符串更合理
jorneyr
2019-10-22 09:41:29 +08:00
对你的要求没有问题。

参考各大厂的 API,这个 code 是有必要的,请求会根据传的参数给你提示有什么错误,例如提示你缺少某个参数,这种业务逻辑的错误不是 HTTP code 能做到的,因为错误千奇百怪,根据 code 可以查询参考文档知道是什么错误,code 不变,参考文档可以写多种语言版本。
unco020511
2019-10-22 09:41:52 +08:00
我认为是有必要的,有时候业务逻辑有多种错误状态,需要一个 errorCode 来区分
geying
2019-10-22 09:46:46 +08:00
@helone 请教一下假设 楼上讲的登录失败,如何从日志快速定位问题,感觉设置错误码会不会更容易定位直接在错误位置开始调试。目前的系统日志量挺大的如果要找边缘业务报错感觉很麻烦
blackboom
2019-10-22 09:48:23 +08:00
200 包一层太蠢了,不要谈什么阿里腾讯。
rykka
2019-10-22 09:48:31 +08:00
当然要包。这才多大的数据量。但是用起来省事多了
Airon
2019-10-22 09:48:44 +08:00
我司定义的是,成功直接返回 data 错误返回各种 error code 和 error massage,我感觉还挺好的,http code 很难表现复杂逻辑的多种错误。公共错误通过 http code 体现 比如用户验证 啥的
dcsite
2019-10-22 09:49:47 +08:00
看了上面很多人的回复:自定义 code 无意义。我怀疑这些人是不是只写过留言板之类的应用?开发的 API 接口,不需要对公司其它部门提供服务,也不会接入其它平台。更不需要对外提供服务。

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

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

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

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

© 2021 V2EX