結局 kintone の REST API って何使えばいいん？

## kintone REST API 実行について
kintone JavaScript 開発において、REST API を実行する方法、ライブラリがたくさんあるので、情報をまとめてみました。

誤解されると面倒なので先に結論を書いておきます

## 結論
(基本的に) kintone JavaScript Client を使っとけば問題ない。

## kintone REST API とは
知らない人はいないと思いますが、
kintone のドメインに対して HTTPS リクエストによってレコードの操作やアプリ、スペースの操作をすることができる機能です。
https://developer.cybozu.io/hc/ja/articles/201941754

### kintone.api()
安心安全の kintone.api() という JavaScript API を使用する方法です。
少し前に kintone.api() を使用してファイル以外の USER API の実行も可能になりましたね。


##### kintone.api() まとめ
- kintone REST API のほぼすべて実行可能
- ファイルアップロード、ダウンロードAPIは<font color="Red">実行不可</font>(cybozu.com/k/v1/file.json)
- json 形式の User API が実行可能（ファイル操作以外 cybozu.com/v1/file.json）
- 一括操作や upsert といった処理はあらかじめ処理を自作する必要がある（レコード500件以上取得、大量レコード取得の cursor など）

### kintone Utility
- cybozu developer network  
https://developer.cybozu.io/hc/ja/articles/115000333223
- GitHub  
https://github.com/kintone/kintoneUtility
- ドキュメント  
https://github.com/kintone/kintoneUtility/blob/master/guides/rest_doc.md

4年前の 2016年12月 にリリースされたライブラリです。
リンク先にある通り、非推奨ツールですが、
ライブラリとして持っている独自関数などとても使いやすいくまだ使っている人は多いのではないでしょうか。

リポジトリ自体も削除に向かっているのか、近々 URL 配信も停止されるようです。
https://developer.cybozu.io/hc/ja/articles/900003738746

##### kintone Utility まとめ
- kintone.api() では実行できないファイル操作系の API にも対応
- User API には<font color="Red">非対応</font>
- スペース操作 API には<font color="Red">非対応</font>、またアプリ操作系も一部<font color="Red">非対応</font>
- 一括操作や upsert といった独自関数を搭載（古いライブラリなのでパフォーマンスには注意が必要）

### kintone JS SDK
- cybozu developer network  
https://developer.cybozu.io/hc/ja/articles/360025484571
- GitHub  
https://github.com/kintone-labs/kintone-js-sdk/
- ドキュメント  
https://kintone-labs.github.io/kintone-js-sdk/latest/


kintoneUtility の後継として開発されたツールです。
こちらも非推奨となっていますが、kintoneUtility の後継とも記載されている通り、独自関数などは kintoneUtility と同等のものとなっています。
一部対応していなかった新規の API （Cursor や アプリ操作系）にも対応しています。

##### kintone JS SDK まとめ
- kintone.api() では実行できないファイル操作系の API にも対応
- User API には<font color="Red">非対応</font>
- スペース操作 API には<font color="Red">非対応</font>  
またアプリ操作系も kintoneUtility に比べ対応範囲は広いが、一部<font color="Red">非対応</font>
- 一括操作や upsert といった独自関数を搭載（Cursor や offset などのパフォーマンス部分も対応）


### kintone JavaScript Client
- cybozu developer network  
https://developer.cybozu.io/hc/ja/articles/900000767263
- GitHub  
https://github.com/kintone/js-sdk/tree/master/packages/rest-api-client
- ドキュメント  
https://github.com/kintone/js-sdk/tree/master/packages/rest-api-client/docs

kintoneUtility や kintone JS SDK などのツールの後継で、現在 cybozu developer network が推奨しているライブラリです。
js sdk（前述の kintone JS SDK とは別物） の一部の rest-api-client という位置づけらしい。

推奨ライブラリともあり、これまでのライブラリに搭載されている独自関数などはすべて存在しているっぽいです。

##### kintone JavaScript Client まとめ
- kintone.api() では実行できないファイル操作系の API にも対応
- User API には<font color="Red">非対応</font>
- スペース操作 API には<font color="Red">非対応</font>  
- 一括操作や upsert といった独自関数を搭載（Cursor や offset などのパフォーマンス部分も対応）

## サンプルコード
### kintone Utility
``` javascript
(async () => {
  try {
    const res = await kintoneUtility.rest.getRecord({ app: "1", id: "1" });
    console.log(res)
  } catch (err) {
    console.log(err);
  }
})();
```
### kintone JS SDK
``` javascript
const kintoneRecord = new kintoneJSSDK.Record();

(async () => {
  try {
    const res = await kintoneRecord.getRecord({ app: "1", id: "1" });
    console.log(res)
  } catch (err) {
    console.log(err);
  }
})();
```
### kintone JavaScript Client
``` javascript
const client = new KintoneRestAPIClient();

(async () => {
  try {
    const res = await client.record.getRecord({ app: "1", id: "1" });
    console.log(res)
  } catch (err) {
    console.log(err);
  }
})();
```
## まとめ
kintoneUtility や kintone JS SDK が非推奨となるということで後継の kintone JavaScript Client を調べてみたのですが、
以前までの kintone api でできないファイル系の操作やレコード一括処理、upsert などの独自関数ももっており、
typescript 用にいろいろと準備されているので、かなり使いやすいそうです。

個人的には今後 USER API にも対応したり、もっと便利な関数がでるとうれしいです。