可能是另一场圣战:后端返回的 JSON 的值是只要 String 类型呢,还是各种类型都包括呢?

2018-05-19 15:21:21 +08:00
 winiex

工作中和不同的客户端开发者合作过,有的要求返回的 JSON 统一只包含 String 类型:

{ a: "THYM", b: "107", c: "false" }

而有的则要求数据要表达自己的类型:

{ a: "THYM", b: 107, c: false }

我个人是支持第二种写法的,因为不用再写一堆转 String 和转回类型的代码。大家团队都选择何种方式呢?又是出于何种原因与理由呢?

19051 次点击
所在节点    程序员
161 条回复
huclengyue
2018-05-19 15:22:56 +08:00
第一种, 并且 boolean 用 1 0 表示
roy2220
2018-05-19 15:23:35 +08:00
我选择 protobuf
forestyuan
2018-05-19 15:25:56 +08:00
第二种更合理
lolizeppelin
2018-05-19 15:29:17 +08:00
按标准来 都有校验 第一种明显不标准
wxsm
2018-05-19 15:29:32 +08:00
敢问第一种的意义?
airyland
2018-05-19 15:29:46 +08:00
当然是二,该是数字的应该是数字,该是布尔的就该是布尔。第一种写法的可能还会要求你把原该是数字、布尔用字符传参 post。如果前端使用了 Vue, React 组件,那么意味着渲染前你要转换一次,提交前要重新转换一次,实在是浪费不必要的时间。
Death
2018-05-19 15:37:27 +08:00
第二种,json 本身就是包含了类型的。这样用 json schema 检验起来也方便。
janus77
2018-05-19 15:37:29 +08:00
这是不是 php 啊
sagaxu
2018-05-19 15:37:48 +08:00
这还能有争议?第一种是 sb 做法。
duan602728596
2018-05-19 15:38:02 +08:00
都用字符串表示,那还定啥标准?
shihira
2018-05-19 15:40:52 +08:00
不太能理解第一种欸。
winiex
2018-05-19 15:42:54 +08:00
@huclengyue
能说一下这样做的理由吗?我有好几个前同事和你的做法是一样的。

@lolizeppelin
@airyland
@Death
@duan602728596
我和各位的想法是一样的。但是基本上总有客户端开发者要求做成第一种。一直不是很清楚其中的缘由。
DavidNineRoc
2018-05-19 15:47:15 +08:00
@janus77 日常黑?
monsterxx03
2018-05-19 15:51:10 +08:00
js 不能处理大整数,有时为了统一,所以会有用第一种的
luoyou1014
2018-05-19 15:55:19 +08:00
第二种是理论最优,但实际上跑过大型的复杂的系统之后,整个团队会倾向于第一种写法( bool 采用 0 和 1 表示)。

具体原因是客户端数据类型错误的时候会导致应用直接闪退,虽然明确类型是最优解决方案,但是客户端无法确定服务器端会不会返回错误的类型,到时候客户端就闪了,对于 boss 而言,出现闪退这种严重的问题,竟然只是因为类型错误导致的,团队里面都很难承担这种压力,最终开发在实际应用中会尽量将除 id 之外的字段全部转成 string 来解决类型错误的问题。
airyland
2018-05-19 15:56:53 +08:00
@luoyou1014 这看起来是代码没有 review 团队没有规范导致的吧。
stabc
2018-05-19 16:00:25 +08:00
你要是纠结 "107" 和 107 我能够理解。但是你纠结"false"和 false,你逗我玩呢?
imnpc
2018-05-19 16:01:25 +08:00
对接几个 java 的支付接口 要求必须第一种
imn1
2018-05-19 16:01:42 +08:00
如果要对 json 做预处理的,会喜欢第一种
因为「易入难出」原则,模块并不清楚 json 的结构和数据类型,所以要判断一次再处理,string 则判断的过程简化,且能「预见」处理结果,如果浮点数 1.01 ,是不能确定处理结果会否变成 1.0099999999999998 的
尤其是用同一个模块预处理多个不同来源的 json 时,更希望类型单一

而直接使用 json 的,则喜欢第二种
isbase
2018-05-19 16:06:08 +08:00
第一种完全是扯淡,这种奇葩需求让他自己加中间层去搞

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

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

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

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

© 2021 V2EX