記事の途中ですが、なかなか進まないので公開しておきます。
kintoneの公式リファレンスの kintone REST APIのクエリの条件指定 について、コミュニティのQ&A に度々質問が寄せられて、自分でもモヤモヤしていたので調べたことを書き留めておきます。
#目的
- kintoneのカスタマイズの際に通常は kintone JavaScript API を通して利用する kintone REST API のクエリ指定とkintoneのコマンドラインツールのcli-kintoneのクエリ指定。また、kintoneの一覧画面の設定について考えてみることで、クエリ指定の仕様を理解する。
- クエリ指定の仕様を理解することで、クエリ文字列の指定について理解する。
#クエリ指定とは何か
- 例えば、kintone REST API のレコード一覧取得(GET)の際のレコードの絞り込み条件に指定する文字列のこと。
- SQLライクに like演算子やor,and、関数が用意されています。また、オプションで order by等を設定出来ます。
#kintoneの一覧画面のクエリ指定
kintoneのアプリを作成する際に、もれなくついてくる一覧画面はおそらく REST API を裏で叩いています。(のはず)
その確認に一覧画面を表示した状態で、Chromeのデベロッパーツールを起動してコンソールにkintone JavaScript APIのレコード一覧のクエリ文字列を取得する(order by, limit, offset付き)のサンプルコードを貼り付けてEnterを押下します。
var query = kintone.app.getQuery();
console.log(query);
// 取得した値の例
// 'record_id <= "5" and creator in ("Administrator") order by record_id desc limit 5 offset 10'
こんな感じで一覧画面で発行されているクエリを確認することが出来ます。
###kintone JavaScript API と kintone REST API について
混在しやすいですが、kintone JavaScript API はその名の通り、kintoneのJavaScript ライブラリという理解で良いかと思います。専用の関数をJavaScriptから直接利用できるようになっています。上記の kintone.app.getQuery()
も専用の関数の1つです。
こちらからkintone JavaScript API一覧を見てもらうと出来ることが一覧で載っていますが、ざっくりと自分なりにイメージした分類を付け加えて見ました(プラグインを除く)。
- イベント ・・・ JavaScriptの世界(app.record.index.showなど)
- イベントハンドラーの登録・削除 ・・・ JavaScriptの世界(kintone.events.on)
- API実行 ・・・ kintone JavaScriptの世界(kintone.api)
- 情報の取得・設定 ・・・ kintone JavaScriptの世界
- フィールド表示・非表示 ・・・ kintone JavaScriptの世界
- 要素の取得 ・・・ kintone JavaScriptの世界
###kintone JavaScriptの世界へようこそ!
上記の3.~6.までをkintone JavaScriptの世界と分類したのは、ログインユーザー情報とUIバージョンの取得以外は、kintone.app~から始まる関数になっているからです。
基本的にはブラウザ側に処理が移ってからのフロントエンド側の話しなので、一般的にはDOMをJavaScriptで操作することになるのですが、かなり複雑なDOMの構造になっているので、DOM操作を簡単にする為に専用の関数が用意されていると思われます。
1.と2.はセットで使います。イメージとしては、kintoneの世界よりも一般的なブラウザのイベント処理の世界という理解で良いかと思います。
ボタンをクリックした時のイベントと同じように、kintoneの専用イベントが用意してあって、専用のイベントハンドラー関数であらかじめ登録しておくことで、イベントが発生した際に処理が発火するようにします。
###kintone.apiとkintone REST APIの関係
3.のAPI実行にある、kintone.api(pathOrUrl, method, params, opt_callback, opt_errback)
がkintone JavaScriptの世界からkintoneのREST APIを叩く(kintone REST APIリクエストを送信する)専用の関数になります。
この関数がkintone JavaScriptの世界とkintoneの世界(kintoneデータベース?)を橋渡しする役割をしています。
#kintone REST API
kintone REST APIについては下記のリンクを参照。
- https://developer.cybozu.io/hc/ja/articles/201941754#step1
- https://developer.cybozu.io/hc/ja/articles/203655530
#リンク