PHP 接口返回 JSON 数据保证正确的类型难(或者麻烦)在哪?

2018-01-09 22:49:46 +08:00
 cielpy

一直以来有一个疑问,和后端同事合作时定好了接口文档,如:

{
    type: 0
}

定义好 type 是 number 类型,返回数据一会儿是 string,一会儿是 number 类型,问他们说代码都没改,返回数据的类型变了,Google 一下似乎是有这个问题,但是没有找到一个好的解决方案,我不是写 PHP 的,可能找解决方案的姿势不对,所以想请问一下各位 PHPer,这个问题真的存在吗?如果存在,解决起来有多麻烦?正确的解决方式是什么呢?

10671 次点击
所在节点    PHP
74 条回复
cielpy
2018-01-10 11:39:38 +08:00
@lshero 遇到了。。没写进来
jswh
2018-01-10 11:41:26 +08:00
一切都按文档来,文档没写的约定好了,写进文档,让后再按文档来,省的扯皮,然后该怎么写怎么写,该强制类型转换就转换。
代码都没改,返回数据的类型变了,这种基本上是底下的代码变了。
tailf
2018-01-10 11:47:14 +08:00
@omph JSON 描述的格式,不会经常改的,实测好用。
lshero
2018-01-10 11:52:27 +08:00
@cielpy 其实后端可以输出前先构造好要输出的结构体,再去填充数据,并在输出前进行校验。但是影响 QPS 和增加工作量的事肯定不改,这事情只能找上级推动了。比如如果你们是移动端的话,你们可以把最近因为后端输出数据不标准导致的奔溃已经影响的范围的数据摆出来,让上级来推动这件事情。
sagaxu
2018-01-10 11:54:18 +08:00
动态一时爽
cccRaim
2018-01-10 11:57:26 +08:00
明显是后端甩锅
free9fw
2018-01-10 12:00:24 +08:00
完全是看 PHP 开发人员的水平的,更有甚者,返回的 json 是这样的:{"1": "a", "2": "b", ...}
Felldeadbird
2018-01-10 14:08:35 +08:00
后端没有明确返回类型。这一点 PHP 对接其他语言特别容易遇到。
DamonLee
2018-01-10 14:19:17 +08:00
一线城市回到三线老家找到的公司就这样,两个 php,都不按套路出牌,有一次改个版本更新接口,她改来改去就是一直是 string,最后我妥协了,还是安卓和 iOS 来改吧,耽误不起那个时间啊
PS:php 是技术部负责人
tagtag
2018-01-10 14:27:14 +08:00
在变量前面用
(int)$type;或者(string)$type;强制转换下应该就行了。
glues
2018-01-10 14:30:54 +08:00
PHP 果然是最好的语言
hand515
2018-01-10 14:34:30 +08:00
换强类型语言
ylsc633
2018-01-10 14:40:34 +08:00
这又是故意拉战的!

沟通下不就 ok 了么!

这跟昨天那个 前端校验和后端校验的问题一模一样!

要是牛 x,可以自己前后端一起搞啊!真的是...

不沟通..肯定是这个问题!
yxn1910
2018-01-10 16:28:53 +08:00
可以试试 GRPC 或者直接用 Protobuffer 来交换数据
AllBlueAwei
2018-01-10 16:35:50 +08:00
一般直接从数据库查询出来的数据是不会出现这种情况的吧,看了你的问题,我也马上回去看看我的接口文档是否也出现过这样的问题,结果是没有的,应该是后台程序员处理某一段逻辑的时候使数据类型发生改变了,而且我个人也不建议强制转换数据类型,这个肯定不是语言的锅,八成是程序写的有问题
ZXCDFGTYU
2018-01-10 16:36:03 +08:00
api 接口文档里强制定义数据类型,后端看了会明白的。如果不明白那他也不要做后端了。
jea
2018-01-10 17:10:51 +08:00
@glues 虽然 PHP 是弱类型语言, 但主要还是看写东西的人, 这个还是能定义的
njwangchuan
2018-01-10 17:20:13 +08:00
这锅怎么也轮不到 php 背吧。后端水平 low,用什么语言写出来的东西都只能是一坨屎。这种情况直接让他搜索 ecma404
fcten
2018-01-10 17:24:06 +08:00
要保证数据类型一点都不麻烦……返回之前强制转换一下就好了
saintatgod
2018-01-10 17:35:15 +08:00
#代码都没改,返回数据的类型变了# 这是人为的,

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

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

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

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

© 2021 V2EX