Webサービスの基本的な例題
データ型:Echo
Webサービスでは簡単な文字列ではなくデータを使うことが要求されることが多い.このデータは,整数や実数のような単純なものでもよい.しかし,データはこれより複雑であり,単純なデータ型の組合せであることがよくある.ここの例では異なるデータ型の使用方法を示す.
例題のそれぞれで,Webサービスにより使用されるデータ型を決定するために使用法メッセージを使用することができる.
単純なデータ型
単純なデータ型は,Web Services Link で使用する最も簡単なデータ型である.Wolfram言語ユーザはシンボルString,Integer,Real,True,Falseになじみがなければならない.これらのそれぞれはWebサービス関数で使用することができる.
以下はTrueをWebサービスで使用する例である.
次はStringをWebサービスで使用する例である.
次はIntegerをWebサービスで使用する例である.
次はRealをWebサービスで使用する例である.
非標準の単純データ型
Web Services Link はWebサービスのXML Schemaにマップすることのできるデータ型をいくつか提供している.SchemaDate,SchemaTime,SchemaDateTime,SchemaExpr,SchemaMathML,SchemaBase64BinaryはそれぞれWebサービスで使用できる単純なデータ型である.
以下はSchemaDateをWebサービスで使用する例である.
以下はSchemaTimeをWebサービスで使用する例である.
次はSchemaDateTimeをWebサービスで使用する例である.
SchemaExpr,SchemaMathML,SchemaBase64Binaryの例は次のセクションで説明する.
複合データ型
Web Services Link は複合データ型を構築するために使用されるシンボルを生成する.複合データ型とは,単純なデータ型および/または複合データ型のインスタンスを含むWolfram言語式である.複合データ型はデータ型を表現するシンボルをWolfram言語式の頭部として使用してWolfram言語で生成される.データ型の数は式のボディーの規則を使って表される.規則の左辺はデータ型のメンバの名前を指定する.右辺はメンバの値を指定する.値は単純値でも複合値でもよい.
NewSchemaInstanceはDatumのインスタンスを生成するために使用することができる.
ReplaceSchemaInstanceValueは複合データ型の値を設定するために使用することができる.
配列
Web Services Link はListを使って配列をサポートする.配列を使用するためには,配列により定義されたデータ型により完全に構成されているWolfram言語のListを使うだけでよい.
以下は単純なデータ型の配列を使用するWebサービスの例である.
画像:プロット
文字列はWebサービス内部でグラフィックスを伝達する自然な方法である.そのインテグリティを確実にするために,バイナリデータはbase64で符号化される.ここの例では,バイナリデータ型の使い方を示す.
Plotの例では,PlotStringはパラメータとして文字列と整数を取り,base64バイナリ文字列を返す.この関数は文字列をWolfram言語式に変換し,0から整数により指定された極限までの の関数としてこれをプロットする.サービスはSchemaBase64Binaryの頭部にラップされたbase64バイナリバイトのリストを返す.この頭部はこのデータをbase64バイナリとして見付けるために使われる.FromCharacterCodeはbase64バイナリデータをGIFデータからなる文字列に複合化するために使うことができる.この文字列はImportStringでGIFにインポートすることができる.
数学データ:積分
Web Services Link は文字列,タイプセット画像,MathML,Wolfram言語式を使って数学データをサポートする.ここでは数学データを使う例を見る.
文字列
数学データは文字列内でWolfram言語式を使うことによりWebサービスで使用することができる.文字列のデータ型は,数学データの通信に対する制約を持つ.その一つに,一次元であるということがある.データを表すのにInputFormかFullFormを使うと,その表現に関する情報がない場合がある.また,すべてのWebサービスが文字列をサポートする一方,そのすべてが文字列からWolfram言語式をパースすることをサポートするとは限らない.しかし,Webサービスに文字列を送ることは,最も高度なものでないとしても,数学データと通信する最も簡単な方法である.
Web Services Link は文字列を取らないので,自動的にそれをWolfram言語式に変換する.これはすべての文字列が必ずしもWolfram言語式ではないからである.
しかし,これはWolfram言語なので,結果は簡単に式に変換することができる.
タイプセット画像
数学データは画像を使うことによりWebサービスで示すことができる.画像には数学データと通信するための大きな制約が一つある.画像は簡単には操作したり処理したりできないのである.つまり,データは視覚的以外に画像から簡単に取り出すことができず,変更したり更新したりすることが簡単にはできない.しかし,タイプセット式は画像と同じだけのシステムではサポートされていないので,画像は便利なことが多い.したがってタイプセット式の画像を生成することは,それをサポートしていないシステム上でタイプセット式を提示するよい方法である.
次の例は数学データと通信するために画像を使うことを示している.サービスはSchemaBase64Binaryの頭部にラップしたbase64バイナリバイトのリストを返す.この頭部はこのデータをbase64バイナリとして識別するために使われる.FromCharacterCodeはbase64バイナリデータをGIFデータからなる文字列に複合化するために使うことができる.この文字列はImportStringでGIFにインポートすることができる.
Wolfram言語式
数学データはWolfram言語式を使ってWebサービスで表すことができる.式とはデータをWolfram言語でどのように表現するかということである.式は文字列や画像の制約のいくつかを回避する.しかし,式には自己の制約があり,その最たるものは式はすべてのシステムでサポートされるわけではないということである.しかし,式はWolfram言語で数学データを使うための標準であるので,他のWolfram言語システムとの相互作用には非常に有用となる可能性がある.
次の例はWolfram言語式を使い数学データと通信するものである.サービスはSchemaExprの頭部にラップした式を返す.この頭部は次のデータを式として認定するために使われる.
Web Services Link はWolfram言語式をWebサービスメッセージ内でExpressionMLとして変換する.ExpressionMLは自動的に式に変換される.
MathML
数学データはMathMLを使ってWebサービスで表すことができる.MathMLはシステムすべてで数学データを表現するための標準である.MathMLは文字列や画像が持つ制約のいくつかを回避する.しかしMathMLにはそれ自身の制約がいくつかあり,その最たるものは,すべてのシステムではサポートされないということである.別の制約にはその複雑性がある.MathMLはInputFormのようなものよりも見にくい.しかし,MathMLはWolfram言語外部で数学データを使用する際の標準であるので,Wolfram言語を使用しない他のシステムとの相互作用には非常に便利かもしれない.
次はMathMLを使って数学データと通信する例である.サービスはSchemaMathMLの頭部でラップされた記号的なMathMLを返す.これはデータをMathMLとして同定するのに使われる.
Web Services Link はMathML式を取らないので,それを自動的にWolfram言語式に変換する.なぜならすべてのMathMLインスタンスがWolfram言語式で必ずしもサポートされているとは限らないからである.しかし,これはWolfram言語なので,結果は簡単に式に変換することができる.
SOAPヘッダ
SOAPヘッダは,WebサービスがSOAPメッセージのボディとは別にメタデータを処理することを可能にするので,Webサービスにとって重要なコンポーネントである.ボディには,起動されるWebサービス操作に直接関連する情報が含まれる.しかし,ヘッダにはいくつのWebサービス操作にも使われる一般的なコンテンツを含むことができる.たとえば,ヘッダにはユーザ名とパスワードを含むことができる.ヘッダにユーザ名とパスワードを含ませておくと,ボディについて何も知る必要なく別のコンポーネントがユーザ名とパスワードを処理することができて便利である.
Web Services Link は操作の関数シグネチャの一部としてヘッダを含むことによりヘッダをサポートする.したがって,それは操作の他のパラメータのように見える.ユーザ名とパスワードをヘッダとして定義している2つの文字列が操作で必要とされる場合,これらの2つの文字列はこの関数を呼び出すときに想定される.
セッション
Webサービスの複数の呼出しに渡りユーザデータを保持するために,Webサービスではセッションが使われる.たとえば,セッションはユーザの設定,データ,その他の事項を保存するために使うことができる.セッションは Web Services Link でサポートされる.しかし,特別な関数やオプションはない.Webサービスがセッションを使用する操作を提供する場合,セッションはJavaクライアントにより使用されなければならない.
以下はセッションを使用する例である.この例では,ユーザが何回操作にアクセスしたかが返される.
GetAccessesへの追加の呼出しではカウンタの値が大きくなる.
認証
ユーザを確認するために,いくつかのWebサービスでは認証が使われる.これはHTTPにより提供される機能に基づいている.ダイジェスト認証と基本認証がサポートされている.ユーザはUsernameオプションとPasswordオプションを使ってユーザ名とパスワードを設定することができる.これらは任意のWebサービス関数に渡し,認証に使用することができる.
HTTP認証はURLの補助的呼び出しのために再使用される.ユーザ名とパスワードはメモリに保存され,Java仮想マシンがシャットダウンするたびに必要とされる.
タイムアウト
Webサービス操作を呼び出すときはタイムアウトが必要となることがある.これはTimeoutオプションを使って設定することができる.これはどのWebサービス関数にも渡すことができる.オプションの値はミリ秒でタイムアウトを指定する正の整数でなければならない.