Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - プログラミング » SQL Anywhere データ・アクセス API » SQL Anywhere Web サービス

 

URL の解釈方法の概要

URL (Universal Resource Locators) は、SOAP または HTTP Web サービスから取得できる HTML ページなどのドキュメントを指定します。SQL Anywhere で使用される URL は、Web のブラウズで見慣れた形式に従っています。データベース・サーバを介してブラウジングする場合、ユーザは従来のスタンドアロン Web サーバで要求が処理されていないことを意識する必要はありません。

SQL Anywhere データベース・サーバは、フォーマットは標準ですが、URL の解釈方法は標準の Web サーバと異なります。データベース・サーバの起動時に指定するオプションも、その解釈方法に影響します。

URL の一般的な構文は、次のとおりです。

{ http | https }://[ user:password@ ]host[ :port ][ /dbn ]/service-name[ path | ?searchpart ]

URL の例を次に示します。http://localhost:80/demo/XMLtable

ユーザとパスワード

Web サービスに認証が必要な場合、ユーザ名とパスワードは、コロンで区切って電子メール・アドレスのようにホスト名の前に挿入することにより、URL の一部として直接渡すことができます。

ホストとポート

すべての標準的な HTTP 要求と同様に、URL はホスト名や IP アドレスから始まり、オプションでポート番号になります。IP アドレスやホスト名とポートは、サーバが受信しているうちの 1 つにしてください。IP アドレスは、SQL Anywhere を実行しているコンピュータのネットワーク・カードのアドレスです。ポート番号は、データベース・サーバを起動したときに -xs オプションで指定したポート番号です。ポート番号を指定しない場合、そのサービス・タイプでデフォルトのポート番号が使用されます。たとえば、デフォルトでサーバはポート 80 で HTTP 要求を受信します。-xs サーバ・オプションを参照してください。

データベース名

スラッシュの間にある次のトークンは、通常データベース名です。このデータベースはサーバで実行中であり、Web サービスが含まれている必要があります。

URL にデータベース名が表示されず、データベース名が -xs サーバ・オプションの DBS 接続パラメータを使用して指定されていない場合は、デフォルトのデータベースが使用されます。

データベース・サーバで実行中のデータベースが 1 つだけか、またはデータベース名が -xs オプションの DBS 接続パラメータを使用して指定されている場合のみ、データベース名を省略できます。

サービス名

次の URL の部分はサービス名です。このサービスは、指定したデータベースに存在している必要があります。Web サービス名にスラッシュ文字が含まれていることもあるため、サービス名は次のスラッシュ文字にまたがる場合もあります。SQL Anywhere は、URL の残りの部分と定義されたサービスを一致させます。

URL にサービス名の指定がない場合は、データベース・サーバが root というサービスを検索します。指定したサービスまたはルート・サービスが定義されていないと、サーバは「404 Not Found」エラーを返します。

パラメータ

対象となるサービスの種類によって、パラメータを指定する方法が異なります。HTML、XML、RAW サービスに対するパラメータは、次のいずれかの方法で渡すことができます。

  • スラッシュを使用して URL に追加

  • 明示的な URL パラメータ・リストとして指定

  • POST 要求の POST データとして指定

SOAP サービスに対するパラメータは、標準 SOAP 要求の一部として含める必要があります。これ以外の方法で提供される値は無視されます。

URL パス

パラメータ値にアクセスするには、パラメータに名前を指定します。これらのホスト変数名にはプレフィクスとしてコロン (:) が付き、Web サービス定義の一部を形成する文に含めることができます。

たとえば、次のストアド・プロシージャを定義したとします。

CREATE PROCEDURE Display (IN ident INT )
BEGIN
    SELECT ID, GivenName, Surname FROM Customers
    WHERE ID = ident;
END;

このストアド・プロシージャを呼び出す文には、顧客 ID 番号が必要です。サービスを次のように定義します。

CREATE SERVICE DisplayCustomer
TYPE 'HTML'
URL PATH ELEMENTS
AUTHORIZATION OFF
USER DBA 
AS CALL Display( :url1 );

この場合、URL は [external link] http://localhost:80/demo/DisplayCustomer/105 のようになります。

パラメータ 105 は、url1 としてサービスに渡されます。URL PATH ELEMENTS 句は、スラッシュで区切られたパラメータがそれぞれパラメータ url1url2url3 などとして渡されることを示します。この方法では、パラメータを 10 個まで渡すことができます。

Display プロシージャのパラメータは 1 つなので、サービスは次のように定義することもできます。

CREATE SERVICE DisplayCustomer
TYPE 'HTML'
URL PATH ON
AUTHORIZATION OFF
USER DBA 
AS CALL Display( :url );

この場合、パラメータ 105url としてサービスに渡されます。URL PATH ON 句は、サービス名の後に続くものすべてが url という 1 つのパラメータとして渡されることを示します。したがって、次の URL では、文字列 105/106 が url として渡されます (Display ストアド・プロシージャでは整数値が必要とされるので、これは SQL エラーになります)。

[external link] http://localhost:80/demo/DisplayCustomer/105/106

変数の詳細については、変数の使用を参照してください。

パラメータには、HTTP_VARIABLE 関数を使用してもアクセスできます。HTTP_VARIABLE 関数 [HTTP]を参照してください。

URL searchpart

パラメータを渡すもう 1 つの方法は、URL searchpart (検索部分) メカニズムを使用することです。URL searchpart は、疑問符 (?) と、それに続くアンパサンド (&) 区切りの name=value ペアとで構成されます。searchpart は、URL の末尾に追加されます。次に、一般的なフォーマットの例を示します。

http://server/path/document?name1=value1&name2=value2

GET 要求はこのような形でフォーマットされます。名前付き変数がある場合、対応する値が定義され、割り当てられます。

たとえば、ストアド・プロシージャ ShowSalesOrderDetail を呼び出す文には、顧客 ID 番号と製品 ID 番号がどちらも必要です。

CREATE SERVICE ShowSalesOrderDetail
TYPE 'HTML'
URL PATH OFF
AUTHORIZATION OFF
USER DBA 
AS CALL ShowSalesOrderDetail( :customer_id, :product_id );

この場合、URL は [external link] http://localhost:80/demo/ShowSalesOrderDetail?customer_id=101&product_id=300 のようになります。

URL PATH を ON または ELEMENTS に設定すると、追加の変数が定義されます。ただし、この 2 つに通常は関連性はありません。URL PATH を ON または ELEMENTS に設定すると、要求された URL で変数を使用できます。次の例は、これら 2 つを組み合わせて使用する方法を示します。

CREATE SERVICE ShowSalesOrderDetail2
TYPE 'HTML'
URL PATH ON
AUTHORIZATION OFF
USER DBA 
AS CALL ShowSalesOrderDetail( :customer_id, :url );

次の例では、searchpart と URL パスがどちらも使用されています。値 300 は url に代入され、101 は customer_id に代入されます。

[external link] http://localhost:80/demo/ShowSalesOrderDetail2/300?customer_id=101

また、次のようにすると searchpart だけで表現できます。

[external link] http://localhost:80/demo/ShowSalesOrderDetail2/?customer_id=101&url=300

ここで、同じ変数に対してこれら両方の方法で指定があった場合にどうなるかが問題になります。次の例では、url には 300、302 が順番に代入され、最後に代入された値が有効になります。

[external link] http://localhost:80/demo/ShowSalesOrderDetail2/300?customer_id=101&url=302

変数の詳細については、変数の使用を参照してください。

パラメータには、HTTP_VARIABLE 関数を使用してもアクセスできます。HTTP_VARIABLE 関数 [HTTP]を参照してください。