Yii框架官方指南系列47—專題:Web Service
Web service 是一個軟體系統,設計來支援電腦之間跨網路相互存取。在Web應用程序,它通常用一套API,可以被互聯網存取和執行在遠端系統主機上的被請求服務。系統主機所要求的服務。例如,以Flex為基礎的用戶端可能會引用函數實作在伺服器端執行PHP的Web應用程式。 Web service依賴SOAP作為通訊協定堆疊的基礎層。
Yii提供CWebService和CWebServiceAction簡化了在Web應用程式實作Web service。這些API以類別形式實現,稱為service providers. Yii將為每個類別產生一個WSDL,描述什麼API有效和客戶端怎麼引用。當客戶端引用API,Yii將實例化對應的service provider和呼叫被請求的API來完成請求。
註: CWebService 依賴PHP SOAP extension 。請確定您是否在試用本節中的範例前允許此擴充。
1. Defining Service Provider(定義Service Provider)
正如我們上文所述,service provider是一個類別定義能被遠端引用的方法。 Yii依靠doc comment and class reflection識別 哪些方法可以被遠端呼叫和他們的參數還有回傳值。
讓我們以一個簡單的股票報價服務開始。這項服務允許客戶端請求指定股票的報價。我們確定service provider如下。請注意,我們定義擴充CController的提供類別StockController
。這是不是必需的。馬上我們將解釋為什麼這樣做。
class StockController extends CController { /** * @param string the symbol of the stock * @return float the stock price * @soap */ public function getPrice($symbol) { $prices=array('IBM'=>100, 'GOOGLE'=>350); return isset($prices[$symbol])?$prices[$symbol]:0; //...return stock price for $symbol } }
在上面的,我們透過在文件註解中的@soap
標籤聲明getPrice
方法為一個Web service API。依靠文檔註解指定輸入的參數資料類型和傳回值。其他的API可使用類似方式聲明。
2. Declaring Web Service Action(定義Web Service動作)
已經定義了service provider,我們使他能夠透過客戶端存取。特別是,我們要建立一個控制器動作暴露這個服務。可以做到這一點很容易,在控制器類別中定義一個CWebServiceAction動作。在我們的例子中,我們把它放在StockController
中。
class StockController extends CController { public function actions() { return array( 'quote'=>array( 'class'=>'CWebServiceAction', ), ); } /** * @param string the symbol of the stock * @return float the stock price * @soap */ public function getPrice($symbol) { //...return stock price for $symbol } }
這就是我們需要建立的Web service!如果我們嘗試存取 動作網址http://www.php.cn/
,我們將 看到很多XML內容,這實際上是我們定義的Web service的WSDL描述。
提示:在預設情況下, CWebServiceAction 假設目前的控制器 是service provider。這就是因為我們定義
getPrice
方法在StockController
中。
3. Consuming Web Service(消費Web Service)
要完成這個例子,讓我們建立一個客戶端來消費我們剛剛建立的Web service。範例中的客戶端用php寫的,但可以用別的語言寫,例如Java
, C#
, Flex
等等。
$client=new SoapClient('http://hostname/path/to/index.php?r=stock/quote'); echo $client->getPrice('GOOGLE');
在網頁中或控制台模式中運行以上腳本,我們將看到GOOGLE
的價格350
。
4. Data Types(資料型別)
當定義的方法和屬性被遠端訪問,我們需要指定輸入和輸出參數的資料類型。以下的原始資料型別可以使用:
str/string: 對應
xsd:string
;int/integer: 對應🜎5:int
float
;bool/boolean: 對應
xsd:boolean
;date: 對應
datetime:對應 - xsd:dateTime
;
array: 對應 - xsd:string
;
anyType - .
如果型別不屬於上述任何原始型別,它被視為複合型組成的屬性。複合型類型被看做類,他的屬性當做類的公有成員變量,在文檔註釋中被用 @soap - 標記。
在原始或 複合型類型的後面。這將定義指定類型的陣列。我們也可以使用數組類型透過附加
[] - 下面就是一個範例定義
getPosts
物件的陣列。網頁API,回傳一個
Post -
class PostController extends CController { /** * @return Post[] a list of posts * @soap */ public function getPosts() { return Post::model()->findAll(); } } class Post extends CActiveRecord { /** * @var integer post ID * @soap */ public $id; /** * @var string post title * @soap */ public $title; }
登入後複製
5. Class Mapping(類別映射)為了從客戶端得到複合型參數,應用程式需要定義從WSDL類型到對應PHP類的映射。這是透過設定CWebServiceAction的屬性classMap。
class PostController extends CController { public function actions() { return array( 'service'=>array( 'class'=>'CWebServiceAction', 'classMap'=>array( 'Post'=>'Post', // or simply 'Post' ), ), ); } ...... }
6. Intercepting Remote Method Invocation(攔截遠端方法呼叫)
透過實作IWebServiceProvider接口,sevice provider可以攔截遠端方法呼叫。在IWebServiceProvider::beforeWebMethod ,sevice provider可以獲得目前CWebService實例和透過CWebService::methodName請求的方法的名字 。它可以傳回假如果遠端方法出於某種原因不應被引用(例如:未經授權的存取) 。
以上就是Yii框架官方指南系列47-專題:Web Service的內容,更多相關內容請關注PHP中文網(www.php.cn)!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Yii是一款基於PHP的高效能MVC框架,它提供了非常豐富的工具和功能,支援快速、有效率地開發Web應用程式。其中,Yii框架的RESTfulAPI功能得到了越來越多開發者的關注和喜愛,因為使用Yii框架可以非常方便地構建出高性能、易擴展的RESTful接口,為Web應用的開發提供了強有力的支持。 RESTfulAPI簡介RESTfulAPI是一種基於

Yii框架中間件:為應用程式提供多重資料儲存支援介紹中間件(middleware)是Yii框架中的重要概念,它為應用程式提供了多重資料儲存支援。中間件的作用類似於一個過濾器,它能夠在應用程式的請求和回應之間插入自訂程式碼。透過中間件,我們可以對請求進行處理、驗證、過濾,然後將處理後的結果傳遞給下一個中間件或最終的處理程序。 Yii框架中的中間件使用起來非常

近年來,隨著遊戲產業的快速發展,越來越多的玩家開始尋找遊戲攻略來幫助遊戲過關。因此,創建遊戲攻略網站可以讓玩家更方便取得遊戲攻略,同時也能為玩家提供更好的遊戲體驗。在創建這樣一個網站時,我們可以使用Yii框架來進行開發。 Yii框架是一個基於PHP程式語言的Web應用開發框架。它具有高效、安全、擴展性強等特點,可以為我們更快速、高效地創建一個遊戲攻略

Yii框架中間件:為應用程式新增日誌記錄和偵錯功能【引言】在開發Web應用程式時,我們通常需要添加一些附加功能以提高應用程式的效能和穩定性。 Yii框架提供了中間件的概念,使我們能夠在應用程式處理請求之前和之後執行一些額外的任務。本文將介紹如何使用Yii框架的中間件功能來實作日誌記錄和除錯功能。 【什麼是中間件】中間件是指在應用程式處理請求之前和之後,對請求和回應做

使用Yii框架實現網頁快取和頁面分塊的步驟引言:在Web開發過程中,為了提升網站的效能和使用者體驗,常常需要對頁面進行快取和分塊處理。 Yii框架提供了強大的快取和佈局功能,可以幫助開發者快速實現網頁快取和頁面分塊,本文將介紹如何使用Yii框架進行網頁快取和頁面分塊的實作。一、網頁快取開啟網頁快取在Yii框架中,可以透過設定檔來開啟網頁快取。開啟主設定檔co

隨著Web應用程式的快速發展,現代Web開發已成為一項重要技能。許多框架和工具可用於開發高效的Web應用程序,其中Yii框架就是一個非常流行的框架。 Yii是一個高效能、基於元件的PHP框架,它採用了最新的設計模式和技術,提供了強大的工具和元件,是建立複雜Web應用程式的理想選擇。在本文中,我們將討論如何使用Yii框架來建立Web應用程式。安裝Yii框架首先,

在Yii框架中,控制器(Controllers)扮演著處理請求的重要角色。除了處理常規的頁面請求之外,控制器還可以用於處理Ajax請求。本文將介紹在Yii框架中處理Ajax請求的方法,並提供程式碼範例。在Yii框架中,處理Ajax請求可以透過以下步驟進行:第一步,建立一個控制器(Controller)類別。可以透過繼承Yii框架提供的基礎控制器類別yiiwebCo

在現代的Web應用程式開發中,調試工具是不可或缺的。它們可以幫助開發者找到和解決應用程式的各種問題。 Yii框架作為一款流行的Web應用程式框架,自然也提供了一些除錯工具。本文將重點介紹Yii框架中的調試工具,並討論它們如何幫助我們分析和調試應用程式。 GiiGii是Yii框架的程式碼產生器。它可以自動產生Yii應用程式的程式碼,如模型、控制器和視圖等。使用Gii,
