Morning Girl

Web API, Windows, C#, .NET, Dynamics 365/CRM etc..

無料の API 自動生成ツールを使って、Excelファイルから REST API を生成してみる:CData API Server

今月はじめに CData API Server というAPIの自動生成ツールで無料版・freeのライセンスがリリースされました!

今日はこの CData API Server を使ってExcel ファイルから REST API を生成する方法を解説したいと思います。(ちなみに機能的にはExcel だけでなく、MySQL などのRDBからもAPIの生成が可能です。というかそっちの方がメインです)

ちなみに今回作ったAPIは以下の内容で公開しています。

O'Reilly Demo API

ID:user

Token:7y3E6q4b6V1v9f0D2m9j

f:id:sugimomoto:20200809142815p:plain

CData API Server って何?

CData API ServerMySQLExcelといった様々なデータソース(その数150種類以上!)をもとにOData規格で標準化されたREST ful なAPIを生成するツールです。

f:id:sugimomoto:20191017151103p:plain

どのデータソースからどのデータを公開するのか? をポチポチとクリックしていくだけで、以下のようなAPIドキュメントと一緒にGET/POST/PUT/DELETE をサポートしたREST APIを自動で生成します。

f:id:sugimomoto:20191017151112p:plain

あとはいろんなクライアント・プログラムから使ってもらう感じです。

f:id:sugimomoto:20191017151119p:plain

CData API Server はもともと年間有償ライセンスで提供されていたのですが、最近のアップデートで「SQLite」「Apache Derby」「MySQL」「Excel」のデータソースでの利用が無料になりました!

https://www.cdata.com/jp/apiserver/#purchase

f:id:sugimomoto:20191017151128p:plain

※注意:企業・個人のインターナル・マイクロサービスとしての利用のみ無料で、外部公開・パブリックAPIにする場合は有償ライセンスが必要になります。

なので、今回の記事ではExcelをデータソースにしたAPIの生成方法を解説したいと思います。

また、記事の後半ではAPI Serverのインストール・セットアップ方法と無料版のライセンス購入方法についても記載しています。特に難しいところは無いかな~と思うのですが、よくわからなかった場合は参考にしてみてください。

こんな REST API を生成するよ

さて、Excelから REST APIを生成するわけですが、元になるExcelファイルが無いと始まりません。なので今回は以下のURLで公開されている O'Reilly の書籍リストを元にExcelファイルを作ってみました!

https://www.oreilly.co.jp/catalog/

f:id:sugimomoto:20191017151136p:plain

ここからExcelコピーアンドペーストでベローっと貼り付けて、リンク先のURLを抽出し、ついでに後々のことを考えて画像URLもISBNを元に生成しています。

最終的に出来上がったExcelファイルはこちらです。以下のURLで公開しているので、使ってみてください。

OReillyBookList.xlsx

f:id:sugimomoto:20191017151147p:plain

実施手順

以下のような手順でAPIが作成できます。

  1. Excel データソースの接続設定を追加する
  2. ExcelのシートをAPIリソースとして追加する
  3. アクセス用のユーザーを追加する
  4. 生成されたAPIに対してアクセスする

ざっと全体像がわかるGIFアニメも作成しておいたので、合わせて参考にしてみてください。

https://cdatajbuilds.s3-ap-northeast-1.amazonaws.com/sugimototest/oreilly.gif

1. Excel データソースの接続設定を追加する

それではAPIを作っていきましょう。「接続」→「接続」をクリックすると、データソースとして登録できるサービスの一覧が表示されるのでその中から Excel を選択します。

なお、デフォルトではExcelデータソースが使えないので、 こちら の手順を元にコネクタをインストールしておきます。(私の環境は色々と試しているので、いっぱいデータソースがあります)

f:id:sugimomoto:20191017151246p:plain

接続情報を入力する画面では、Excelファイルのファイルパスを入力します。

入力後「接続テスト」をクリックし、接続成功のメッセージが出たら、設定を保存します。

f:id:sugimomoto:20191017151257p:plain

これで、以下のように接続情報が構成されればOKです。

f:id:sugimomoto:20191017151306p:plain

2. ExcelのシートをAPIリソースとして追加する

次に Excel のどのシートを REST API として生成するのかの設定を行います。

「リソース」タブに移動し「リソースを追加」をクリックします。

f:id:sugimomoto:20191017151313p:plain

まず先程作成した対象の接続情報を選択し

f:id:sugimomoto:20191017151322p:plain

次にExcelファイルに含まれるシートを選択します。今回のExcelファイルは1シートしかないので、以下のように一つだけがリソースとして追加できます。複数シートを一括でAPI化することも可能です。

f:id:sugimomoto:20191017151329p:plain

最後に対象のリソース名(URLリソース名になります)と、どの操作を許容するのか(参照・作成・更新・削除)、どのカラムを公開するのか、を選択し保存するだけでAPIの作成が完了します。

f:id:sugimomoto:20191017151338p:plain

以下のようにリソースが保存されていればOKです。

f:id:sugimomoto:20191017151348p:plain

3. アクセス用のユーザーを追加する

最後にAPIアクセス用のユーザーを作成します。このユーザー情報とユーザーの認証トークンを使ってAPIアクセスを行います。

「ユーザー」タブに移動し「追加」ボタンをクリック

f:id:sugimomoto:20191017151356p:plain

ユーザー名と有効期限(0であれば永続です)、操作権限やリクエストリミットなどを設定し、保存するだけでOKです。

f:id:sugimomoto:20191017151404p:plain

ユーザーが作成されると、以下のように認証用トークンも自動生成されるので、これを控えておきましょう。

f:id:sugimomoto:20191017151409p:plain

4. 生成されたAPIに対してアクセスする

それでは作成したAPIにアクセスしてみましょう。APIタブに移動すると、作成されたAPIの仕様を確認することができます。

f:id:sugimomoto:20191017151418p:plain

GET/POST/PUT/DELETEのエンドポイントがそれぞれ実装されていて、各メソッドに応じて、データの参照・作成・更新・削除が実施可能です。

f:id:sugimomoto:20191017151426p:plain

GETのリクエストURLをそのままブラウザに貼り付けると、レスポンスがJSONで返ってくることがわかります。

f:id:sugimomoto:20191017151434p:plain

もちろん、POSTMANなどのクライアントからも実行可能です。先程作成した認証Tokenをヘッダーx-cdata-authtokenに付与してリクエストすることでデータの取得ができます。

GET /api.rsc/CData_Excel_OReillyBookList/ HTTP/1.1
Host: localhost:8387
x-cdata-authtoken: 1q0E5n7v8V1k4r1U5g0e

f:id:sugimomoto:20191017151441p:plain

ちなみにCData API Server は各クエリパラメータをサポートしてます

$select で取得したい項目 $filter でフィルタリング $orderby で並び替え $top で上位N件取得等。

例えば2000円以下の本のタイトルと値段を取得して、値段安い順に並び替えて、TOP5を表示だと以下のようなURLクエリパラメータで取得することができます。

http://localhost:8387/api.rsc/OReillyBookList/?$select=Price,Title&$filter=Price le 2000&$orderby=Price&$top=5

f:id:sugimomoto:20191017151450p:plain

もちろん、以下のようにPSOTリクエストでリソース作成を実行すると

POST /api.rsc/CData_Excel_OReillyBookList HTTP/1.1
Host: localhost:8387
x-cdata-authtoken: 1q0E5n7v8V1k4r1U5g0e
Content-Type: application/json

{
    "Price": "1100",
    "Title": "新しい本"
}

Excelファイルに直接新しいデータが挿入されます。

f:id:sugimomoto:20191017151458p:plain

なので、Excelファイルをデータソースとした簡単なAPIベースのアプリケーションも作成できますね。

補足

以下、API Serverのダウンロード方法や補足情報、ライセンスの購入、Excelデータソースの有効化の方法をまとめておきました。

Excelデータソースだけちょっと特殊な手順が必要なので注意してください。

API Server のダウンロード・インストール方法

CData API Server は以下のURLから入手できます。

https://www.cdata.com/jp/apiserver/

画面中央(もしくは右上)のダウンロードをクリックしてください。

f:id:sugimomoto:20191017151507p:plain

今回はWindows版で進めますが、Corss-Platform版であればLinuxUnixの環境でも動作させることが可能です。

f:id:sugimomoto:20191017151513p:plain

必要事項を記入し、ダウンロードをクリックするとダウンロードが開始されます。

f:id:sugimomoto:20191017151519p:plain

f:id:sugimomoto:20191017151536p:plain

ダウンロードが完了し、インストーラーを立ち上げるとセットアップ用のダイアログが表示されます。ほとんどデフォルトのまま進めていけますが、一部最初に管理者用のパスワードを設定するところがあるので注意してください。

f:id:sugimomoto:20191017151541p:plain

ライセンス契約書を読み、同意するをクリック

f:id:sugimomoto:20191017151546p:plain

インストール先フォルダは特に任意の場所が無ければ、デフォルトのままで大丈夫です。

f:id:sugimomoto:20191017151550p:plain

コンポーネントはそのままデフォルトで進めます。

f:id:sugimomoto:20191017151555p:plain

ここも次へをクリックします。

f:id:sugimomoto:20191017151601p:plain

ここの画面でCData API Serverにログインするための管理者パスワードを設定します。(APIアクセスのパスワード・認証トークンとは別なので注意してください。)

f:id:sugimomoto:20191017151610p:plain

これで準備完了です。インストールを進めます。

f:id:sugimomoto:20191017151616p:plain

インストール後「完了」をクリックすることで、API Serverが自動的に立ち上がります。

f:id:sugimomoto:20191017151621p:plain

先程のパスワードとユーザー名「admin」でログインできます。

f:id:sugimomoto:20191017151626p:plain

以下のようにステータスダッシュボードが表示されればOKです。ただ、まだライセンスは設定されていない状態なので、次の章で無償版ライセンスを入手します。(ちなみに30日間の上位ライセンスによるトライアルはそのまま実施可能です。)

f:id:sugimomoto:20191017151633p:plain

無償(Free)版ライセンスの入手方法

それではAPI Serverに設定するライセンスを入手してみたいと思います。

※ちなみに、サクッとフル機能を試したい場合は、以下の30日間トライアルの方が簡単です。こっちだと、SQL ServerPostgreSQLOracleやMongoDBといった他のデータソースのAPI生成も試すことができます。

f:id:sugimomoto:20191018183504p:plain

まず、以下のURLにアクセスし、無償版の申し込みをクリックします。

https://www.cdata.com/jp/apiserver/#purchase

f:id:sugimomoto:20191017151640p:plain

ショッピングカート画面に行くので、内容を確認し「注文手続きへ」をクリックします。

f:id:sugimomoto:20191017151648p:plain

オンライン注文書の画面で会社名などを入力し「注文を送信する」をクリックすれば、

f:id:sugimomoto:20191017151656p:plain

無償版ライセンスの購入が完了です。

f:id:sugimomoto:20191017151703p:plain

以下のように注文完了メールが届き、1~2営業日以内にライセンスも発行されて届きます。

f:id:sugimomoto:20191017151710p:plain

ライセンスが届いたら、API Serverの管理画面、「情報」タブから「新しいライセンスをインストール」をクリックし、ライセンスを登録します。

f:id:sugimomoto:20191017151717p:plain

名前とメールアドレス、メールで送られてきたプロダクトキーを入力し、Terms and Confitionsを確認の上、「ライセンスをインストール」をクリックすればOKです。

f:id:sugimomoto:20191017151725p:plain

無事ライセンスが有効化されました。

f:id:sugimomoto:20191017151731p:plain

API Server にExcelデータソースの機能を追加する方法

前述の通り、API Server はデフォルト状態でExcelをデータソースとして扱うことができません。

別途 CData ADO.NET Provider から Excel ADO.NET Providerを入手して、インストールする必要があります。

f:id:sugimomoto:20191017151738p:plain

Excel ADO.NET Providerは以下のページから入手できます。

https://www.cdata.com/jp/drivers/excel/ado/

f:id:sugimomoto:20191017151748p:plain

ダウンロードは評価版をクリックしてください。

f:id:sugimomoto:20191017151757p:plain

必要事項を記入の上、ダウンロードをクリックすることでインストーラーを入手できます。

f:id:sugimomoto:20191017151837p:plain

インストーラーを実行すると、セットアップ用ダイアログが表示されます。特に特別な構成はなく、そのまますべてデフォルトで進めていくだけで大丈夫です。

f:id:sugimomoto:20191017151845p:plain

最初にライセンス契約書は確認し「同意する」をクリックしておきます。

f:id:sugimomoto:20191017151852p:plain

インストーラー先を選択し

f:id:sugimomoto:20191017151857p:plain

コンポーネントを選択します。必須なのはADO.NET Providerのみですが、デフォルトのままでも大丈夫です。

f:id:sugimomoto:20191017151902p:plain

スタートメニューフォルダを選択し

f:id:sugimomoto:20191017151908p:plain

ツールボックスもデフォルトで大丈夫です。

f:id:sugimomoto:20191017151913p:plain

あとは「インストール」をクリックすればOKです。

f:id:sugimomoto:20191017151918p:plain

インストール完了後、API Serverを再起動し、接続画面に移動すると「Excel」データソースが使えるようになります。

f:id:sugimomoto:20191017151923p:plain

ちなみに無償版の範囲外ですが、CSVXMLなどのファイルやMongoDBやRedisなどもAPIのデータソースとして、このようにCData ADO.NET Providerを入手することで対応可能です。

参考情報

CData API Server で REST ful APIを作って、SwaggerHub でさくっと API ドキュメントを公開する

CData API Server(Windows版)を使ってKintoneのWeb APIをOData形式に変換する(API Server拡張ドライバー追加方法)

Azure SQL DatabaseをCData API ServerでWeb API(OData)アクセスできるように構成してみる その1 Web Apps構成編