こんにちは。CData リードエンジニアの杉本です。
以前、CData Driverでログを出力する方法を紹介したのですが、場合によってはCData Driverのリクエスト・HTTPトラフィックをリアルタイムで観察したい、という場合もあります。
https://www.cdata.com/jp/blog/2018-12-07-110000
例えば 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リクエストをキャプチャ・ウォッチする方法をお伝えしたいと思います。
必要なもの
CData DriverのデータソースはHTTPのプロトコルベースのAPIを利用するものであれば、なんでもかまいません。
例えば、kintone、Salesforce、Dynamics 365、Sansan、などなど。
逆にFTPドライバーやMail(IMAP・SMTP)といった、固有プロトコルベースのものや、Oracle、SQL Serverといったものはウォッチできませんので注意しましょう。
今回はわかりやすいように、kintone Driver を対象としてウォッチしてみたいと思います。
テクノロジーは何でも構いませんが、今回はWindowsマシンでJDBC Driverを利用しました。
また、予め Fiddler もインストールしておいてください。
https://www.telerik.com/fiddler
手順
Fiddlerの事前準備
CData Driver からリクエストされるHTTPリクエストはほとんどが、HTTPS通信になるので、予めFiddlerでHTTPS通信をキャプチャできるように設定しておきます。
Fiddlerを立ち上げた後、「Options」に移動し
「HTTPS」タブから「Cpature HTTPS CONNECTs」と「Decrypt HTTPS traffix」にチェックを入れます。
また、Fiddler でリッスンするポートを明示的に指定しておきましょう。「Connections」タブから「Fiddler listens on port」で任意のPortとして今回は「8888」を指定します。
CData Driver側の準備
次にCData Driver側を準備します。
今回はJDBC Driverなどで、実行できる環境として DbVisualizer を選択しました。
https://www.cdata.com/jp/drivers/kintone/jdbc/
インストール後、DbVisualizer の Driver Manager に対象のjarファイルを登録し
kintone用の接続文字列 に加えて「ProxyAutoDetect=false; ProxyServer=127.0.0.1; ProxyPort=8888;SSL CERT=*;」を指定します。
これで、 Fiddler でHTTPリクエストがキャプチャできるようになります。
SQLを実行しHTTPリクエストをキャプチャする
それでは実際にHTTPリクエストをキャプチャしてみます。
まずは、kintone のアプリ一覧を取得するために「SELECT * FROM Apps」をリクエストしてみます。
上記SQLを実行すると、以下のようなHTTPリクエスト郡をキャプチャできました。
具体的なリクエストは「Inspectors」タブを選択することで確認できます。レスポンスもkintone API が JSONフォーマットで返すので、JSONタブを選択すると整形されて見やすい形になります。
ちなみに、リクエストの数が多いなと思われるかもしれませんが、これは初回接続の際に行われる準備処理を含むためです。CData kintone Driver は一番最初の接続の時にすべてのアプリを取得して、スキーマを構成しています。そのため、このように初回のリクエストが数多く発生します。
次にアプリから実際のレコードを取得してみます。営業支援パックで追加していたアプリをセレクトするために「SELECT * FROM [顧客管理(営業支援パック)];」をリクエストしてみます。
すると、以下のように「records.json」エンドポイントにリクエストが実行されました。limit 500件でJSONデータを取得していることがわかります。
それでは、WHERE句を使った場合、どのようにリクエストされたかを見てみます。
郵便番号フィールドに対して、完全一致検索として「SELECT * FROM [顧客管理(営業支援パック)] WHERE [郵便番号] = '5010001';」をクエリしてみます。
すると API リクエストでも郵便番号に対して完全一致検索のリクエストが飛んでいることが確認できました。
おわりに
このように Fiddler でキャプチャすることで CData Driver がどのように SQL構文を解析して API リクエストを生成しているもわかります。
ぜひ一度試してみてください。
関連コンテンツ