CData社のAPI Serverという製品をご存じでしょうか?
CData API Serverを使うとRDB等のデータをノーコードでREST APIとして公開できます。
https://www.cdata.com/jp/apiserver/
Windows(.NET)版とJava版の2種類があります。
IBM iではほとんどの環境でJDKがインストールされているかと思います。
今回はIBM i 上にCData API Serverをインストールしてみました。
CData API Serverの入手
以下のURLから製品をダウンロードします。
Cross-Platform(Java)を選択します。
https://www.cdata.com/jp/apiserver/download/
製品のインストール
setup.jarをIFS上のディレクトリにアップロードする。
ダウンロードしたファイルにあるsetup.jarをFTPなどでIFS上のディレクトリへアップロードします。
今回は/tempにアップロードしました。
インストーラーの実行
setup.jarを実行するにはsshでIBM iに接続するほうがLinuxと同じような感覚で進められますが、sshdが動いていない環境もあるので、今回は5250エミュレーター画面よりQSHELLを使って実行します。
5250エミュレータの接続構成は、英小文字が文字化けしないようコードページを939又は1399にしてください。
ジョブのCCSIDを5035にしてください。
CHJOB CCSID(5035)
コマンドラインよりQSHと入力して、QSHELLを起動します。
setup.jarを実行します。
cd /temp
java -jar setup.jar
以下の画面のようにインストラーが起動したら画面の指示に従って進めます。
確認画面で「1」を入力し、実行キーでインストール。
API ServerはデフォルトでIFS上の/opt/apiserverディレクトリにインストールされます。
JDBC Driverの配置
IBM i へ接続するためにはJDBC Driver(jt400.jar)をAPI Serverに認識させる必要があります。
API ServerのlibディレクトリにDriverを配置することで認識します。
QSHELLからcpコマンドでjt400.jarをコピーします。
cp /QIBM/ProdData/OS400/jt400/lib/jt400.jar /opt/apiserver/lib
API Serverをバッチジョブとして開始する
実行ユーザーの作成
API Server実行用のユーザーを作成します。
ユーザーID名は任意です。
CRTUSRPRF USRPRF(APISERV)
PASSWORD(*NONE)
TEXT('CDATA API SERVER')
SPCAUT(*ALLOBJ *JOBCTL)
CCSID(5035)
CHRIDCTL(*JOBCCSID)
起動用CLプログラム
以下のようなCLプログラムを作成しました。
PGM
ADDENVVAR ENVVAR(JAVA_HOME) +
VALUE('/QOpenSys/QIBM/ProdData/JavaVM/jdk80/64bit') +
CCSID(5035) LEVEL(*JOB) +
REPLACE(*YES)
SBMJOB CMD(QSH CMD('cd /opt/apiserver; java -jar apiserver.jar')) +
JOB(APISERV) +
JOBQ(QSYS/QSYSNOMAX) USER(APISERV) +
CCSID(5035) CPYENVVAR(*YES) ALWMLTTHD(*YES)
ENDPGM
起動確認
Web Browserで以下のURLにアクセスしてログイン画面が出ればOKです。
http://<IBM iのIPアドレス>:8080/
IBM i のテーブルをAPIとして公開する
DB接続、API公開
DB接続、APIユーザー、テーブルのAPI登録の手順については、CData様が公開されているこちらの記事に掲載されていますので参考にしていただければと思います。
APIServer : DB2 for IBM i (AS/400)のテーブルをノーコードでWeb API化する
さっそくテーブルを1つAPIとして作成
作成といっても、公開したいテーブル、カラムをクリックして選ぶだけ!
(作成したAPI)
APIとして公開する設定をすると、自動的にAPIのマニュアル(swagger)も自動生成されます。
作成したREST APIをVS Codeから叩いてました。
(リクエスト)
(レスポンス)
あっという間にREST APIが出来てしまいました!
今回のまとめ
IBM i 上でAPI Serverを動かすメリット
IBM i 上でAPI Serverを動作させることのメリットはやはり、追加でWindowsやLinuxサーバーを立てる必要がないことかなと思います。
ノーコードでできてしまうことで超高速にAPI公開できる生産性の高さもすごいです。
また、IBM i は古くてオープンじゃない?と誤解されている方々へのアピールになるかもしれません。
ユースケースを考えてみる
-
Webアプリケーションでの利用
JavaScriptを使ってWebブラウザからREST APIを呼び出し、IBM i 上のデータとやり取りする。いわゆるAJAXとしての使い方。 -
Mobileアプリからの利用
iOSやAndroidアプリからIBM i 上のデータ照会・更新する。
私の勤め先でもこのパターンでの開発事例があります。 -
ECシステムなど他システムとの連携処理での活用
連携する先のシステム側はWeb-APIを叩ける環境があればよい。
Python, node.js, Goから等、プログラミング言語に依存しない連携手法として使える。 -
ODBC,JDBCではセキュリティ上の観点からユーザーにアクセスさせないが、一部のデータのみセキュアな方法で公開したいケース
ODataをサポートしているアプリケーション(TableauなどのBI製品)に対し、必要なデータをリアルタイムに公開できる。
Web-APIはhttpによる通信のため、ファイヤーウォールでの制御も容易。 -
CLやRPGからIBM i以外のRDBやクラウドサービスと連携する
今回はIBM i のDBをAPI化しましたが、MySQL, PostgreSQL, SQL Server, OracleなどのDBも同じようにノーコードでAPI化できる。
IBM i に提供されているWeb-APIを叩くSQL関数と組み合わせて使えば、CLやRPGプログラムから他RDBへリアルタイムにアクセスすることができる。
いろいろと活用シーンがありそうですね。
上記のユースケースを今後機会があれば試してみてみたいと思います。