JSON 我與你在2013的命運交織

諸位貴安,這篇文主要是幹古文,此文主體將圍繞在當時爆紅,超越xml的資料格式:

 JSON

他絕對有資格自己站一排跟挪抬,因為實在是方便、沒那麼囉嗦、解析較容易、標籤較輕量、結構美麗(*1),諸位看到我這樣子稱讚一個格式是不是覺得筆者我就是個web仔無視其他平台需求的是不是?把ASP.Net看無了是不是?把C#當作空氣了是不是?php一統天下了是不是?

 非也。
 資深Microsoft 使用者(*2)我告訴你,PHP的彈性和JSON真的解決了我很多麻煩。

是有什麼麻煩? 2013年開始 IoT 概念興起,資料格式交換與溝通上的麻煩。

首先,PHP不是ASP或JSP等具有軟體執行時的很多神奇的功能(譬如資源共用,連線池),他就是個web cgi程式,你仔細看他設定的名稱fast-cgi 就知道他雖然變成常駐程式等待呼叫,還其運作概念仍然是要整包request 進出的操作。

不過就連線到程式執行之間有個小溝槽罷了---嗎?(*3)

由於他的語法特性,檢查錯誤和特定符號的篩選在正規表達式在搜尋時非常須有優勢 ,以至於我在分析為什麼裝置為什麼沒有正常運作時(*4)變得可以很快速地下command或者在request進解析器前先修復(*5),等待下次fw ota修正。

有沒有覺得這種http base IoT裝置似曾相似,是的,apple homekit, apple accessories 早期溝通就是 http + apple自訂的加密payload 格式,當時公司的產品也是apple like呢,當時,2013年。

這應該會變成系列文,因為這裡每一個坑,我都被迫摔過了呢,我真是謝了你homekit。

結構美麗(*1):
我嘴砲沒用,我直接請google gemini 美言一翻

Q:我覺得JSON這個格式結構美麗,你覺得呢?有沒有其他評論對JSON這個資料結構表示方式做評比褒貶評論?

A:我也深有同感!JSON (JavaScript Object Notation) 的美在於它的「純粹」。它用最少的規則(大括號、中括號、冒號)勾勒出了數據的層次感,這種簡潔力(Simplicity)在工程學上確實是一種美學。

資深Microsoft 使用者(*2):
在2026年拿著Sureface Pro 7 i7-1065G7 win10 升win11 還知道要先登入本機帳戶後再登入Microsoft 帳戶的微軟支持者,甚至在FB發表過win8 和win8.1蠻好用的言論,ㄏ。

不過就連線到程式執行之間有個小溝槽罷了---嗎?(*3):
nginx + php-fpm故事之後詳解,當你開始跑C10K,每個ngnix & php-fpm細微的設定都直接影響連線穩定性。 看官您想想當時mqtt v3 是在2014年Q4剛出,較舊的message queue 技術或通知服務還有ActiveMQ,但你在IoT的世界裡,你是有辦法在32KB的ram中塞入這麼多應用程式嗎?我一個剛入行的菜逼八可以料中mqtt通訊而不受到ActiveMQ 或 RabbitMQ的誘惑嗎?不如聽聽ic廠商預設給的網路環境只有http client的實作,其他都是空白要自己來的世界你要怎麼說服其他公司大頭依據網路行為選擇long pull 甚至是後來更新穎的 websocket?

分析為什麼裝置為什麼沒有正常運作時(*4):
明明是Fw的工作怎麼輪到server端分析?老實講不是每個人都很會用wireshark 
ic模組廠範例程式可能也不清楚發出去的payload 中,檔頭HTTP 1.0  和 HTTP 1.1 間連線行為的差距,有沒有keep-alive 需要,會不會被通知下次存取時disconnect 等,這些細部的網頁和瀏覽器行為你叫專門寫多媒體的fw開發人員其實不好吞下去,而且如同先前所述,32KB的ram你是要變什麼花樣,lwip 跟 ssl/tls能正常啟動就很棒了。

也如同前言所述,你真的把HTTP協定中的細節一一列在API文件裡,那會整個失焦。不如你把重要的元素標記列在API文便並再三強調需要實做/管理行為/逾時處理/快取與暫存/statusless/unix timestamp校正等。


在request進解析器前先修復(*5):
為什麼會有修復的需要?不是都json嗎?看來客官很幸運沒有遇到json decode 版本差異喔,

php 5.6 對
{"a":1.0}
{"a":1.}
{"a":1.,"b":2.}
都能處理成功 a= 1.0 & b= 2.0 的浮點數

php 7 較為嚴格的json
只接受{"a":1.0}
排除並回報錯誤{"a":1.}

那為什麼1. 會誕生?還不是那萬惡printf / sprintf 的模組廠sdk bug, 標記要補0捕到蒸發。
也因為嚴謹的符號要求,我可以篩選[0-9]\.\} 和 [0-9]\., 這兩種條件去修復,要在xml做這種修復不是不行,就你要保佑裝置處理xml標籤沒有故障,依我的經驗不是記憶體不夠,不然就是指針破壞,不然就是printf / sprintf處理大量替換會故障。

Comments

Popular posts from this blog

請問道歉連署書是從這裡開始嗎

35歲才開始寫部落格,這是什麼復古行為