某些后端不知道是因为太懒还是因为其他原因,对于 json 的数据处理表示很崩溃

2020-02-11 15:38:38 +08:00
 AppxLite

首先,命名一踏糊涂,比如某些订单列表数据 A、B、C。

../api/a

{
	"code": 200,
    "msg": "ok",
    "a_list": {
    	...list
    }
}

../api/b

{
	"code": 200,
    "msg": "ok",
    "b_list": {
    	...list
    }
}

../api/c

{
	"code": 200,
    "msg": "ok",
    "c_list": {
    	...list
    }
}

因为这三个 api 接口用的都是相同的页面和布局,就因为这种脑残的 list 命名,前端会为此作出特殊的处理。

再举个例子:不知道某些后端对 json 是不是有什么误会,json 的数组和对象都分不清(在他们眼里,json 的对象和数组都是数组),这不是最恶心的,更恶心的是,同一个 api 接口同一个值,在不同的情况下,给你返回不同的数据类型。比如:

同一个接口:../api/data

某些情况是这样的:

{
	"code": 200,
    "msg": "ok",
    "data": {
    	...list
    }
}

某些情况又是这样的:

```json
{
	"code": 200,
    "msg": "ok",
    "data": []
}

再举个例子,明明不是数组,但是却要用[]来包一层,比如:
已知这个 data 的数据结构永远不是一个数组的。

```json
{
	"code": 200,
    "msg": "ok",
    "data": [{
    	...list
    }]
}

再举个例子,当只有一条数据的时候,是这样的:

{
	"code": 200,
    "msg": "ok",
    "data": {
    	...list
    }
}

当没有数据的时候是这样的

{
	"code": 200,
    "msg": "ok",
    "data": []
}

当有一条以上的时候又是这样的:

{
	"code": 200,
    "msg": "ok",
    "data": [{
    	...list
    }]
}

这些后端不知道是因为懒,还是因为自己的认知有限,每次和这样恶心的接口对接,作为一个前端的人来说,看到这样的接口,就像吃屎一样。和他们沟通不但不认同,还各种推脱说{}就是数组。。。

各位看官,你们觉得这是不是小题大做了?虽然通过各种处理,这些问题都不算啥,但是为何可以通过常识来解决的事,为何不把规则当规则呢?你用 json,就要遵循 json 的规则。而不是这就是 XXX。

各位前端小伙伴们,遇到这样的接口,你是怎么处理的?

8538 次点击
所在节点    程序员
75 条回复
springz
2020-02-11 20:16:24 +08:00
多年 PHPer,多年 Javaer,说句公道话,大部分 PHP 程序员可能真的是不知道其他语言程序员会骂娘。
springz
2020-02-11 20:21:15 +08:00
@jokeqf 的确怪不到语言,大部分 PHPer 认知是真的浅。
springz
2020-02-11 20:21:44 +08:00
技术栈太单一,array 打天下。
ZXCDFGTYU
2020-02-11 21:09:30 +08:00
跟领导说就是了,没有必要一杆子打死人。我之前也不知道,后来公司的技术总监教给我的,告诉我这么做方便其他语言的同事开发。4 年 phper。
DelayNoMay
2020-02-11 21:18:04 +08:00
你作为前端,我觉得你应该先了解下你对接的后端语言,简单了解即可,就不会有这么大反应了
p1gd0g
2020-02-11 21:58:48 +08:00
项目组一直用 proto,没有遇到过类似的问题。
iiji86
2020-02-11 22:00:57 +08:00
@Juicpt 要是不要求排序感觉也挺好,连接口文档都不需要就能看懂所有字段的意义,还不用费脑子想英文 ze 翻译
wangyzj
2020-02-11 22:12:15 +08:00
这不是语言的问题了
这是没规定好规则的问题
springz
2020-02-11 22:46:36 +08:00
@iiji86 不用 PHP,用 Java 不能用反射,或者 C++ 或者 Go,你试试解一个这个 JSON。
springz
2020-02-11 22:51:14 +08:00
中国这么多城市,你全写实体类试试。
a852695
2020-02-11 23:02:29 +08:00
基本上每个月都会有这种帖子,我建议还是请你同事一定要认真看看《 HTTP 权威指南》,只需要读前半部分就应该懂 HTTP 协议,这些滥用明显就是对 HTTP 都不懂,拿着半截就开始跑,说的不好听,这种人基础太差了,你和他讲道理是讲不通的,而且你作为前端,一定要强势,因为前端才懂需求,你直接告诉他:不能做就辞职。
815979670
2020-02-12 06:34:33 +08:00
PHP 确实不分这个 但是因为后台的前端部分是我写的 所以 我 json_encode 的时候 会注意这个
sampeng
2020-02-12 07:49:02 +08:00
这种返回结果你还不怼?心真大
kim01
2020-02-12 09:27:26 +08:00
别说其他的,高德地图之前的接口都有这个问题。。。。
Juicpt
2020-02-12 09:27:27 +08:00
@CYKun #33 确实简单明了。。。。
@springz #39。。。。只能说我幸好是前端。。。就直接 Object.keys(value)一通遍历取出来就好。。。。。
@iiji86 #47 给前端确实好一些。。。。
killerv
2020-02-12 09:30:55 +08:00
所以,很多垃圾 PHP 程序员拉低了 PHP 这门语言
xman99
2020-02-12 09:49:52 +08:00
希望你们可以规范起来。 如果是返回单个对象,要求返回单个对象的, 我觉得完全没问题
多个数据返回数组,这样要求没问题。如果奇奇怪怪返回的,请主管协调一下吧
keepeye
2020-02-12 10:27:46 +08:00
该后端可能是北大青鸟出来的?
codelegant
2020-02-12 10:59:22 +08:00
不要浪费时间在 v2 上发帖,直接去工位上喷。
KyonLi
2020-02-12 11:17:51 +08:00
习惯了,现在不对接口请求进行封装,写好一个请求到处粘贴再根据实际情况修改,能用就好技术追求不能当饭吃

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

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

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

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

© 2021 V2EX