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

 

HTML ドキュメントを提供するプロシージャの使用

一般的に、特定のサービスに送信される要求を処理するプロシージャを記述するのが最も簡単です。このようなプロシージャは Web ページを返します。オプションで、プロシージャは出力をカスタマイズするために、URL の一部として渡される引数を受け入れることができます。

しかし、次の例はさらに単純です。これはサービスの単純さを表しています。この Web サービスは "Hello world!" というフレーズを返すだけです。

CREATE SERVICE hello 
TYPE 'RAW'
AUTHORIZATION OFF 
USER DBA
AS SELECT 'Hello world!';

Web 要求の処理を可能にするために -xs オプションを指定してデータベース・サーバを起動し、任意の Web ブラウザから URL [external link] http://localhost/hello を要求します。Hello world! という言葉が無地のページに表示されます。

HTML ページ

上記のページは、使用しているブラウザにプレーン・テキストで表示されます。これは、デフォルトの HTTP コンテンツタイプが text/plain であるためです。HTML でフォーマットされたごく普通の Web ページを作成するには、次の 2 つの作業を行ってください。

  • HTTP コンテンツタイプ・ヘッダ・フィールドを text/html に設定して、ブラウザが HTML を予期するようにします。

  • 出力に HTML タグを含めます。

出力にタグを書き込むには 2 つの方法があります。1 つは、CREATE SERVICE 文で TYPE 'HTML' フレーズを使用する方法です。この方法では、SQL Anywhere データベース・サーバは、HTML タグを追加するよう指示されます。これは、たとえばテーブルを返す場合などにうまく機能します。

もう 1 つは、TYPE 'RAW' を使用して必要なタグをすべて自分で書き出す方法です。この 2 番目の方法は出力を最も制御できます。RAW タイプを指定しても、出力が必ずしも HTML または XML フォーマットではないという意味ではありません。これは、タグ自身を追加せずにクライアントに直接戻り値を渡せるということを SQL Anywhere に通知するだけです。

次のプロシージャでは、より凝ったバージョンの Hello world を生成します。便宜上、本文については次のプロシージャで扱いますが、これは Web ページをフォーマットするものです。

組み込みプロシージャ sa_set_http_header を使用して HTTP ヘッダ・タイプを指定するので、ブラウザは適切に結果を解釈します。この文を省略すると、ブラウザは、HTML コードをドキュメントのフォーマットに使用せず、すべての HTML コードを表示します。

CREATE PROCEDURE hello_pretty_world ()
RESULT (html_doc XML)
BEGIN
  CALL dbo.sa_set_http_header( 'Content-Type', 'text/html' );
  SELECT HTML_DECODE(
    XMLCONCAT(
      '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">',
      XMLELEMENT('HTML',  
      XMLELEMENT('HEAD',
          XMLELEMENT('TITLE', 'Hello Pretty World')
        ),
        XMLELEMENT('BODY',
          XMLELEMENT('H1', 'Hello Pretty World!'),
          XMLELEMENT('P',
            '(If you see the tags in your browser, check that '
            || 'the Content-Type header is set to text/html.)'
          )
        )
      )
    )
  );
END

次の文は、このプロシージャを使用するサービスを作成します。この文は、Hello Pretty World の Web ページを生成する上記のプロシージャを呼び出します。

CREATE SERVICE hello_pretty_world 
TYPE 'RAW'
AUTHORIZATION OFF 
USER DBA
AS CALL hello_pretty_world();

いったんプロシージャとサービスを作成したら、Web ページへのアクセスが可能になります。正しい -xs オプション値を指定してデータベース・サーバを起動していることを確認してください。確認したら、URL [external link] http://localhost/hello_pretty_world を Web ブラウザで開きます。

Hello Pretty World というタイトルの、単純な HTML ページでフォーマットされた結果が表示されます。Web ページをより凝ったものにするには、コンテンツを増やす、より多くのタグやスタイル・シートを使用する、ブラウザで実行するスクリプトを使用する、などを行ってください。どのような場合でも、ブラウザの要求を処理するためには必要なサービスを作成する必要があります。

組み込みのストアド・プロシージャの詳細については、システム・プロシージャのアルファベット順リストを参照してください。

ルート・サービス

URL にサービス名が含まれていない場合、SQL Anywhere は root という名前の Web サービスを検索します。ルート・ページの役割は、従来の多くの Web サーバにおける index.html ページの役割に似ています。

ルート・サービスは、Web サイトのアドレスのみを含む URL 要求を処理できるので、ホーム・ページの作成に便利です。また、存在しない URL パスの処理にも便利です。たとえば、次のプロシージャとサービスは、URL [external link] http://localhost をブラウズした場合に表示される簡単な Web ページを実装しています。さらに、存在しないページをブラウズした場合の処理も行います。

CREATE PROCEDURE HomePage( IN url LONG VARCHAR )
RESULT (html_doc XML)
BEGIN
  CALL dbo.sa_set_http_header( 'Content-Type', 'text/html' );
  IF url IS NULL THEN
    SELECT HTML_DECODE(
      XMLCONCAT(
        '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">',
        XMLELEMENT('HTML',
          XMLELEMENT('HEAD',
            XMLELEMENT('TITLE', 'My Home Page')
          ),
          XMLELEMENT('BODY',
            XMLELEMENT('H1', 'My home on the web'),
            XMLELEMENT('P',
              'Thank you for visiting my web site!'
            )
          )
        )
      )
    )
  ELSE    
    CALL dbo.sa_set_http_header('Status','404'); 
    SELECT '<H1>Status 404 - Document ' || url || ' not found</H1>'  
  END IF
END

次に、このプロシージャを使用するサービスを作成します。

CREATE SERVICE root 
TYPE 'RAW'
AUTHORIZATION OFF 
SECURE OFF
URL PATH ON
USER DBA
AS CALL HomePage(:url);

データベース・サーバを起動するときにデータベース名が必須であると指定しないかぎり、URL [external link] http://localhost をブラウズすることでこの Web ページにアクセスできます。Web 要求を受信するデータベース・サーバの起動を参照してください。URL PATH ON を指定することで、存在しない URL パスがこのサービスにリダイレクトされるようにします。

samples-dir\SQLAnywhere\HTTP ディレクトリには、より多くのサンプルが用意されています。