SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

SQLも使えるオブジェクトデータベース「CACHE'」を知る(AD)

第10回 CACHÉによるWebサービスの概要

SQLも使えるオブジェクトデータベース「CACHE'」を知る 10

  • X ポスト
  • このエントリーをはてなブックマークに追加

今回は、Cache'によるWebサービスの概要を説明します。SOAPプロトコルによる関連メソッドの集合であるWebサービスは、プラットフォームの違いを越えたデータのやりとりを実現する手段です。 Cache'では、SOAPの完全サポートを提供しています。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 今回は、CachéによるWebサービスの概要を説明します。SOAP(Simple Object Access Protocol)プロトコルによる関連メソッドの集合であるWebサービスは、プラットフォームの違いを越えたデータのやりとりを実現する手段です。Cachéでは、SOAPの完全サポートを提供しています。Cachéは、Webサービスのサービスを生成する機能(Webサービスプロバイダ)と、Webサービスのクライアントインタフェースを生成する機能(Webサービスコンシューマ)の両方を提供します。

対象読者

  • アプリケーション・システム開発をしている人
  • データベース関連の開発およびメンテナンスをしている人
  • JavaやC#でプログラミングしている人

CACHÉのWebサービスとは

 Cachéでは、WebサービスはCaché SOAPサーバにより実現されます。CSPゲートウェイ経由でSOAP要求を受けとったCaché SOAPサーバは、開封したメッセージの検証後、すべての入力パラメータをCachéに適合する表記に変換し、指定されたWebメソッドを呼び出します。

CACHÉによるWebサービスの作成方法

 CachéにはWebサービスのサポートが組み込まれているため、追加のミドルウェアなどは必要ありません。「WebMethod」としてタグ付けしたメソッドを含めてCachéクラスを作成すれば、自動的にWebサービスクラスとして使用可能となります。このWebサービスクラス作成には、Cachéスタジオに用意されている「Webサービスウィザード」を利用すれば、パラメータの設定なども対話式で行えます。

Webサービスクラスのパラメータ

 CachéによるWebサービスは、すべて%SOAP.WebServiceクラスのサブクラスによって定義されます。この%SOAP.WebServiceベースのクラスは、SOAPプロトコル経由で呼び出すメソッド作成に必要な機能をすべて提供しています。また、このクラスはSOAPに関連する「ブックキーピング」(サービスについて説明しているWSDLのドキュメントの保持など)の管理も自動化します。このクラスには、Webサービスの特性を指定する次表のようなパラメータがあります。

Webサービスのパラメータ
パラメータ 説明
NAMESPACE ユーザーのWebサービスのネームスペースを定義するのに使用するURI。既定では、開発時に一時的に使う「http://tempuri.org」に設定されているので、実行時には変更する必要ある。
SERVICENAME Webサービスの名前。この名前は有効な識別子である必要がある(英数字のみ。1文字目は英字でなければならない)。

Webサービスウィザードの実行例

 さっそくCachéスタジオを利用して、新規Webサービスを生成させてみましょう。まず、次の手順で新規のWebサービスクラスを作成します。

  1. Cachéスタジオの[ファイル]メニューから[新規]を選択して、[新規作成]ダイアログを表示させます。
  2.  
  3. ダイアログの[カスタム]タブにある[Web Service]を選択して、[OK]ボタンを押します。
  4.  
  5. 表示された[Cachéウェブサービスウィザード](次図)で、パッケージ名、クラス名のほか、上表にある2つのパラメータを指定します。
  6.  
    Cache'ウェブサービスウィザード
    Cache'ウェブサービスウィザード
     
    ここでは次のように指定してみましょう。
     
    [パッケージ名] 「MyApp」(デフォルト)
    [クラス名] 「StockService」
    [サービス名] 「MyStockService」
    [サービスネームスペース] 「http://tempuri.org」(デフォルト)
    [サービスメソッド] 「Test」(デフォルト)
     

 [OK]ボタンを押すと、次のような新規Webサービスクラス「MyApp.StockService.cls」が作成されます。

作成された新規Webサービスクラス
作成された新規Webサービスクラス

 この図の[ WebMethod ]と示された箇所に、クラスメソッドを記述します。例を挙げて説明していきましょう。

Webメソッドの定義例

 先ほどのウィザードでは、[サービスメソッド]をデフォルトのままにしていましたが、そのデフォルト値である「Test」メソッドの箇所を次のように変えてみましょう。

/// TODO: 引数および実装を追加します。
/// Forecast
ClassMethod Forecast(StockName As %String) As %Integer [WebMethod]
{
    Set price = $Random(1000)
    Quit price
}

 コンパイルすると、「Forecast」というメソッドを含む「MyStockService」というWebサービスが発行されます。Webメソッドには、データベースアクセス、埋め込みのSQLクエリ、オブジェクトアクセスなど、あらゆる実装コードが使用できます。制約条件としては、非リテラルの入力パラメータや返り値に関してのみ、XML対応のクラス(スーパークラス)として%XML.Adaptorを含めなければなりません。

 単純なリテラルではCachéデータ型クラスを使用して表します。例えば2つの整数の入力値を持ち、文字列を返すWebメソッドは、次のように定義します。

ClassMethod MyMethod(p1 As %Integer,p2 As %Integer) As %String [WebMethod]
{
    Quit "A string"
}

 それに対して非リテラルの場合は、非データ型のXML対応Cachéクラスとしなければなりません。例えば2つの複雑な数字の入力値を持ち、複雑な数字を返すWebメソッドは、次のように定義します。

ClassMethod Add(a As ComplexNumber,b As ComplexNumber) As ComplexNumber [WebMethod]
{
    Set sum = ##class(ComplexNumber).%New()
    Set sum.Real = a.Real + b.Real
    Set sum.Imaginary = a.Imaginary + b.Imaginary
    Quit sum
}

/// A complex number
Class MyApp.ComplexNumber Extends (%RegisteredObject,%XML.Adaptor)
{
    Property Real As %Float;
    Property Imaginary As %Float;
}

ブラウザによるWebサービスの利用法

 CachéのWebサービスは、すべて、単純なHTTPベースのインターフェイスを自動的に提供します。各Webサービスクラスは、%SOAP.WebServiceクラスから派生し、その%SOAP.WebService%CSP.Pageから派生します。それゆえに、すべてのWebサービスクラスは、CSP経由のHTTP要求に応答できることになります。

 %SOAP.WebServiceクラスは、HTTP要求に応答するメソッドを実装し、次の3つを実行します。

1. HTML形式で、Webサービスとメソッドについて説明するカタログページを発行

 特定のカタログページを表示させるには、対応するWebサービスクラスのURLを使います。例えば、MyApp.StockServiceがUSERネームスペース内に定義されているのであれば、「http://localhost:57772/csp/user/MyApp.StockService.cls」とします。

 次図は、Cachéのサンプルカタログページです。

サンプルカタログページ(http://localhost:57772/csp/samples/SOAP.Demo.cls)
サンプルカタログページ(http://localhost:57772/csp/samples/SOAP.Demo.cls)

2. XMLドキュメントとして、WebサービスのWSDL(Webサービス記述言語)ドキュメントを発行

 特定のWSDLドキュメントを表示させるには、対応するWebサービスクラスのURLのパラメータリストに「WSDL」を付けます。例えば、WebサービスクラスがMyApp.StockServiceの場合は、「http://localhost:57772/csp/user/MyApp.StockService.cls?WSDL」とします。

 次図は、CachéのサンプルWSDLドキュメントです。

サンプルWSDLドキュメント(http://localhost:57772/csp/samples/SOAP.Demo.cls?WSDL)
サンプルWSDLドキュメント(http://localhost:57772/csp/samples/SOAP.Demo.cls?WSDL)

3. WebメソッドのHTMLベースのテストページを発行

 特定のWebメソッドのテストページを表示させるには、対応するWebサービスクラスのURLのあとに「/(メソッド名)」を付けます。例えば、WebサービスクラスがMyApp.StockServiceで、表示させたいメソッドがForecastの場合は、「http://localhost:57772/csp/user/MyApp.StockService.cls/Forecast」とします。

 次図は、Cachéのサンプルメソッド「FindPerson」のテストページです。

サンプルメソッド「FindPerson」のテストページ
サンプルメソッド「FindPerson」のテストページ

次のページ
CACHÉによるWebサービスクライアントの作成方法

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
SQLも使えるオブジェクトデータベース「CACHE'」を知る連載記事一覧

もっと読む

この記事の著者

トップスタジオ(トップスタジオ)

1997年の創立以来、一貫してPC/IT関連書籍、雑誌等記事の制作業務を手掛けるプロフェッショナル集団。翻訳・編集・DTPのほか、技術監修や著作も多数。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2154 2008/09/04 18:50

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング