我是 iOS 码工,之没有和 PHP 程序员合作过。目前的 PHP 程序员向我抛出了很多问题,我表示很震惊。但是以前合作过的其它语言的程序员没有这些问题。我自己无法判定,所以要请教大家。
- 因为 PHP 是弱类型语言并且 PHP 从数据库取出来的数据都是字符串,所以给我返回的 JSON里面无论 int/float/map 都是 string 类型。如果要转为正确的类型,会很麻烦而且影响性能。PHP 是弱类型语言,保证格式正确会很难做。
- 我对此不认同,对应到 Java/Ruby 都有成熟的 ORM 框架解决问题,我不大相信 PHP 解决这些问题会很棘手。我找了几个 PHP 框架,比如 http://laravel.com/docs/4.2/eloquent#introduction 不过某不用
- 因为 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字段有什么关系。
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn