CData Software Blog

クラウド連携のCData Software の技術ブログです。

CData Driver の HTTP/HTTPS通信を Fiddler でキャプチャする:kintone API

こんにちは。CData リードエンジニアの杉本です。

以前、CData Driverでログを出力する方法を紹介したのですが、場合によってはCData Driverのリクエスト・HTTPトラフィックをリアルタイムで観察したい、という場合もあります。

www.cdatablog.jp

例えば API Limitを意識した開発を行いたい場合は、自身が記述したSQLをCData Driverがどのくらい、どんなAPIリクエストを実行しているのか、気になると思います。

また、CData Driverはサーバーサイドが許容しないフィルターなどを利用するSQLを記述した場合、Enhanced SQLという機能によって、一度全件データを取得してから、インメモリで処理をする、という動作をするため思わぬAPIリクエストを生む可能性があります。

http://cdn.cdata.com/help/EKE/jp/odbc/RSBKintone_p_SupportEnhancedSQL.htm

こういった側面をウォッチしたい場合は、Web Debugging ツールを使用して、APIリクエストをウォッチするのがおすすめです。

ツールは様々ありますが、今回は個人的にも使いやすくておすすめな Fiddler で CData DriverのAPIリクエストをキャプチャ・ウォッチする方法をお伝えしたいと思います。

f:id:sugimomoto:20200426212002p:plain

必要なもの

CData DriverのデータソースはHTTPのプロトコルベースのAPIを利用するものであれば、なんでもかまいません。

例えば、kintone、Salesforce、Dynamics 365、Sansan、などなど。

逆にFTPドライバーやMail(IMAPSMTP)といった、固有プロトコルベースのものや、OracleSQL Serverといったものはウォッチできませんので注意しましょう。

今回はわかりやすいように、kintone Driver を対象としてウォッチしてみたいと思います。

テクノロジーは何でも構いませんが、今回はWindowsマシンでJDBC Driverを利用しました。

また、予め Fiddler もインストールしておいてください。

https://www.telerik.com/fiddler

f:id:sugimomoto:20200426212010p:plain

手順

Fiddlerの事前準備

CData Driver からリクエストされるHTTPリクエストはほとんどが、HTTPS通信になるので、予めFiddlerHTTPS通信をキャプチャできるように設定しておきます。

Fiddlerを立ち上げた後、「Options」に移動し

f:id:sugimomoto:20200426212018p:plain

HTTPS」タブから「Cpature HTTPS CONNECTs」と「Decrypt HTTPS traffix」にチェックを入れます。

f:id:sugimomoto:20200426212023p:plain

また、Fiddler でリッスンするポートを明示的に指定しておきましょう。「Connections」タブから「Fiddler listens on port」で任意のPortとして今回は「8888」を指定します。

f:id:sugimomoto:20200426212029p:plain

CData Driver側の準備

次にCData Driver側を準備します。

今回はJDBC Driverなどで、実行できる環境として DbVisualizer を選択しました。

https://www.cdata.com/jp/drivers/kintone/jdbc/

f:id:sugimomoto:20200426212035p:plain

インストール後、DbVisualizer の Driver Manager に対象のjarファイルを登録し

f:id:sugimomoto:20200426212042p:plain

kintone用の接続文字列 に加えて「ProxyAutoDetect=false; ProxyServer=127.0.0.1; ProxyPort=8888;SSL CERT=*;」を指定します。

f:id:sugimomoto:20200426212049p:plain

これで、 Fiddler でHTTPリクエストがキャプチャできるようになります。

SQLを実行しHTTPリクエストをキャプチャする

それでは実際にHTTPリクエストをキャプチャしてみます。

まずは、kintone のアプリ一覧を取得するために「SELECT * FROM Apps」をリクエストしてみます。

f:id:sugimomoto:20200426212057p:plain

上記SQLを実行すると、以下のようなHTTPリクエスト郡をキャプチャできました。

具体的なリクエストは「Inspectors」タブを選択することで確認できます。レスポンスもkintone APIJSONフォーマットで返すので、JSONタブを選択すると整形されて見やすい形になります。

ちなみに、リクエストの数が多いなと思われるかもしれませんが、これは初回接続の際に行われる準備処理を含むためです。CData kintone Driver は一番最初の接続の時にすべてのアプリを取得して、スキーマを構成しています。そのため、このように初回のリクエストが数多く発生します。

f:id:sugimomoto:20200426212107p:plain

次にアプリから実際のレコードを取得してみます。営業支援パックで追加していたアプリをセレクトするために「SELECT * FROM [顧客管理(営業支援パック)];」をリクエストしてみます。

f:id:sugimomoto:20200426212116p:plain

すると、以下のように「records.json」エンドポイントにリクエストが実行されました。limit 500件でJSONデータを取得していることがわかります。

f:id:sugimomoto:20200426212123p:plain

それでは、WHERE句を使った場合、どのようにリクエストされたかを見てみます。

郵便番号フィールドに対して、完全一致検索として「SELECT * FROM [顧客管理(営業支援パック)] WHERE [郵便番号] = '5010001';」をクエリしてみます。

f:id:sugimomoto:20200426212130p:plain

すると API リクエストでも郵便番号に対して完全一致検索のリクエストが飛んでいることが確認できました。

f:id:sugimomoto:20200426212136p:plain

おわりに

このように Fiddler でキャプチャすることで CData Driver がどのように SQL構文を解析して API リクエストを生成しているもわかります。

ぜひ一度試してみてください。