1、了解api
在使用與創建自己的API之前我們需要先了解什么是API!
API代表應用程序編程接口,而接口指的是一個特定的服務、一個應用程序或者其他程序的公共模塊。
理解SOA(面向服務的架構):
SOA是PHP應用程序日益普及的方法,它是基於一個服務層的系統,提供系統所需要的所有功能,但這個功能提供的是應用層,並未連接到表現層。這樣,多種系統就可以使用這個相同的模塊化、可重復使用的功能了。(備注:在學習API的時候看過的兩本有關API的書籍都有提到這個SOA,但是由於自己還是個菜鳥所以對這個理解不太深。所以對於以上SOA的含義摘抄於PHP精粹-編寫高效PHP代碼(美))
在使用api是涉及到一個重要的問題是傳輸的數據格式:在API數據傳輸中主要使用XML與Json數據格式。在這就不對這兩個數據格式展開講解了。
使用的協議時HTTP超文本傳輸協議。所謂的訪問API簡單的來說就是客戶端通過HTTP來訪問服務器已定義好的程序,再進一步理解就是使用編程代碼通過HTTP請求API獲得自己所需要的數據。看如下簡單過程圖:

2、理解服務類型
RPC:即Remote ProcedureCall遠程調用過程,RPC服務也就是調用遠程的函數並返回需要的數據(大多數時候需要傳入參數,視API而定)。RPC主要分為XML-RPC和Json-RPC。
SOAP:即Simple Object Access Protocol簡單對象訪問協議,SOAP是嚴格定義的XML-RPC。我們通常使用WSDL(Web服務描述語言)文檔描述SOAP服務(即描述服務所提供的方法地址等等的信息)。在很多語言中包括PHP都有內置的類庫,可以很容易就可以處理SOAP,創建與使用SOAP服務。
REST:REST不是一個協議,它沒有嚴格定義的接口與數據格式,更像一套設計原則。REST將所有的一切都視為資源,通過客戶端發送HTTP動詞到相應的URL從而實現資源的調動。
3、各種服務的簡單實例
PHP與SOAP
簡單介紹:
PHP中含有SOAP擴展這樣方便我們建立與使用SOAP類型的API。其中SOAP分為WSDL類型SOAP與非WSDL類型SOAP,在現如今大多數使用的的SOAP是含有WSDL的。個人對與這兩種的理解是:含WSDL是標准類型的,因為WSDL使用了XML標准語法對你提供的方法類進行了描述(描述服務)。
由於PHP中沒有將方法類生成WSDL文件的功能函數,因此我們需要借助別的工具將WSDL文件搞出來。(講解WSDL類型時再介紹)
server: public SoapServer::__construct ( mixed $wsdl [, array $options ] )
參數:第一個參數為必要參數,如果為WSDL類型的SOAP則填入WSDL的地址(可以是相對地址或者Web地址)
其他參數包括:uri(命名空間)、location(服務器所在地址)、encoding(設置編碼)、soap_version(設置soap服務版本 SOAP_1_1 or SOAP_1_2),其中前兩個在非WSDL中為必要參數
Client: public SoapClient::SoapClient ( mixed $wsdl [, array $options ] )
參數:第一個為必要參數
此擴展詳細介紹可看官方手冊:http://php.net/manual/en/book.soap.php
1、先從簡單的無WSDL入手
首先建立服務方法類即:WebService.class.php
1 <?php 2 class WebService 3 { 4 public function test() 5 { 6 return 'WebService: test'; 7 } 8 }
其次在建立Server.php提供訪問入口
1 <?php 2 include_once './WebService.class.php'; 3 $options=array('uri'=>'', 'location'=>'' ); 4 $server=new SoapServer(NULL,$options); 5 $server->setClass('WebService'); #填寫類名 6 $server->handle();
最后訪問:Client.php
1 <?php 2 $options=array( 3 'uri'=>'', 4 'location'=>'http://www.test99.com/nowsdl/Server.php', 5 ); 6 $client=new SoapClient(NULL,$options); 7 echo $client->test();
訪問結果:

小結:通過各種組合測試發現,不管SoapServer還是SoapClient中的參數options,對於非WSDL來說:1、uri是必須的(即使為空)2、SoapServer中的location可有可無都可以,而SoapClient的location為必要的,而且不能為空(客戶端空過此數據來定位API)
(以上是自己的一些見解,若有不足或者錯誤請各位指出)
如果您覺得本文對你有用,不妨幫忙點個贊,或者在評論里給我一句贊美,小小成就都是今后繼續為大家編寫優質文章的動力,流雲拜謝! 歡迎您持續關注我的博客:
作者:那一葉隨風
博客地址:http://www.cnblogs.com/phpstudy2015-6/p/6156055.html
聲明:本博客文章為原創,只代表本人在工作學習中某一時間內總結的觀點或結論。非商業,未授權貼子請以現狀保留,轉載時必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。
