標籤:檔案 method roc 定位 url 資料 call 簡單 方便
瞭解API:
在使用與建立自己的API之前我們需要先瞭解什麼是API!
API代表API,而介面指的是一個特定的服務、一個應用程式或者其他程式的公用模組。
理解SOA(面向服務的架構):SOA是PHP應用程式日益普及的方法,它是基於一個服務層的系統,提供系統所需要的所有功能,但這個功能提供的是應用程式層,並未串連到表現層。這樣,多種系統就可以使用這個相同的模組化、可重複使用的功能了。(備忘:在學習API的時候看過的兩本有關API的書籍都有提到這個SOA,但是由於自己還是個菜鳥所以對這個理解不太深。所以對於以上SOA的含義摘抄於PHP精粹-編寫高效PHP代碼(美))
在使用api是涉及到一個重要的問題是傳輸的資料格式:在API資料轉送中主要使用XML與Json資料格式。在這就不對這兩個資料格式展開講解了。
使用的協議時HTTP超文字傳輸通訊協定 (HTTP)。所謂的訪問API簡單的來說就是用戶端通過HTTP來訪問伺服器已定義好的程式,再進一步理解就是使用編程代碼通過HTTP請求API獲得自己所需要的資料。看如下簡單過程圖:
理解服務類型:
RPC:即Remote ProcedureCall遠程調用過程,RPC服務也就是調用遠端函數並返回需要的資料(大多數時候需要傳入參數,視API而定)。RPC主要分為XML-RPC和Json- RPC。
SOAP:即Simple Object Access Protocol簡易物件存取通訊協定 (SOAP),SOAP是嚴格定義的XML-RPC。我們通常使用WSDL(Web服務描述語言)文檔描述SOAP服務(即描述服務所 提供的方法地址等等的資訊)。在很多語言中包括PHP都有內建的類庫,可以很容易就可以處理SOAP,建立與使用SOAP服務。
REST:REST不是一個協議,它沒有嚴格定義的介面與資料格式,更像一套設計原則。REST將所有的一切都視為資源,通過用戶端發送HTTP動詞到相應的URL從而實現資源的調 動。
各種服務的簡單一實例:
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 <?php2 class WebService3 {4 public function test()5 {6 return ‘WebService: test‘;7 }8 }
其次在建立Server.php提供訪問入口
1 <?php2 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 <?php2 $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)
(以上是自己的一些見解,若有不足或者錯誤請各位指出)
PHP與API講解(一)