概要
TDVでは、外部のAPIをデータソースとして追加し、それをTDV Server内でプロシージャ化しウェブサービスとして公開することもできます。
本記事では、AWS IP アドレスの範囲にて公開されているAWSにおいて利用されるグローバルIPアドレス一覧を取得可能なip-ranges.jsonをデータソースとして利用する例を示します。
ip-ranges.jsonにより、AWSのリージョン・サービス別に利用されるグローバルIPアドレスのすべてのレンジをJSON形式で取得できます。以降はこのWeb上で公開されているJSONデータをシンプルなAPIと見立てたうえで説明します。
以降の手順では、上記のJSONデータをリージョン(r)とサービス(s)の2種類のGETパラメータにより絞り込んだうえで取得できるようなREST APIをTDVにより作成し公開します。
事前準備
使用するAPIが大量のデータを返す場合は、構成ダイアログで「XMLテキストサイズ」の値を、レスポンスサイズに合わせて大きめに調整してください。
データソース追加
TDV標準のRESTアダプタを利用し、ip-ranges.jsonを以下のようにデータソースとして登録します。
今回の例では、データソース側の仕様により、Login、Password など認証情報は不要です。
基本タブの操作では、以下のようにGETメソッドによりJSONデータを取得し、データソースアダプタ内の処理でXML形式に変換する設定を行います。
イントロスペクトを実施し、正常に完了することを確認します。
イントロスペクトの結果、TDVに追加されたip-rangesを開き実行します。
詳細ボタンをクリックするとXML形式に変換されたデータが別ウィンドウで表示されるので、プロッピ―ディスクのアイコンをクリックしてXMLデータをファイルとして保存しておきます。
定義セットの作成
XML定義セットを作成します。
1. XMLタイプの定義セットを作成します。
2. XMLスキーマ定義をXMLインスタンスから作成をクリックします。
3. 先ほどファイルに保存したXMLデータを指定しXMLスキーマ定義を生成します。
データソースのData Type変更
データソース(REST)のData Typeを以下の手順により先ほど作成したXML定義に変更します。
1. データソースを開き、基本タブの操作に設定済みの操作に対し、Data Typeで参照を選択します。
2. 定義タイプの追加ウィンドウで先ほど作成したXML定義を選択します。
3. データソースを開き、XML定義が適用されていることを確認します。
変換の作成
XML形式のデータを表形式に変換するための変換(Transformation)を作成します。
1. 変換タイプ:XSLT変換 の新しい変換を作成します。
2. 入力として作成済みのRESTデータソースを選択します。
3. 入力と出力のマッピングを定義します。
ipv6のデータについても同様にマッピングを定義します。
パラメータクエリ作成
リージョン(r)とサービス(s)の2種類のパラメータを受け付けるパラメータクエリを作成します。
スクリプトの記述例は以下のとおりです。
PROCEDURE pq_ip_ranges(
IN r VARCHAR(50), s VARCHAR(50),
OUT result CURSOR (
region VARCHAR(255),
service VARCHAR(255),
ip_prefix VARCHAR(255),
network_border_group VARCHAR(255)
)
)
BEGIN
DECLARE risnull VARCHAR(50);
DECLARE sisnull VARCHAR(50);
DECLARE query VARCHAR(255);
DECLARE condition VARCHAR(255);
set risnull = nvl2(r,''||r,'true');
set sisnull = nvl2(s,''||s,'true');
IF risnull <> 'true' AND sisnull <> 'true'
THEN
SET condition = ' WHERE region = ''' || r || ''' AND service = ''' || s || ''' ';
ELSEIF risnull <> 'true' AND sisnull = 'true'
THEN
SET condition = ' WHERE region = ''' || r || ''' ';
ELSEIF risnull = 'true' AND sisnull <> 'true'
THEN
SET condition = ' WHERE service = ''' || s || ''' ';
ELSEIF risnull = 'true' AND sisnull = 'true'
THEN
SET condition = '';
END IF;
SET query = 'SELECT * FROM /shared/aws_ip/"ip-ranges"()' || condition || 'UNION SELECT * FROM /shared/aws_ip/"ip-ranges_v6"()' || condition;
OPEN result FOR query;
END
実行すると以下のように2種類のパラメータを要求されることを確認します。
結果がパラメータによりフィルタされていることを確認します。
データサービス公開
パラメータクエリをデータサービス(ウェブサービス)として公開します。
データサービス動作確認
ウェブブラウザからREST APIを実行し、公開したデータサービスの動作を確認します。
a) リージョン(r)とサービス(s)両方のGETパラメータを利用する場合:
b) リージョン(r)のGETパラメータのみを利用する場合:
c) サービス(s)のGETパラメータのみを利用する場合:
d) GETパラメータを利用しない場合: