我是 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欄位有什麼關係。