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

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 足以说明问题, 但是好像不少人都习惯第二种.
5833 次点击
所在节点    编程
77 条回复
makun123
2021-07-26 20:42:40 +08:00
@onikage 对外提供服务的 api 肯定是要是要一个 code 对应一个 msg
onikage
2021-07-26 20:43:40 +08:00
@makun123 快了
IvanLi127
2021-07-26 21:03:55 +08:00
非生产环境 具体的错误描述得给。在生产环境中,如果没有其他可选项的话,我选第二种。
daimubai
2021-07-26 22:05:00 +08:00
肯定第二种,对于可变的东西后端做控制更好,毕竟产品总是需要改文案什么的,而且第二种前端调试起来也方便吧,至于国际化,如楼上所说,可以在请求头中传递 language,不过我想大多人的项目还用不到国际化
Felldeadbird
2021-07-26 22:38:43 +08:00
第二种。国际化解决方案很多啊。 后端判断,前端判断。两端一起判断。第二种可以直接定位到错误。

第一种需要准确定制 code 码,后期维护成本高
queuey
2021-07-26 22:59:39 +08:00
@onikage 57 微信这种是提供 API 给到外部的啊,和自己做完全不是一个概念。你要是觉得 1 好那就用 1 呗。只要你们前端没意见
xujinkai
2021-07-26 23:25:33 +08:00
第二种方便调试,前端不一定用但不能没有
gtanyin
2021-07-27 09:02:54 +08:00
见过懒的后端,没见过你这么懒的。。
xianxiaobo
2021-07-27 09:07:41 +08:00
我前后端都自己写,我选择第二种,维护方便啊,要改 code 和 message 只要改后端代码就行了。不然后端代码加个 code,然后前端代码再去加 message?
whusnoopy
2021-07-27 09:14:54 +08:00
@onikage 关于微信的返回码

1. 人家给了全局返回码又不是不能再多带个 msg 和 data,多带 msg 和 data 并不影响你本来就有 code 返回和 code 全局唯一性,比如 code 是 -1 表示「系统忙,请稍后再试」,那到底是等一秒后重试还是一分钟后重试,这种就可以在 msg 和 data 里体现了

2. 微信的开放平台也不是必然正确和唯一正确的做法,比如他们家授权过程还要带着 appid 和 secret 明文传这就很诡异 https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html,虽然有用 https,虽然可以设置 IP 白名单,对比下支付宝,都是公私钥签名验证 https://opendocs.alipay.com/support/01rave
penll
2021-07-27 09:41:15 +08:00
微信的 code 要看具体情况。msg 是给用户的友好信息,code 是能定位到具体问题,难道你要告诉用户 xxx 参数不能为空这种情况吗?
EmotionV
2021-07-27 10:06:48 +08:00
明显第二种啊,要是 pm 说要改个提示,后台直接改下上线就行。app 啥的还要重新打包提交审核,麻烦的很。
strongcoder
2021-07-27 10:11:52 +08:00
{
"status": "200",
"msg": "OK",
"isPC": 1,
"isHome": 1,
"data": {
"status": "0",
"data": "new"
}
}
no1xsyzy
2021-07-27 11:21:37 +08:00
type Response<T, F> = {code: "SUCCESS", data: T} | {code: F};

例:
{"code": "SUCCESS", data: {"token": "..."}}
{"code": "BAD_LOGIN"}
{"code": "UNKNOWN_ERROR"}
{"code": "SERVER_DOWN"}

说了多少次,不要用数字暧昧地表示状态,用 Symbol 去明确。那样后端调试也不需要查询或记忆 code
成功就是成功不需要 msg,warning 不应当以 toast 形式提供。

(有时返回 http code 444 以实现某些目的)

评论,这问题甚至不值得辩论,因为最优选项显而易见:

#23 差门前一脚,code 的存在毫无意义,enum msg 不就足以提供所有信息了吗?

#25 所说的,应当采用单独的接口传递以实现关注点分离。

#34 那为什么要返回 json,直接 html 返回整个网页解决所有问题。 —— 我确实有这么干的。

#71 接口返回信息不应当用于定位问题,定位问题应当用后端 log,否则可能泄漏代码形态和逻辑。
netwjx
2021-07-27 12:40:21 +08:00
@onikage 研发过程成本 和 运行时成本 比起来

几乎可以忽略, 否则软件行业不会这么发达

所以决策判断应以后者为主, 降低运行成本, 减少运行风险
onikage
2021-07-28 10:54:47 +08:00
@gtanyin 实际早年还写 jquery 那会因为前后端都是一个人, 所以就是这么搞的. 也没感觉增加多少工作量.
gtanyin
2021-07-29 08:45:26 +08:00
@onikage 好的,学习了~

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

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

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

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

© 2021 V2EX