Rumah  >  Artikel  >  pembangunan bahagian belakang  >  PHP 后端很难返回规范的 JSON 数据吗?

PHP 后端很难返回规范的 JSON 数据吗?

WBOY
WBOYasal
2016-06-17 08:32:451221semak imbas

我是 iOS 码工,之没有和 PHP 程序员合作过。目前的 PHP 程序员向我抛出了很多问题,我表示很震惊。但是以前合作过的其它语言的程序员没有这些问题。我自己无法判定,所以要请教大家。

  • 因为 PHP 是弱类型语言并且 PHP 从数据库取出来的数据都是字符串,所以给我返回的 JSON里面无论 int/float/map 都是 string 类型。如果要转为正确的类型,会很麻烦而且影响性能。PHP 是弱类型语言,保证格式正确会很难做。
    • 我对此不认同,对应到 Java/Ruby 都有成熟的 ORM 框架解决问题,我不大相信 PHP 解决这些问题会很棘手。我找了几个 PHP 框架,比如 laravel.com/docs/4.2/el 不过某不用
  • 因为 PHP 里只有 Array 没有 Map 类型,所以如果返回 JSON 中包含空 Array 和 Map 都会变成空 Array 然后对我大谈性能和开发效率。
    • 这个真的很难处理吗?另外我想要后端去掉没有 value 的 key 都异常艰难。
  • API 的字段名需要和数据库字段紧紧绑定,否则会很麻烦,而且要经常修改。
    • 难道不能提前好好设计,然后个改个的吗?竟然不做好测试就交付给我,要我来当人肉测试器。这样真的合适吗?
我看 Facebook 的 API 就没有这些问题。压根不想关心 PHP 怎么处理的这些事,目前只想安静的做养眼的 UI 和炫酷的动画。

用 PHP 返回规范的 JSON 数据真的很困难吗?或者是我们后端个人问题?
是我的我一定不会推辞。最后,应该如何与比我大很多的 PHP 程序员共处?

利益相关,现 iOS 码工,前 PL/SQL 码农,前 Ruby 码农。

回复内容:

可以很明确地说:是你们后端个人问题 1,json可以表示的类型:string,number,object,array,bool,null。
json格式本身无法区分int和float的。

2,php对数组的支持非常强大,php中的array就是当map来用的,不做区分。
json中表示空的{}比较绕,可以使用new stdClass() 或者 (object)array() 或者 (object)null

3,convention over configuration

跟你的同事好好沟通一下吧。既然是合作,相互都迁就一下吧。

不要把时间浪费在“谁的责任”上面,没必要。

如果对方实在无法沟通,那就跟上面反应。

不要因为个人情绪影响工作进度了。。 作为 PHPer 我曾经也质疑过客户端,我用标准 json 格式对你们来说很复杂么?非要所有东西都用 string 么?
所以这是人的问题。

1. 影响性能是扯淡
2. 空的数组用 [],空的哈希用 null,没有 value 的 key,取决于 value 的类型
3. 已经出过版本的 API,随随便便改名字是不对的。

与年龄大很多的同事相处没有什么特别的,对于这种同事,我一般是生活上尊敬他们,工作尽量不跟他们合作,非要合作那必须得听我的。 题主,看这个
在PHP语言中使用JSON
生成的json是可以有类型的 不管什么语言,生成 json 传到前端,都是以字符串的形式,基本都需要写一个 json2str(fake_json) 之类的东西,这里 fake_json 只要能被 json2str 应用就行了。

这个跟 php 还是其他什么语言内部的数据结构没半毛线关系。
只不过有的语言内部实现了,有的没有而已。即使官方没有做,只要是大众语言,一定有第三方做的。 碰到同样的问题了,我是做android,不懂php,后端是php,后端同事也不懂java,返回的数据如果传的参数不一致,结构不一样,比如字段res定义成返回一个对象{"name":"张三"},传其他参数,这个res可能就对应一个list了,这样android端就会异常,虽然通过捕获异常也能处理,但异常不是用来干这事的。个人认为应该是开始定义好,后面不要把类型变来变去的,对于这种情况,不知道怎么处理好。
  • 你在处理数据不知道他应该是什么类型,要依赖接口告诉你吗?如果你没存在服务器端,而用sqlite之类的本地数据库存在本地,sqlite是没有类型的,你找谁要类型?
  • 没有 value 的 key ,你不要就忽略它,continue费电吗?
  • “API 的字段名需要和数据库字段紧紧绑定”如果api字段和数据库字段是一致的,可维护性会好一点,你们现在知道两个名字不一样的字段其实是对应的,半年后可能就忘得精光了,接手维护的人可能需要费很多精力,所以遵循已有的命名规则没有什么可吐槽的。我没看懂人肉测试和API字段有什么关系。
Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn