この文を使用すると、データベース・サーバは Web サーバとして動作します。
CREATE SERVICE service-name TYPE 'DISH' [ GROUP { group-name | NULL } ] [ FORMAT { 'DNET' | 'CONCRETE' [ EXPLICIT { ON | OFF } ] | 'XML' | NULL } ] [ common-attributes ]
CREATE SERVICE service-name TYPE 'SOAP' [ DATATYPE { ON | OFF | IN | OUT } ] [ FORMAT { 'DNET' | 'CONCRETE' [ EXPLICIT { ON | OFF } ] | 'XML' | NULL } ] [ common-attributes ] AS statement
CREATE SERVICE service-name TYPE { 'RAW' | 'HTML' | 'JSON' | 'XML' } [ URL [ PATH ] { ON | OFF | ELEMENTS } ] [ common-attributes ] [ AS { statement | NULL } ]
common-attributes: [ AUTHORIZATION { ON | OFF } ] [ ENABLE | DISABLE ] [ METHODS 'method,...' ] [ SECURE { ON | OFF } ] [ USER { user-name | NULL } ]
method: DEFAULT | POST | GET | HEAD | PUT | DELETE | NONE | *
service-name Web サービス名に使用できるのは、任意の順序の英数字文字、または /、-、_、.、!、~、*、'、(、) です。ただし、スラッシュ (/) は、先頭の文字には使用できず、また 2 つ以上連続して使用することもできません。
他のサービスとは異なり、DISH サービス名にフォワード・スラッシュ (/) を指定することはできません。
TYPE 句 返される結果セットによってサービスのタイプを示します。リストされたサービス・タイプのいずれかを指定します。デフォルト値はありません。
'SOAP' 結果セットは、SOAP 応答として返されます。データのフォーマットは、FORMAT 句によって決定されます。SOAP サービスへの要求は、単純な HTTP 要求ではなく有効な SOAP 要求である必要があります。SOAP 規格の詳細については、 http://www.w3.org/TR/2000/NOTE-SOAP-20000508/ を参照してください。
'DISH' DISH サービス (SOAP ハンドラを決定) は、GROUP 句で識別される SOAP サービスのプロキシとして機能し、要求時にこれらの各 SOAP サービスに対して WSDL (Web Services Description Language) を生成します。
'RAW' 結果セットがフォーマットされずにクライアントに送られます。要求されたタグをプロシージャ内で明示的に生成することによって、フォーマットされた文書を作成できます。TYPE 'RAW' のサービスを作成する場合は、sa_set_http_header を使用して HTTP ヘッダ Content-Type を設定する必要があります。そうしないと、一部のブラウザで内容がプレーン・テキストとして表示されます。HTML ドキュメントを提供するプロシージャの使用とsa_set_http_header システム・プロシージャを参照してください。
'HTML' 文またはプロシージャの結果セットは、テーブルを格納する HTML ドキュメントに自動的にフォーマットされます。
'JSON' 結果セットは JavaScript Object Notation (JSON) で返されます。JSON Web サービスは、「一般的な」HTTP 要求を受け入れるという点で XML Web サービスに似ています (つまり、要求には SOAP
Web サービスのように特殊な形式の本文を含める必要はありません)。JSON の詳細については、 http://www.json.org を参照してください。
'XML' 結果セットは XML として返されます。結果セットがすでに XML の場合、それ以上フォーマットは適用されません。XML 以外の場合は、自動的に XML としてフォーマットされます。効果は、SELECT 文で FOR XML RAW 句を使用した場合と同様です。
GROUP 句 DISH サービスにだけ適用されます。DISH サービスがどの SOAP サービスを公開するかを制御する共通プレフィクスを指定します。たとえば、GROUP xyz を指定すると、SOAP サービス xyz/aaaa、xyz/bbbb、または xyz/cccc のみ公開され、abc/aaaa または xyzaaaa は公開されません。グループ名が指定されていない場合、DISH サービスはデータベース内のすべての SOAP サービスを公開します。SOAP サービスは、複数の DISH サービスによって公開される場合があります。サービス名で使用できる文字と同じ文字をグループ名に使用できます。
サービスを作成するときに GROUP NULL を指定すると、GROUP 句を指定しない場合と同じになります。ただし、GROUP NULL が ALTER SERVICE 文で使用されると、GROUP NULL によって既存のグループ化がすべて削除されますが、GROUP 句がない場合、既存のグループ化は削除されません。
DATATYPE 句 SOAP サービスにだけ適用されます。すべての SOAP サービス・フォーマットでパラメータ入力または結果セットの出力にデータ型指定をサポートするかどうかを制御します。サポートする場合、データ型指定では SOAP ツールキットを使用してデータを解析し、適切な型にキャストします。パラメータのデータ型は、DISH サービスが生成する WSDL のスキーマ・セクションで公開されます。出力データ型は、データのカラムごとに XML スキーマ型の属性として表されます。
DATATYPE 句に指定できる値を次に示します。
ON 入力パラメータと結果セットの応答のデータ型指定を生成します。
OFF 入力パラメータと結果セットの応答のデータ型指定を生成しません (デフォルト)。
IN 入力パラメータのデータ型指定のみを生成します。
OUT 結果セットの応答のデータ型指定のみを生成します。
SOAP サービスの詳細については、SOAP サービスの使用を参照してください。
XMLSchema 型と SQL データ型とのマッピングの詳細については、データ型の使用を参照してください。
URL 句 URL パスを受け入れるかどうか、受け入れる場合にはどのように処理するかを決定します。
OFF OFF は、URL 要求のサービス名の後に何も指定できないことを示します。URL パスの残りの部分を許可しない場合、またはサービス名がフォワード・スラッシュ (/) で終わる場合は、OFF を指定します。たとえば、OFF を選択すると、URL パスが http://<host-name>/<service-name>/aaa/bbb/ccc の場合、http://<host-name>/<service-name> だけが許可されます。URL パスの残りの部分 /aaa/bbb/ccc は許可されません。
ON ON は、URL の残りの部分が URL という名前の変数の値として解釈されることを示します。URI パスの残りの部分が許可され、その部分が単一のパラメータとして設定される場合は、ON を指定します。たとえば、URL パス http://<host-name>/<service-name>/aaa/bbb/ccc では、パラメータ値は aaa/bbb/ccc です。
ELEMENTS ELEMENTS は、URL パスの残りの部分が、スラッシュで、複数のパラメータとして設定された最大 10 の要素からなるリストに分割されることを示します。たとえば、URL パス http://<host-name>/<service-name>/aaa/bbb/ccc では、パスの各要素は別個のパラメータとして処理されます。たとえば、url1=aaa、url2=bbb、url3=ccc のようになります。値は、url という名前の変数と 1 から 10 までの数値サフィックスに割り当てられます。指定される値の数が 10 より少ない場合、残りの変数は NULL に設定されます。
サービス名がフォワード・スラッシュ / で終わる場合、URL を OFF に設定する必要があります。デフォルト値は OFF です。
URL の詳細については、URL の解釈方法の概要と変数の使用を参照してください。
FORMAT 句 DISH および SOAP サービスにだけ適用されます。.NET や Java JAX-RPC などのさまざまなタイプの SOAP クライアントと互換性のある出力フォーマットを生成します。SOAP サービスのフォーマットが指定されていない場合、フォーマットはサービスの DISH サービス宣言から継承されます。DISH サービスでもフォーマットが宣言されていない場合、デフォルトは、.NET クライアントと互換性のある DNET です。フォーマットを宣言しない SOAP サービスは、複数の DISH サービスを定義することにより、それぞれ異なる FORMAT タイプを持つさまざまな種類の SOAP クライアントで使用できます。
次のフォーマットがサポートされます。
'DNET' .NET SOAP クライアントに使用する Microsoft DataSet フォーマット。DNET はデフォルトの FORMAT 値であり、SQL Anywhere 9.0.2 より前のバージョンで使用できた唯一のフォーマットです。
'CONCRETE' プラットフォームに依存しない DataSet フォーマットであり、JAX-WS などのクライアント、または返されるデータ構造のフォーマットに基づいてインタフェースを自動的に生成するクライアントで使用します。このフォーマット・タイプを指定すると、WSDL 内の明示的な dataset 要素と SimpleDataset 要素のどちらかが公開されます。
EXPLICIT ON が指定されている場合 (デフォルト)、次の条件が満たされると、WSDL は明示的な dataset 要素を記述します。
CREATE SERVICE 文がストアド・プロシージャを呼び出している
ストアド・プロシージャに RESULT 句が指定されている
サービス文またはストアド・プロシージャが適切に定義されていない場合、DISH サービスにより生成される結果セットのマッピングが SimpleDataset 要素に戻ります。
EXPLICIT OFF が指定されている場合、WSDL は SimpleDataset 要素を記述します。SimpleDataset 要素は、結果セットを、それぞれカラム要素の配列を含むローの配列から構成されるローセットの包含階層として記述します。明示的な dataset 要素は、カラムのそれぞれの実際の名前とタイプを含めて結果セットを拡張します。
'XML' 単純な XML 文字列フォーマット。XML パーサに渡すことのできる文字列として DataSet が返されます。このフォーマットは、SOAP クライアント間で最も移植が簡単です。
NULL SOAP サービスの場合、フォーマットは DISH サービスのフォーマットを継承するか (存在する場合)、デフォルトで DNET になります。DISH サービスの場合、フォーマットはデフォルトで DNET になります。新しいサービスを作成するときに FORMAT NULL を指定すると、その効果はフォーマットを何も指定しない場合と同じです。ただし、FORMAT NULL が ALTER SERVICE 文で使用された場合、FORMAT NULL により前のフォーマットが上書きされますが、FORMAT 句がない場合は前のフォーマットは上書きされません。
statement statement が NULL の場合、実行する statement を URL で指定する必要があります。そうしないと、指定された SQL 文しかサービスを使って実行されません。SOAP サービスには statement が必要です。DISH サービスには statement を指定できません。デフォルト値は NULL です。
運用システムで使用されるすべてのサービスに statement を定義することを強くおすすめします。認証が有効になっている場合のみ、statement に NULL が指定できます。
AUTHORIZATION 句 サービスに接続するときに、ユーザが基本的な HTTP 認証を通じてユーザ名とパスワードを指定する必要があるかどうかを決定します。デフォルト値は ON です。認証が OFF の場合、AS 句が必要となり、USER 句によって 1 人のユーザが識別されます。そのユーザのアカウントとパーミッションを使用して、すべての要求が実行されます。認証が ON の場合、すべてのユーザはユーザ名とパスワードを指定する必要があります。オプションとして、USER 句を使用しユーザ名またはグループ名を指定することにより、ユーザに対しサービスの使用許可を制限することもできます。ユーザ名が NULL の場合、既知のユーザはすべてサービスにアクセスできます。運用システムでは認証を ON にして実行すること、ユーザをグループに追加することによってサービス使用のパーミッションを付与することをおすすめします。
authorization の値が ON の場合、Web サービスに接続しようとしている HTTP クライアントは、基本認証 (RFC 2617) を使用します。基本認証では、ユーザとパスワードの情報が base-64 エンコーディングを使用して難読化されます。セキュリティを強化するため、HTTPS プロトコルを使用することをおすすめします。
ENABLE 句と DISABLE 句 サービスを使用できるかどうかを指定します。デフォルトでは、サービスの作成時に有効にされます。サービスを作成または変更するときに、ENABLE 句または DISABLE 句を含めることができます。サービスを無効にすると、事実上、サービスがオフラインになります。無効にしたサービスは、後で ENABLE 句を含む ALTER SERVICE 文を使用して有効にできます。
METHODS 句 サービスでサポートされる要求のタイプを示します。有効な要求タイプは、DEFAULT、POST、GET、HEAD、PUT、DELETE、NONE です。アスタリスク (*) は、POST、GET、HEAD 属性を表す省略形として使用できます。これらの属性は、RAW、HTML、XML サービス・タイプのデフォルト要求タイプです。SOAP サービスのデフォルト要求タイプは、POST と HEAD です。DISH サービスのデフォルト要求タイプは、GET と HEAD です。すべての要求タイプがすべてのサービス・タイプに有効なわけではありません。次の表は、有効な要求タイプをサービス・タイプ別にまとめたものです。
要求タイプ | 適用対象のサービス | 説明 |
---|---|---|
DEFAULT | すべて | DEFAULT は、要求タイプのセットを指定されたサービス・タイプのデフォルト・セットにリセットする場合に使用します。他の要求タイプが存在するリストに含めることはできません。 |
POST | SOAP、DISH、RAW、HTML、XML | SOAP、RAW、HTML、XML に対してデフォルトで有効になっています。 |
GET | DISH、RAW、HTML、XML | DISH、RAW、HTML、XML に対してデフォルトで有効になっています。 |
HEAD | SOAP、DISH、RAW、HTML、XML | SOAP、DISH、RAW、HTML、XML に対してデフォルトで有効になっています。 |
PUT | RAW、HTML、XML | デフォルトでは有効になっていません。 |
DELETE | RAW、HTML、XML | デフォルトでは有効になっていません。 |
NONE | すべて |
NONE は、サービスへのアクセスを無効にするために使用します。SOAP サービスに適用すると、SOAP 要求がそのサービスに直接アクセスできなくなります。 1 つ以上の SOAP サービスのエンドポイントには、必ず DISH サービスを使用してください。SOAP 操作に対する排他的アクセスを DISH サービス・エンドポイントを使用して強制するには、各 SOAP サービスに NONE を指定します。 |
* | RAW、HTML、XML | 'POST,GET,HEAD' と指定することと同じです。 |
たとえば、RAW サービス・タイプに要求タイプの完全なリストを指定するには、次のどちらかの句を使用できます。
METHODS '*,PUT,DELETE' METHODS 'POST,GET,HEAD,PUT,DELETE' |
サービス・タイプに対する要求タイプのリストをデフォルトにリセットするには、次の句を使用できます。
METHODS 'DEFAULT' |
SECURE 句 安全化されていない接続を受け入れるかどうかを示します。ON は、HTTPS 接続のみを受け入れることを示します。HTTP ポートで受信されたサービス要求は、自動的に HTTPS ポートにリダイレクトされます。OFF に設定すると、HTTP 接続と HTTPS 接続の両方を受け入れます。デフォルト値は OFF です。
USER 句 認証を無効にすると、このパラメータは必須となり、すべてのサービス要求を実行する際に使用されるユーザ ID が指定されます。認証を有効 (デフォルト) にすると、このオプション句は、サービスへのアクセスを許可されるユーザまたはグループを識別します。デフォルト値は NULL です。これによって、すべてのユーザにアクセスが付与されます。
CREATE SERVICE 文を使用すると、データベース・サーバは Web サーバとして動作します。新しいエントリが ISYSWEBSERVICE システム・テーブルに作成されます。
DBA 権限が必要です。
なし
SQL/2003 ベンダ拡張。
Web サーバをすばやく設定するには、-xs オプション (たとえば -x http) オプションを使用してデータベース・サーバを起動し、次の文を実行します。
CREATE SERVICE tables TYPE 'HTML' AUTHORIZATION OFF USER DBA AS SELECT * FROM SYS.SYSTAB; |
この文を実行したら、Web ブラウザを使用して URL http://localhost/tables を開きます。
次の例は、Hello World プログラムの作成方法を示します。
CREATE PROCEDURE hello_world_proc( ) RESULT (html_doc long varchar) BEGIN CALL dbo.sa_set_http_header( 'Content-Type', 'text/html' ); SELECT '<html>\n' || '<head><title>Hello World</title></head>\n' || '<body>\n' || '<h1>Hello World!</h1>\n' || '</body>\n' || '</html>\n'; END; |
CREATE SERVICE hello_world TYPE 'RAW' AUTHORIZATION OFF USER DBA AS CALL hello_world_proc; |
この文を実行した後、Web ブラウザを使用して URL http://localhost/hello_world を開きます。
次の例は、JSON サービスの作成方法を示します。
CREATE PROCEDURE ListEmployees() RESULT ( EmployeeID integer, Surname person_name_t, GivenName person_name_t, StartDate date, TerminationDate date ) BEGIN SELECT EmployeeID, Surname, GivenName, StartDate, TerminationDate FROM Employees END; |
CREATE SERVICE "JSON/EmployeeList" TYPE 'JSON' AUTHORIZATION OFF SECURE OFF USER DBA AS CALL ListEmployees(); |
この文を実行した後、Web ブラウザを使用して URL http://localhost/JSON/EmployeeList を開き、JSON の応答をファイルに保存してテキスト・エディタで参照できるようにします。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |