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 サービス

 

MIME タイプの使用

SQL Anywhere Web サービス・クライアントのプロシージャや関数の定義における TYPE 句では、MIME タイプを指定できます。MIME タイプ指定の値は、Content-Type 要求ヘッダや操作モードの設定に使用することで、1 つの呼び出しパラメータのみで要求の本文を設定することができます。パラメータの置換後に Web サービスのストアド・プロシージャ (または関数) を呼び出す場合は、パラメータがまったくなくなるか、1 つだけ残される場合があります。Web サービスのプロシージャを (置換後に) NULL パラメータまたはパラメータなしで呼び出すと、本文がなくコンテンツ長が 0 の要求になります。MIME タイプを指定しない場合、動作は変更されません。パラメータの名前と値 (複数のパラメータが可能) は、HTTP 要求の本文内で URL コード化されます。

一般的な MIME タイプの例を次に示します。

MIME タイプを設定する手順を次に示します。前半は、MIME タイプの設定をテストするために使用できる Web サービスを設定します。後半は、MIME タイプを設定する方法を示します。

♦  Web サービス・サーバを作成します。
  1. データベースを作成します。

    dbinit echo
  2. このデータベースを使用してサーバを起動します。

    dbsrv11 -xs http(port=8082) -n echo echo.db
  3. Interactive SQL を使用してサーバに接続します。

    dbisql -c "UID=DBA;PWD=sql;ENG=echo"
  4. Interactive SQL を使用して Web サービスを作成します。

    CREATE SERVICE EchoService
    TYPE 'RAW'
    USER DBA
    AUTHORIZATION OFF
    SECURE OFF
    AS CALL Echo(:valueAsXML);
  5. このサービスで呼び出すストアド・プロシージャを定義します。

    CREATE PROCEDURE Echo( parm LONG VARCHAR )
    BEGIN
        SELECT parm; 
    END;

この時点で、SQL Anywhere Web サービス・サーバは実行されており、要求処理の準備ができています。サーバは HTTP 要求をポート 8082 で受信しています。

この Web サーバをテストに使用するには、別の SQL Anywhere データベースを作成し、起動して、接続します。次の手順は、これを行う方法を示します。

♦  HTTP 要求を送信するには、次の手順に従います。
  1. データベース作成ユーティリティを使用して、Web サービス・クライアントで使用する別のデータベースを作成します。

    dbinit echo_client
  2. Interactive SQL で、次の文を使用してこのデータベースを起動します。

    START DATABASE 'echo_client.db' 
    AS echo_client;
  3. 次の文を使用して、サーバ・エコーで起動したデータベースに接続します。

    CONNECT TO 'echo'
    DATABASE 'echo_client' 
    USER 'DBA' 
    IDENTIFIED BY 'sql';
  4. EchoService Web サービスと通信するストアド・プロシージャを作成します。

    CREATE PROCEDURE setMIME( 
      value LONG VARCHAR, 
      mimeType LONG VARCHAR, 
      urlSpec LONG VARCHAR
      )
    URL '!urlSpec'
    HEADER 'ASA-Id'
    TYPE 'HTTP:POST:!mimeType';

    URL 句は、Web サービスを参照するために使用されます。説明するために、URL は パラメータとして setMIME プロシージャに渡されます。

    TYPE 句は、MIME タイプがパラメータとして setMIME プロシージャに渡されることを示しています。Web サービス要求作成時のデフォルト・フォーマットは 'SOAP:RPC' です。この Web サービス要求を行うために選択したフォーマットは 'HTTP:POST' です。

  5. ストアド・プロシージャを呼び出して、要求を送信し、応答を取得します。渡される value パラメータは、<hello>this is xml</hello> が URL コード化された形式になります。form-urlencoded は、SQL Anywhere Web サーバによって認識されるため、メディア・タイプは application/x-www-form-urlencoded にします。Web サービスの URL は、呼び出しの最後のパラメータとして含まれます。

    CALL setMIME('valueAsXML=%3Chello%3Ethis%20is%20xml%3C/hello%3E', 
        'application/x-www-form-urlencoded', 
        'http://localhost:8082/EchoService');

    最後のパラメータでは、ポート 8082 で受信している Web サービスの URI を指定します。

Web サーバに送信される HTTP パケットの例は次のようになります。

POST /EchoService HTTP/1.0
Date: Sun, 28 Jan 2007 04:04:44 GMT
Host: localhost
Accept-Charset: windows-1252, UTF-8, *
User-Agent: SQLAnywhere/11.0.0.1297
Content-Type: application/x-www-form-urlencoded; charset=windows-1252
Content-Length: 49
ASA-Id: 1055532613:echo_client:echo:968000
Connection: close

valueAsXML=%3Chello%3Ethis%20is%20xml%3C/hello%3E

Web サーバからの応答は次のようになります。

HTTP/1.1 200 OK
Server: SQLAnywhere/11.0.0.1297
Date: Sun, 28 Jan 2007 04:04:44 GMT
Expires: Sun, 28 Jan 2007 04:04:44 GMT
Content-Type: text/plain; charset=windows-1252
Connection: close

<hello>this is xml</hello>

Interactive SQL で表示される結果セットは次のようになります。

Attribute Value
Status HTTP /1.1 200 OK
Body <hello>this is xml</hello>
Server SQLAnywhere/11.0.0.1297
Date Sun, 16 Dec 2007 04:04:44 GMT
Expires Sun, 16 Dec 2007 04:04:44 GMT
Content-Type text/plain; charset=windows-1252
Connection close