API Server で作ったAPI のデータを、やっぱりアプリケーションではSQL で使う

#せっかくJSON で連携してるのに、アプリ側ではテーブルデータをSQL したいという矛盾
[RDBからWebAPIをポイント＆クリックで作成](https://qiita.com/kuwazzy/items/c664570c9d4732a57fac) のようにAPI を簡単に作れるAPI 管理ツールが充実してきています。API を作るというハードルはどんどん下がってきました。ところが、「作ったAPI をカスタムアプリや、BI、ETL などのツールから使う方が面倒」という声も聞かれるようになりました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/116843/2d6b3cbc-d52e-38ef-cc40-f545098322d9.png)

元々DB やCSV を直つなぎして、アプリケーション、BI、帳票、ETL ツールなどから使っていた訳です。データの基本はテーブル型でスキーマの付いたデータで、処理言語はSQL です。ところが、今どきのデータ連携はの主流はWeb API での連携です。しかし、これまで使っていたアプリケーション資産や分析、データ連携のツールをすべてREST/JSON ベースのものに置き換えることは容易ではないです。つまり、データ形式がJSON になっても、アプリ側では、JSON ではなく、RDB データをSQL で扱う仕様になっているというギャップがあります。

さらに言えば、REST API はただのアーキテクチャデザインであって、メタデータを提供されない限り、アプリケーションで使いやすい形でデータを提供しているとは言えないという事情もあります。

>「なら、API をアプリ側でODBC/JDBC で叩けるようにすればいいんだ。」

そこで、CData API Server で作ったAPI をアプリケーション、ツール側でODBC/JDBC に直してAPI をSQL で使えるようにするのがCData API Driver (ODBC/JDBC/ADO.NET）です。

#CData API Server でDB やCSV からREST API を生成
[RDBからWebAPIをポイント＆クリックで作成](https://qiita.com/kuwazzy/items/c664570c9d4732a57fac) をご参照。

#API Server のAPI をODBC で使えるようにする
API を使う側で、今度はAPI Server のエンドポイントをSQL で扱えるようにします。

##CData API Driver をダウンロード
[API Server ODBC Driver ダウンロード](https://www.cdata.com/jp/apidriver/) からダウンロードして、インストールします。この記事ではWindows 版のODBC Driver です。ODBC Driver はMac OS 版とUnix/Linux は別途あります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/116843/d673845f-7fa7-8db4-ce47-f957d5fb5c81.png)

そのままインストールを進めます。インストールが完了するとODBC のDSN 構成画面が開きます。

DSN 構成画面のAuthentication の以下のプロパティに接続するAPI Server の認証情報を入力します。

* Url:API Server のURL:　https://myAPIServer.com/api.rsc
* Auth Token: API Server のユーザーを登録した際に生成されるAuth Token 
* Auth Scheme: NONE 


![image.png](https://qiita-image-store.s3.amazonaws.com/0/116843/42593856-7a6b-a265-b388-abc0442816fe.png)

ちなみに、BASIC 認証やWindows 認証を選択することも可能です。

認証情報を入力したら、「接続のテスト」をクリックして接続の確認を行います。確認出来たらOK を押して接続を確立します。

これでODBC の設定は終わりです。

次にいくつかのアプリケーション・ツールからAPI をODBC で叩いてみます。

#Visual Studio からの使用
「サーバーエクスプローラー」から「新しい接続の追加」をクリック。データソースの選択画面で「Microsoft ODBC データソース」を選択して、「続行」を押します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/116843/884b5440-3baa-6205-7391-4dfc736a4f39.png)

接続の追加画面で、データソースは、ODBC のまま。
「ユーザーデータソース名またはシステムデータソース名を使用」のドロップダウンで先ほど追加したAPI Server のODBC ソースを選択します。

ログイン情報は入力不要で、「テスト接続」→OK で設定を完了します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/116843/8cec82d3-3688-e2b5-62a0-7b41695cf287.png)

これでサーバーエクスプローラーで、API Server のエンドポイントがテーブル・ビュー・ストアドプロシージャにモデル化されて表示されます。API のエンドポイントですが、見た目はRDB と変わりません。

データを見るとRDB のようにスキーマが定義されています。

通常のSELECT、UPDATE、INSERT、DELETE といったSQL でクエリが可能です。クエリ結果はテーブルデータとして返されます。開発者としてはRDB を叩いている感覚でAPI をコールすることができます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/116843/7223316e-b606-44d3-834c-7cfdbf02bd15.png)

このように開発IDE からODBC 接続でAPI を呼び出すことができます。今回はVisual Studio で行いましたが、Mac ODBC、Unix ODBC のドライバーを使えば、Python、Ruby、PHP、Go といった言語でもODBC インターフェースでのAPI 連携開発が可能です。Java アプリケーション向けにはJDBC Driver があります。

#BI ツールのTableau からAPI にODBC 経由でアクセス
BI ツールのTableau も汎用ODBC インターフェースに対応しています。

データ接続画面の「その他データベース（ODBC）」を選択し、DSN のドロップダウンから設定したAPI Server ODBC ソースを選択します。「接続」を押し、接続が完了したら「サインイン」を押します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/116843/53a30d06-61d7-335b-06ea-cab0c836f259.png)

Tableau のデータソース画面で、左側のデータベースのドロップダウンから「CData」を選択。
左側の「表」で、検索の🔍マークをクリックすると、ODBC 経由でAPI Server の利用可能なエンドポイントがリストされます。Tableau で利用するエンドポイントをドラッグして使うことができます。二つ以上のエンドポイントのJOIN などもこの画面でRDB と同じようにUI から行うことが可能です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/116843/56c8e2ec-42af-20e7-53e2-66d354c15b40.png)

あとは、テーブルデータとしてTableau で分析を行うだけです。

#まとめ
API で連携するニーズがあっても、データを連携して利用する側のアプリケーションがテーブルデータ/SQL をデフォルトとしたアプリケーションやツールである場合には、無理にJSON のままのデータを使うのではなく、ODBC Driver やJDBC Driver の利用がお勧めです。アプリケーションがGUI からSQL を自動生成している場合などは特にドライバー利用の価値が大きいです。
CData API Server では、生成したAPI に最適化されたODBC Driver・JDBC Driver を簡単に作れます。