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

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

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

{
    type: 0
}

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

9913 次点击
所在节点    PHP
74 条回复
assad
2018-01-09 22:52:26 +08:00
可以强制后端所有的值全部字符串啊
cielpy
2018-01-09 22:55:31 +08:00
@assad 强转字符串不太优雅吧,有些是 number 类型的客户端处理起来就自然多了,不用转,直接拿来数值就判断了
mht
2018-01-09 23:07:50 +08:00
存在这个情况,习惯好点的肯定会给你转成 int 型
cielpy
2018-01-09 23:10:55 +08:00
@mht 每个字段读出来后手动转,这样吗
mahone3297
2018-01-09 23:12:00 +08:00
我觉得不存在。。。int 就是 int。除非,太长的 integer,会自动转成 string 好像
est
2018-01-09 23:22:26 +08:00
我还以为你想说 type 是关键字。


返回一个 {for: 0} 估计会在某些情况下让人哭。
cielpy
2018-01-10 00:05:30 +08:00
@est 不是啦,type 是一个字段名😂
cxbig
2018-01-10 01:42:49 +08:00
作为数据提供方,我会考虑在输出 JSON 以前,加强制类型转换。特别是文档已经明确标注类型的情况下。
作为数据接受方,我也会先做数据整形,再处理。
IceBay
2018-01-10 02:55:30 +08:00
大概是
```
return response(['status_code' => 201]);
```

```
return response(['status_code' => '201']);
```
dangyuluo
2018-01-10 03:24:27 +08:00
麻烦在前端看不起 PHP,与后端缺乏沟通方法,沟通效率低上。
Immortal
2018-01-10 03:26:37 +08:00
我听一个朋友说 他在返回数据那统一全部转成了 string
一般我这边客户端(app)也会做数据格式兼容,防止服务端(我)有时候没注意数据格式直接崩了
alinwu05
2018-01-10 07:57:55 +08:00
肯定是改代码啦,不是语言的锅
lzvezr
2018-01-10 08:04:36 +08:00
反正我利用过 api 返回类型不同获取用户隐私数据,所以以防万一还是后端检查一下代码统一数据类型比较好
he583899772
2018-01-10 09:07:59 +08:00
数据传输不都是字符串的形式传递嘛
raysonlu
2018-01-10 09:09:10 +08:00
统一用字符串呗,或者接收端自己做检查,查数据库得到的都是字符串啊,你要 php 一个一个给你转类型?逃)
azh7138m
2018-01-10 09:12:50 +08:00
pubby
2018-01-10 09:13:20 +08:00
不难,偷懒而已
alexzhou
2018-01-10 09:14:42 +08:00
接口这种东西 预定好了的 就要返回照着约定返回 管你后端用什么语言。 问题不难解决 就看做不做了
lepig
2018-01-10 09:15:09 +08:00
数据库默认查出来的就算是 int 也会返回 string
对于 php 这种弱类型语言 前端在判断时最好自己也转一下。就像提交表单的时候后端也不会相信前端输入,肯定会在做一次检测
Moker
2018-01-10 09:16:38 +08:00
return 的时候直接加( int )一般这样做 只是看想不想

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

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

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

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

© 2021 V2EX