8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CData SoftwareAdvent Calendar 2021

Day 8

IBM i にCData API Serverをインストールして30分でREST-APIを作成

Posted at

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/
image.png

製品のインストール

setup.jarをIFS上のディレクトリにアップロードする。

ダウンロードしたファイルにあるsetup.jarをFTPなどでIFS上のディレクトリへアップロードします。
今回は/tempにアップロードしました。
image.png

インストーラーの実行

setup.jarを実行するにはsshでIBM iに接続するほうがLinuxと同じような感覚で進められますが、sshdが動いていない環境もあるので、今回は5250エミュレーター画面よりQSHELLを使って実行します。

5250エミュレータの接続構成は、英小文字が文字化けしないようコードページを939又は1399にしてください。

ジョブのCCSIDを5035にしてください。
CHJOB CCSID(5035)

コマンドラインよりQSHと入力して、QSHELLを起動します。
image.png

setup.jarを実行します。

QSHELL
cd /temp 
java -jar setup.jar

以下の画面のようにインストラーが起動したら画面の指示に従って進めます。

image.png
確認画面で「1」を入力し、実行キーでインストール。
API ServerはデフォルトでIFS上の/opt/apiserverディレクトリにインストールされます。
image.png

JDBC Driverの配置

IBM i へ接続するためにはJDBC Driver(jt400.jar)をAPI Serverに認識させる必要があります。
API ServerのlibディレクトリにDriverを配置することで認識します。
QSHELLからcpコマンドでjt400.jarをコピーします。

QSHELL
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プログラムを作成しました。

STRAPISERV.CLP
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/
image.png

IBM i のテーブルをAPIとして公開する

DB接続、API公開

DB接続、APIユーザー、テーブルのAPI登録の手順については、CData様が公開されているこちらの記事に掲載されていますので参考にしていただければと思います。

APIServer : DB2 for IBM i (AS/400)のテーブルをノーコードでWeb API化する

さっそくテーブルを1つAPIとして作成

作成といっても、公開したいテーブル、カラムをクリックして選ぶだけ!
(作成したAPI)
image.png

image.png

APIとして公開する設定をすると、自動的にAPIのマニュアル(swagger)も自動生成されます。
image.png

作成したREST APIをVS Codeから叩いてました。

(リクエスト)
image.png
(レスポンス)
image.png
あっという間に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へリアルタイムにアクセスすることができる。

いろいろと活用シーンがありそうですね。
上記のユースケースを今後機会があれば試してみてみたいと思います。

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?