怎么看待请求参数 JSON 数据包里再包 JSON 数据

2022-10-27 10:32:03 +08:00
 Aluhao
请求数据结构如下:

{"id":"100","time":1666320790000,"validate":"cc2ac65f816faf49f7e","data":"{\"reqid\":\"\",\"taskid\":\"\",\"sid\":\"B464AA\",\"atuser\":null,\"content\":{\"type\":1,\"text\":\"{\\\"text\\\":\\\"000\\\"}\"}}"}

这样的设计大家有什么看法?
7029 次点击
所在节点    程序员
64 条回复
singerll
2022-10-27 15:50:44 +08:00
很多时候都是历史遗留,至于为什么不改掉,跟一大堆系统对接了,改的成本太大了。
ptrees
2022-10-27 15:54:53 +08:00
我就是这么做的,理由是阿里云 api 的 formdata 格式才支持对每个参数设置校验,用 json 就只能自己后台写校验了,为了统一就这么搞了。
reallynyn
2022-10-27 15:56:29 +08:00
你看下 tcp 协议和 ip 协议,每个协议都有个包头,把 json 想象成包头就行了。。
IvanLi127
2022-10-27 16:12:39 +08:00
要么菜,要么图省事。 我看 OP 提供的 JSON 里有个 validate 字段。这个会不会和那个 JSON 字符串有什么关系?
我怀疑和拿 JSON 字符串参与签名有关系。不过设计成这样那还是要说声菜。
wyx119911
2022-10-27 17:01:58 +08:00
我写过这种接口,原有后台框架是 protobuffer 序列化的某种规范。因为前端引入一个第三方组件,但组件所需的协议规范与原有框架不一致,返回再包 JSON 影响面比较小。
chocotan
2022-10-27 17:12:05 +08:00
很正常,比如大字段,后端就是 String 类型
nmap
2022-10-27 18:00:47 +08:00
看得密恐症犯了
yyf1234
2022-10-27 18:24:10 +08:00
没对接银行支付类的业务吧?大多都这样,这个字段一般是业务参数,外面的是公共参数
ruoxie
2022-10-27 20:46:20 +08:00
界面可视化布局都是这么玩的
shiweiliang
2022-10-27 21:56:43 +08:00
![]( )
renmu
2022-10-27 22:11:07 +08:00
数据库直接把 json 存成 string 了,然后就变成这样了,挺正常的
burby
2022-10-28 00:35:42 +08:00
感觉还挺正常的,外层服务只是做个透传 就把数据带回来了。有时候为了省一次 API ,有些地方是根本解析不了,背后可能是复杂的架构和补丁造成的。丑陋的接口可能只是这里面最不重要的一点点尴尬
zzj0311
2022-10-28 00:57:22 +08:00
随便找俩 app 抓包看看 都是这种鬼东西
April5
2022-10-28 02:20:55 +08:00
找设计接口的人了解这样设计的历史背景 X
v2ex 发帖,怎么看待请求参数 JSON 数据包里再包 JSON 数据 √
ZRS
2022-10-28 03:05:34 +08:00
傻逼行为 但我刚遇到一个
lmw2616
2022-10-28 08:57:01 +08:00
说不正常的大概是没做过三年级以上的项目吧[狗头]
xz410236056
2022-10-28 09:13:42 +08:00
data 里面是个字符串? 那确实傻逼。
@lessMonologue #15 正常里面是 JSON object 啊
lmmlwen
2022-10-28 09:38:14 +08:00
没问题啊,我不知道各位是天天沉浸在博客还是自我臆想中,这种做法不管是大厂还是初创都很常见
lakehylia
2022-10-28 09:57:08 +08:00
base64 一下会好看一点
jorneyr
2022-10-28 10:15:57 +08:00
看情况,有的时候使用是非常方便的。
例如配置内容保存到数据库,不会去进行搜索,所以会把对象序列化为 JSON 字符串保存到数据库。由于后端返回前端的响应体格式是统一的: { code, message, data },配置内存肯定是放在 data 字段,所以是一个 data 是一个 JSON 字符串很正常,否则后端需要把 JSON 字符串解析成对象,然后放到 data 下,没多大必要。

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

https://yangjunhui.monster/t/890284

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

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

© 2021 V2EX