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 要求の一部として含める必要があります。これ以外の方法で提供される値は無視されます。
パラメータ値にアクセスするには、パラメータに名前を指定します。これらのホスト変数名にはプレフィクスとしてコロン (:) が付き、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 は http://localhost:80/demo/DisplayCustomer/105 のようになります。
パラメータ 105
は、url1
としてサービスに渡されます。URL PATH ELEMENTS 句は、スラッシュで区切られたパラメータがそれぞれパラメータ url1
、url2
、url3
などとして渡されることを示します。この方法では、パラメータを 10 個まで渡すことができます。
Display プロシージャのパラメータは 1 つなので、サービスは次のように定義することもできます。
CREATE SERVICE DisplayCustomer TYPE 'HTML' URL PATH ON AUTHORIZATION OFF USER DBA AS CALL Display( :url ); |
この場合、パラメータ 105
が url
としてサービスに渡されます。URL PATH ON 句は、サービス名の後に続くものすべてが url
という 1 つのパラメータとして渡されることを示します。したがって、次の URL では、文字列 105/106 が url
として渡されます (Display ストアド・プロシージャでは整数値が必要とされるので、これは SQL エラーになります)。
http://localhost:80/demo/DisplayCustomer/105/106
変数の詳細については、変数の使用を参照してください。
パラメータには、HTTP_VARIABLE 関数を使用してもアクセスできます。HTTP_VARIABLE 関数 [HTTP]を参照してください。
パラメータを渡すもう 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 は 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
に代入されます。
http://localhost:80/demo/ShowSalesOrderDetail2/300?customer_id=101
また、次のようにすると searchpart だけで表現できます。
http://localhost:80/demo/ShowSalesOrderDetail2/?customer_id=101&url=300
ここで、同じ変数に対してこれら両方の方法で指定があった場合にどうなるかが問題になります。次の例では、url
には 300、302 が順番に代入され、最後に代入された値が有効になります。
http://localhost:80/demo/ShowSalesOrderDetail2/300?customer_id=101&url=302
変数の詳細については、変数の使用を参照してください。
パラメータには、HTTP_VARIABLE 関数を使用してもアクセスできます。HTTP_VARIABLE 関数 [HTTP]を参照してください。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |