了解下现在接口返回都是什么形式, 要不要提示文本?

2021-07-26 10:39:02 +08:00
 onikage

http, json. 以登录接口为例, 两种方案:

  1. 返回{"code":0} 代表成功, {"code":1} 代表用户名密码不匹配. 前端页面自己根据 code 显示不同提示文案.
  2. 返回{"code":0,"msg":"登录成功"}, {"code":1, "msg":"用户名密码不匹配"}, 页面上直接显示 msg 属性的文本. 我个人认为第二种非常啰嗦, 一个 code 足以说明问题, 但是好像不少人都习惯第二种.
5832 次点击
所在节点    编程
77 条回复
falcon05
2021-07-26 11:30:15 +08:00
第二种,方便自己调试。不写文档
SoloCompany
2021-07-26 11:32:06 +08:00
i18n 已死请烧纸
Kilerd
2021-07-26 11:41:14 +08:00
第一种,但是会遵循第二种加一个 msg 不过是 enum 格式的
例如:
登录成功: {"code":0,"msg":"LOGIN_SUCCESS"}
密码不对: {"code":1, "msg":"INVALID_PASSWORD"}

这样前端可以用 msg 里面的 key 做 i18n

别说 i18n 没用,问就是你做的项目不够国际化。
gamexg
2021-07-26 13:23:21 +08:00
app 等本地应用,
gamexg
2021-07-26 13:26:47 +08:00
@gamexg #24

app 等本地应用,不建议第一种.
app 发布时不可能预期到所有错误提示,后期绝对后出现变更.
第一种没有了灵活性.
wheeler
2021-07-26 13:48:51 +08:00
借楼问下,有了 code 之后 http 响应码是都返回 200 吗?
Leonard
2021-07-26 14:01:04 +08:00
第二种,灵活一点,后台可以随意新增新的提示语
whusnoopy
2021-07-26 14:11:53 +08:00
参与讨论

先回答 #26 的问题:有了 code 以后 HTTP 响应码都返回 200 。原因一是因为 HTTP 码表示的是网络层的成功与否,而接口的很多错误并不是网络层的,二是即使是网络层的错误,比如 403 Forbidden,如果直接在 HTTP 响应码返回,可能会被更上层的框架拦截处理,压根到不了应用里来处理

另外回楼主,为什么非得争论哪个好,不能一起用。实践中我这边一般返回的都是 `{"code": 1, "msg": "登录失败:用户不存在", "data": {}} ` 这样的,前端通过 0 和非 0 判断是否成功,对于非 0 的情况,可以根据 code 去自己组织异常处理和用户反馈(可能还用到 data 里的内容),也可以用我们自己框架层逻辑直接显示 msg 并退出调用

一般最终的处理逻辑和标准都是以后端为准,哪怕后端实现错了那也才是真实情况,所以我写后端会连 code 带 msg 并附上 data 一起返回,前端爱怎么用随便他(虽然大多数时候是另一个我
yolee599
2021-07-26 14:27:59 +08:00
@wheeler #26 返回 200 可以保证所有应用错误都能收到,应用错误用 http 响应可能被丢弃,到不了应用层。
otakustay
2021-07-26 14:36:54 +08:00
你能不能保证你的 code 的 msg 永远是一对一的,如果可以就不需要 msg 了让前端做字典就行,做国际化也方便些
但我从来没见过 code 和 msg 能一对一的时候,最糟糕的兜底错误怎么处理呢?
masterclock
2021-07-26 14:41:16 +08:00
借楼,第二种,多语言化怎么解决的?前端请求的时候带着语言信息,服务之间传递下去,每个服务各自处理多语言?
netwjx
2021-07-26 14:46:29 +08:00
1 和 2 的真实差异是?

我猜的: 每次网络通讯, 1 比 2 快 1ms? 每次 debug, 2 比 1 快一小时?


不涉及核心的比较(比如用"好" 来形容 )都是耍流氓
nekoneko
2021-07-26 15:20:31 +08:00
@adnoh #7 这种返回对 对接 不太友好,跟前端交互足够
nekoneko
2021-07-26 15:21:22 +08:00
@onikage #9 前端所有文本都由后端返回,前端只需要做好显示功能
Hallelu
2021-07-26 15:32:44 +08:00
第一种的话,能保证一对一,是最好的。但我对接的,还没见过一个 code 就是对应一个 msg 的,例如密码失败,用户已登录,这种情况,用第一种还得再去请求一下。
aliveyang
2021-07-26 15:33:56 +08:00
第二种,不要增加沟通成本
Jooooooooo
2021-07-26 15:36:35 +08:00
当然是第二种

后端来维护各种文本远比前端要灵活
lei2j
2021-07-26 15:36:41 +08:00
肯定第二种好,后端解决更好。
akira
2021-07-26 15:40:29 +08:00
喜欢第二种,调试起来各种方便
ccyu220
2021-07-26 15:43:04 +08:00
肯定是第二种啊,前端在 header 中提交语言代码,后端根据语言返回不同的语言提示。

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

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

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

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

© 2021 V2EX