概要
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パラメータを利用しない場合: