IBM i 7.5以前、ILE RPGなどILE言語からREST APIをコールする方法としては、下図のようなSYSTOOLSライブラリーのHTTP関数が利用可能でした。(執筆時点ではIBM i 7.6含め利用可能)
そして、IBM 7.6で新しくREST APIの呼び出し機能として追加されたのが、QSYS2ライブラリーのHTTP関数です。
New HTTP functions based in QSYS2
https://www.ibm.com/support/pages/new-http-functions-based-qsys2
QSYS2 HTTPサービスの特長
これらのHTTPサービスは、Webサービスを使用するHTTPリクエストを行うために使用されます。これらの関数により、SQLプログラマーは埋め込みSQLを含むSQLを介してRepresentational State Transfer(RESTful)を利用できます。これらのサービスは、JVM作成のオーバーヘッドなしで、SYSTOOLS HTTP関数と同じ機能を提供します。IWSのHTTPトランスポートAPI機能を使用します。
HTTP関数はQSYS2に存在し、SYSTOOLS HTTP関数よりもオーバーヘッドが低くなっています。
QSYS2 HTTP関数のその他の利点として、HTTP認証、プロキシサポート、構成可能なリダイレクト試行、および構成可能なSSLオプションが挙げられます。
IBM i 7.6 SF99960 レベル 2 および IBM i 7.5 SF99950 レベル 11 で強化:
URL_ENCODE および URL_DECODE が 2 ギガバイトの値を処理できるように拡張されました。
IBM i 7.5 SF99950 レベル 4 および IBM i 7.4 SF99704 レベル 25 で強化
QSYS2 HTTP 関数の BLOB ベースバージョンが追加されました。
IBM i 7.5 SF99950 レベル 3 および IBM i 7.4 SF99704 レベル 23 で強化
「ヘッダー」に対する HTTP オプションのサポートにより、ユーザーはすべてのヘッダーオプションを単一の JSON ドキュメント内に含めることができます。
IBM i 7.5 SF99950 レベル 1、IBM i 7.4 SF99704 レベル 20、および IBM i 7.3 SF99703 レベル 28 で強化
HTTP_PATCH スカラー関数の追加
HTTP_PATCH_VERBOSE テーブル関数の追加
HTTP_xxx_VERBOSE 関数の RESPONSE_HTTP_HEADER 列の情報の返方法を指定する新しいヘッダーオプション verboseResponseHeaderFormat が追加されました。
単純なサンプルコード
REST呼び出しが成功したことを確認する
VALUES QSYS2.HTTP_GET(
URL => 'https://www.ibm.com/support/pages/sites/default/files/inline-files/xmldoc.xml',
/* CLOB(1 MB) No default */
OPTIONS => DEFAULT
/* CLOB(1 MB) Default: Null */
);
失敗の詳細を返す HTTP_GET_VERBOSE
select *
from table (
QSYS2.HTTP_GET_VERBOSE('http://www.w3.org/notfound.html', '')
);
BASE64エンコード
VALUES QSYS2.BASE64_ENCODE('myuser:mypassword');
-- lKikooWZepSol4GioqaWmYQ=
BASE64デコード
VALUES varchar(QSYS2.BASE64_DECODE('lKikooWZepSol4GioqaWmYQ='), 80));
-- myuser:mypassword
URLエンコード
VALUES 'https://www.example.com/search?q=' CONCAT URL_ENCODE('IBM i Q&A');
URLデコード
VALUES URL_DECODE('https://www.example.com/search?q=IBM+i+Q%26A');
