强烈吐槽传大段嵌套 JSON 格式请求,各位大神怎么看?

2016-07-20 21:33:23 +08:00
 sunmonster

最近公司开发一个 Web 新项目,就两个开发,一个前端加上我后端 PHP 开发,前端要求前后端分离,我只负责提供 api ,这倒是无所谓,但是他所有的请求都要求是 JSON 格式,我就有点受不了了。我倒是无所谓 JSON 还是 XML ,关键是一大段的 JSON ,嵌套 3 , 4 层,包含各种数组,布尔值发送过来,这叫我后端怎么做验证?我之前是提议直接 K/V 形式, JSON 的话至少不要嵌套这么多,他说数据量太多, JSON 方便,嵌套是为了更好地组织结构,不然干嘛传 JSON 。

卧槽,各位大神怎么看?

15741 次点击
所在节点    程序员
100 条回复
ichou
2016-07-21 10:43:08 +08:00
为什么不拉着他一起好好看下 RESTful
lwbjing
2016-07-21 10:46:51 +08:00
楼上说的都是。。还有页面上的东西是不是可以重构下,这么多层级的数据,是不是可以分块处理的?
pangliang
2016-07-21 10:50:08 +08:00
我还是那句得罪人的话: 你哪来的自信吐槽别人?
Xuanwo
2016-07-21 11:00:00 +08:00
用 json 很清真啊,有啥不好?
ichou
2016-07-21 11:02:03 +08:00
楼主说的是提交的时候用 json 提交吧,如果返回 json ,我觉得没有什么可说的,嵌套多少层都是你们业务逻辑上的事儿。

但是 POST 使用 json 的意义在那里, x-www-form 不能满足需求?前端因为技术限制不能传 K/V ? json 可以压缩传输大小?
而且 K/V 的方式也可以嵌套啊,不喜欢嵌套也可以约定对复杂的键值 json 化

前端使用 json 的提交导致的不是技术层面的难题,而是这种设计本身不符合很多 PHP 框架对 POST 请求的设计初衷,那也就意味着很多现成的东西不能用,因为前端一时兴起,后端就要自己去花很多不必要的时间做封装

而且这样绕弯子的方式真的会更健壮吗?

@orvice RESTful 和 json 并没有半毛钱关系
unknownservice
2016-07-21 11:04:14 +08:00
口说无凭,拿例子出来让大伙分析一下到底谁错了。
icyleaf7
2016-07-21 11:08:10 +08:00
json scheme ,可以帮你解决问题
repus911
2016-07-21 11:12:34 +08:00
不要让前端设计接口...
wizardoz
2016-07-21 11:13:26 +08:00
@ichou 前端的说了要前后端分离,前后端分离再让前端用 x-www-form 提交不科学啊。
ZnZt
2016-07-21 11:14:59 +08:00
请求的参数用 K/V, 回包的数据用 json 啊
aprikyblue
2016-07-21 11:24:46 +08:00
难道不应该是 前端告诉后端需要哪些功能的 api ,以满足需求
后端告诉前端这些 api 需要什么数据,并简化接口
返回数据用 json , js 解析起来挺方便。
提交用,验证起来,真的挺烦
ichou
2016-07-21 11:26:05 +08:00
@wizardoz 不应该是这样么,或者是通常的设计里面不是这样么?
你是说的用 form 表单提交不合适吧,但是那个貌似应该是 form-data
即便你是使用 ajax 请求后端,或者后端请求其他 API server, 如果是 POST 或 PUT ,你的参数依旧还是用的 x-www-form ,通常并没有人想楼主的前端一样再用 json 包一下

PS : 就算你用 JSON 来传输,你的数据包最外层呢? http 协议里面并没有 json 这个选项,所以你的 json 最终还是作为一个键值对的键值传进来的。。。这样是不是更容易理解这个前端到底做了一件多无聊的事情
Immortal
2016-07-21 11:44:39 +08:00
不要让前端设计接口+1
chuangbo
2016-07-21 12:25:06 +08:00
很多年前 backbone 默认所有数据 post 都是 json 的了, json post 是比 http form post 更高级的方案。
扁平是很难组织数据的。
Rand01ph
2016-07-21 12:30:23 +08:00
巴不得让前端设计接口……
jimmyye
2016-07-21 12:43:19 +08:00
可以看看 Facebook 的 GraphQL : http://graphql.org
>Query responses are decided by the client rather than the server. A GraphQL query returns exactly what a client asks for and no more.
Clarencep
2016-07-21 12:56:45 +08:00
安利个 PHP 的库: https://github.com/clazz/php-typed-sanitizer
轻松搞定数据校验~
ragnaroks
2016-07-21 13:16:08 +08:00
因为 ajax 目前无法提交文件(没用表单),所以我将文件 base64 后作为字符串提交...
有一次别人发个图并附加一个"?",我一看居然提交了 7M 多的 json 字符串.
shimanooo
2016-07-21 13:19:38 +08:00
think linearly ==> think recursively

lz 还是要学习一个
damean
2016-07-21 13:36:33 +08:00
@smithtel 前端验证数据。。。你疯了吗?

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

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

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

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

© 2021 V2EX