番梘全接觸
Tagged as php, soapFebruary 20th, 2005 | by mk |
在最近一次簡報以後,見某位著重「Selling Point」,「流動性」的教員對我們的 project 不大感到興趣時,我們為了博君一笑,最後決定將其中一套次系統搬到流動平台上發展(說實點吧,將 PM 信箱寫成為 PPC 的程式)。用戶端不用說是 .NET 的了,M$ 東西還是要用 M$ 嘛。伺服器端還是用 PHP,那麼和網站的整合性便能提高了。可是,用甚麼協定溝通才傷腦筋呢。
最初構思使用自行製作的 XML 格式來接收,而使用HTTP GET 來傳送由用戶端傳來的指令。可是,每次也得要把一大堆變數放到 URL 裏,也很煩人的。後來想到當初 M$ 推廣的 Web Service (.NET 的大賣點啊),想著可以透過特定的 XML 格式(SOAP,Simple Object Access Protocol)和 HTTP Header 便能做到 RPC (Remote Procedure Call) 的效果,又不用自己寫程序解讀 SOAP 訊息,真方便呢。
.NET 已內置支援 SOAP,PHP 在三個方案的選擇下我挑了 NuSOAP (其餘為 SOAP extension 及 PEAR SOAP lib),因為它還有自動製作 WSDL(像 IDL 的東西,提供客戶端關於 web services 的設定及描述) 的功能,技術也較成熟,便選了它為 PHP 作 web service 提供時的工具。
現在,只要在 PHP code 裏加點東西,便能於其他支援 SOAP 的語言環境直接使用 PHP 寫的 function,很方便哩。或許有人會問到:為甚麼要那麼麻煩,全部用一款語言寫不就好了?
第一:安全問題。假使客戶端提取的資料要到資料庫提取,要是用寫在一起的方法,不得不把資料庫的密碼存到客戶端的程式裏。那麼用者只要看看傳輸數據,便可輕易得到密碼,從而直接進入資料庫……
第二:API 支援。某類 API 在某平台支援比較好,反而另外一些平台則較差甚至沒相關的 API。要是只能限定在支援少的平台作開發,不得不使用這種分散程序的方法。
第三:程式碼再用。要是原本有一套己寫好的程式,何必又去把程式碼翻成另一套語言呢?
說了那麼多,還是想說說這種分散編程的好處。要是到將來有對物件存取的支援便好了。