外部公開されている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)。
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)。
少し見づらいが、JSON ファイルを整形した結果は以下のとおりになる。
上記サイトにSQLでアクセスするには、図表3のようにsystools.httpgetclob関数を使用する。
このSQLをプログラムに組み込む場合、取得したJSONデータを変数に取り込むには、RPG の場合は図表4のコーディングとなる。
これで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月から現職。