ネットワーク越しに、マシン同士の相互運用性をサポートする仕組みのことです。リモートホストから呼び出して利用できるAPI群をウェブサービスと呼びます。Flex-basedクライアントはサーバで動いている、PHPのウェブアプリケーションに実装された関数を呼び出すことがあります。ウェブアプリケーションでウェブサービスを提供する作業を簡単にします。APIはサービスプロバイダと呼ばれるクラス群にまとめられます。どのAPIが利用可能で、どのように呼び出すことができるのかを記述します。要求されたAPIを実行することで、リクエストを完了します。このセクションの例を実行する前に拡張が有効になっていることを確認して下さい。上で述べたように、サービスプロバイダとはリモートから呼び出し可能なメソッドを定義するクラスのことです。どのメソッドがリモートから呼び出し可能であり、どのような引数をとり、そしてどのような返り値を返すのかを決定します。単純な株価情報サービスからはじめましょう。このサービスではクライアントが株価情報を要求できます。サービスプロバイダを以下のほうに定義します。CControllerのサブクラスとして定義していることに注意してください。これは必須ではありませんが、後ほどなぜこうするのか理由を説明します。ウェブサービスAPIにしています。コメントによって引数のデータタイプと返り値も決まります。追加のAPIも同じ方法で宣言できます。¶サービスプロバイダを定義したので、クライアントから呼び出し可能にする必要があります。今回の例では、コントローラのアクションをサービスとして公開したいと思います。これはコントローラで、CWebServiceActionアクションを宣言することで容易に実現可能です。サンプルコードではStockControllerに追加します。今定義したウェブサービスのWSDLを表すXMLが表示されます。サービスプロバイダとみなします。これがgetPriceメソッドをStockControllerクラスに定義した理由です。¶この例を完成させるために、できたばかりのウェブサービスを利用するクライアントを作ってみましょう。Flexなどのその他の言語で書くこともできます。$client->getPrice('GOOGLE');このスクリプトをブラウザか、コンソールで実行します。結果として、GOOGLEの株価350が表示されます。入出力パラメータのデータ型を決める必要があります。以下のような基本データ型が利用可能です。xsd:anyTypeに対応します.上記の基本型に当てはまらない場合は、複数の属性からなる複合型とみなされます。複合型はクラスで表されます。コメントで@soapマークがついたものになります。つけることで配列を使うこともできます。これは特定の型の配列を示します。以下はPostオブジェクトの配列を返すgetPostsウェブAPIの例です。WSDL型からPHPクラスへの対応を宣言する必要があります。リモートからのメソッド呼び出しを、実行前に横取りすることができます。CWebService::methodNameによって、リクエストされたメソッド名を得ることができます。返すことで実行を中断できます。