はじめに
CData API Server(以下、APIServer)は、ポイント&クリック操作だけで超高速にMySQLやSQLServerなどのデータベースからWebAPIを自動生成出来る製品です。
最新版のAPIServer(2018/07執筆時点)では、これまで、APIServerの管理者が、管理用コンソールのGUIから手動で行なっていたコネクション・リソース(テーブル)・ユーザーの追加などの作業を、REST-APIから実行出来るようになりました。本記事では、リソースの追加、および、リソースへのアクセス可能なユーザの付与を管理用APIから実行する方法をご紹介します。
前提
- CData API Server(Java版)がTomcat上で動作していること
- API実行用ソフトウェアPOSTMANが利用出来ること
- DBVisualizerなどJDBCドライバ経由でのSQLを実行できるツールが利用出来ること
CData API Server(Java版)のTomcatへのデプロイ方法についてはこちらの[1. APIServerのデプロイ環境を構築 【デプロイ機】]
(https://qiita.com/kuwazzy/items/64bf953df24fd52811da#1-apiserver%E3%81%AE%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E7%92%B0%E5%A2%83%E3%82%92%E6%A7%8B%E7%AF%89-%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E6%A9%9F)をご覧ください。
CData APIServerのビルド
こちらのリンクのビルドをダウンロードしてご利用ください。
管理用APIへのアクセス権限の付与
デフォルトでは管理用APIはオフになっています。下記のweb.xmlファイルをエディタなどで開きます。
[tomcatroot]/webapps/apiserver/WEB-INF/web.xml
「<display-name>Restrict direct access to the Management API</display-name>」 を探し、「<auth-constraint>」に下記の通り「<role-name>cdata_admin」を追加します。これによって、「cdata_admin」ロールに属するユーザ(具体的には、adminユーザ)が管理用APIにアクセス出来るようになります。
<security-constraint>
<display-name>Restrict direct access to the Management API</display-name>
<web-resource-collection>
<web-resource-name>Management API</web-resource-name>
<url-pattern>/admin.rsc/*</url-pattern>
<url-pattern>/admin.rst/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>cdata_admin</role-name>
</auth-constraint>
</security-constraint>
Web.xmlを変更が完了したらTomcatを再起動してください。
次に、APIServerの管理コンソールにadminユーザでログインして、APIアクセス用の「admin」ユーザを「設定 > ユーザー」タブから追加します。
ユーザーまたはグループには、「admin」、Groupのチェックボックスは不活性、今回は、リソースの追加をPOSTメソッドで行うので、権限のPOSTにはチェックを入れてください。
ユーザを生成すると認証トークンが表示されます。管理用APIにアクセスするためには、この認証キーが必要となりますので手元に控えておりてください。
ついでに、(管理用APIではなく)データソースのリソースへのAPIアクセス用のユーザがなければ追加しておいてください。ユーザー名は任意のもので構いません。
接続・およびリソース画面の確認
今回は、既存の接続を使い、リソース(テーブル)を管理用APIで追加したいと思いますので、コネクションがなければ追加してください。また、リソース画面は、空の状態を前提に進めます。
管理用API仕様書へのアクセス
それでは、下記URLのように「amin.rst」を開いてみましょう。
http://localhost:8080/apiserver/admin.rst
下記のように、アクセスが拒否される場合は、web.xmlを再確認、および、Tomcatを再起動してみてください。
下記のように管理用のAPI仕様書のページが表示されれば成功です。
管理用APIから操作可能なリソースは左下のリンクから詳細を確認することが出来ます。
リソース | メソッド | 説明 |
---|---|---|
ActionParameters | GET / POST /PUT /DELETE | アクション(ストアドプロシージャ)のパラメータ |
Actions | GET / POST /PUT /DELETE | アクション(ストアドプロシージャ) |
Connections | GET / POST /PUT /DELETE | 接続 |
Providers | GET | ADO.NETプロバイダ、もしくは、JDBCドライバ |
ResourceColumns | GET / POST /PUT /DELETE | リソース(テーブル、ビュー)のカラム |
Resources | GET / POST /PUT /DELETE | リソース(テーブル、ビュー) |
Users | GET / POST /PUT /DELETE | ユーザー |
管理用APIへのアクセス
リソースから「/admin.rsc/Connections」を選択して、右側にHTTPメソッドの詳細が表示されるので、GETメソッドのURLをクリップボードにコピーします。
同一ブラウザの新しいタブで本URLを開くことで、接続(データソースへの接続情報)の一覧を参照することが出来ます。
次に、リソースの追加を管理用APIから実行してみます。追加はPOSTメソッドとなるため、API実行用のソフトウェアとしてPOSTMANから実行します。
項目 | 値 |
---|---|
メソッド | POST |
URL | http://localhost:8080/apiserver/admin.rsc/Resources/ |
Headers_key1 | x-cdata-authtoken |
Headers_Value1 | ************ (adminユーザの認証キーをセット) |
Headers_key2 | Content-Type |
Headers_Value2 | application/json;charset=utf-8 |
Body | 別途下記に記載 |
headersサンプル
Bodyサンプル
{
"Operations": "GET",
"Name": "actor",
"tableName": "actor",
"Description": "作成、更新、クエリ、および削除actor",
"RestrictToRole": "",
"RestrictToUser": "user01",
"ConnectionName": "MySQL"
}
RestrictToUserに本リソースにアクセス可能なAPIServerのユーザを指定することでリソース毎のアクセス権コントロールが可能となります。
実行します。レスポンスの「Status」が「201 Created」で、レスポンスBodyに追加された情報が表示されれば成功です。
それでは、APIServerの管理コンソールで「設定 > リソース」タブを開いて作成されたリソースを開いて確認してみます。APIでのリクエストBodyの内容で作成されたことを確認することが出来れば成功です。
JDBCドライバからの管理APIの実行
JDBCドライバのインストール
CData JDBC driver for APIServerをこちらのリンクからダウンロードしてください。Setup.zipを解凍してsetup.jarを実行してJDBCドライバをインストールします。
DBVisualizerの設定
DriverManagerにてインストールしたJDBCドライバをロードします。
※Windowsマシンの場合のデフォルトインストールパスは「C:\Program Files\CData\CData JDBC Driver for APIServer 2018J\lib」です。
Connectionを作成します。Driverは先のDriverManagerで作成したDriverを選択して、DatabaseURLには下記の情報をセットします。
jdbc:APIServer:URL=http://localhost:8080/apiserver/admin.rsc;AuthToken=*********;
※AuthTokenは「admin」ユーザの認証トークンをセットしてください。
Connectして、左側のConnectionリスト内の作成したコネクションを開いていくと「TABLE」に管理用APIのリソース一覧が表示されば、JDBCドライバから、APIServerの管理APIへの接続は成功です。
SQLCommanderを開いて、下記のSQLを実行してリソースを追加してみます。テーブル名や接続名は環境に合わせて任意のものに変更してください。
INSERT INTO Resources
(Name, ConnectionName, Description, Operations, RestrictToRole, RestrictToUser, tableName) VALUES
('actor2', 'MySQL', '', 'GET', '', 'user01', 'actor');
SQLの実行がSuccessfulで完了することを確認します。
APIServerのリソース画面を開き、SQLのInsert文で追加したリソースが表示されていれば成功です。
まとめ
APIServerの管理用APIを使ってリソース(テーブル)の追加をAPIから実施しました。本APIやSQLをバッチプログラムなどで実行することでAPI管理業務を自動化することが出来ます。