MENU

SQLでIBM iと外部システムを連携する手法 ~IBM iから外部システムへ |特集 SQLの扉を開く ❸

外部公開されているREST APIへ
IBM iからアクセスする 

IT市場には現在、さまざまなWebサービスが存在する。TwitterやGmail、Facebook、Amazonや Slackなど、普段当たり前に利用しているサービスも多い。

Webサービスを利用するには、専用のアプリケーションを使用するケースがほとんどだが、多くのサービスはアプリケーション以外もアクセス可能な窓口を設けている。これを利用することで、公開サービスと自社アプリケーションを連携できるようになる。

たとえばIBM iからのメッセージをTwitterやSlackに投げる、会計Web サービスと連携するなどが考えられる。

Webサービスが提供する窓口にはいろいろな種類があるが、現在最も利用されているのがREST APIである。REST(REpresentational State Transfer)は、もともとは分散システムでアプリケーション同士を連携させる設計手法のことだが、最近ではWebサーバーへのアクセス時に使用するHTTPプロトコルを使用して、各アプリケーションをどのように連携させるかの取り決めをREST APIと呼んでいる。

RESTは、以下の設計原則をもつとして紹介されることが多い。

① ステートレスなクライアント/サーバープロトコル
② すべての情報(リソース)に適用できる「よく定義された操作」のセット
③ リソースを一意に識別する「汎用的な構文」
④ アプリケーションの情報と状態遷移の両方を扱える「ハイパーメディアの使用」

ブラウザがWebサーバーにアクセスする際は、一意なURIに対して特定の操作(GET、POSTなど)でアクセスし、やり取りする情報にリンクを含め1回のやり取りで完了する。まさにこのRESTに基づいたアクセスを実行している(図表1)。

図表1 ESTに基づくWebサービスの仕組み

REST APIとは、この原則に基づいてアクセスできる内容をAPIとして公開し、誰でも自由に(有償・無償の違いはあるが)サービスへのアクセスを可能にするための、Web サービスが提供している窓口にほかならない(上記原則に従った場合をとくに「RESTFul API」と呼ぶ場合もある)。

では、外部公開されているREST APIへIBM iからアクセスするには、どうしたらよいだろうか。実はこの機能も、SQLを経由して呼び出す機能として提供されている。以下のライブラリーで提供されている HTTP関数がそれだ。

・SYSTOOLS ライブラリー
・QSYS2 ライブラリー

両者の違いは、Java環境を使用する機能を利用するかどうかである。SYSTOOLS で提供される HTTP関数はJava環境を使用するが、QSYS2 は使用しない。Java 機能を実行するにはJava仮想マシン(JVM)が必要になるが、これはジョブ単位に起動する必要があるため、初回起動時等のオーバーヘッドのコストがかかる。

QSYS2で提供されるHTTP関数は、IBM i 7.4 TR5および7.3 TR11で利用可能になった。比較的新しい機能なので、これからサンプルなどがネットで提供されるだろう。

SYSTOOLSのHTTP関数で気象データを取得する 

それでは SYSTOOLSのHTTP関数の簡単な使用例を見てみよう。

通常、Web APIにアクセスするには事前に使用登録をして(有償・無償)、キーを取得し、そのキーをHTTP Headerに組み込むことで利用可能になる場合が多い。しかしここでは説明を簡単にするために、URIの指定のみで入手できる気象庁のデータを例に見ていく。

まず、以下の URL にブラウザからアクセスする。

https://www.jma.go.jp/bosai/forecast/data/overview_forecast/130000.json

すると、東京都の天気予報の概要が JSON 形式で表示される(図表2)。

図表2 東京都の天気予報の概要をJSONで表示

少し見づらいが、JSON ファイルを整形した結果は以下のとおりになる。

上記サイトにSQLでアクセスするには、図表3のようにsystools.httpgetclob関数を使用する。

図表3 ystools. httpgetclob関数

このSQLをプログラムに組み込む場合、取得したJSONデータを変数に取り込むには、RPG の場合は図表4のコーディングとなる。

図表4 SQLをプログラムに取り込む

これでjsonData変数に東京都の天気概況情報がセットされるので、あとはこれをプログラム内で利用すればよい。

ここではGETメソッドの簡単な例を取り上げたが、利用するWeb サービスのREST APIに必要なメソッドを選択し、該当する関数をコーディングすることもできる。これにより単純なデータの取得だけでなく、基幹システムのデータを外部サービスに送信することも可能になる。

HTTP関数に関しては、以下のサイトが参考になる。

◎SYSTOOLS HTTP 関数
https://www.ibm.com/docs/ja/i/7.4?topic=systools-http-function-overview

◎QSYS2 HTTP 関数(英語)
https://www.ibm.com/docs/en/i/7.4?topic=functions-scalar

QSYS2の主なHTTP 関数は、以下のとおりである。

・HTTP_DELETE
・HTTP_GET
・HTTP_POST
・HTTP_PUT

 

著者
小川 誠氏

1989年、エス・イー・ラボ入社。その後、1993年にティアンドトラストに入社。システム/38 からIBM iまで、さまざまな開発プロジェクトに参加。またAS/400、IBM iの機能拡張に伴い、他プラットフォ ームとの連携機能開発も手掛ける。IBM i関連の多彩な教育コンテンツの作成や研修、セミナーなども担当。2021年6月から現職。

新着