kintone REST APIの同時接続数によって処理を制限する

目次

はじめに

kintone のカスタマイズで何かと活躍する kintone REST API。

でも 同時接続数には上限値 (External link) があり、上限を超える接続が発生した場合、利用に制限がかかることもあります。
特にユーザーの接続が集中する時間帯は、REST API を利用する処理がたくさん動くことになり不安。

今回は、そんな不安を解消するサンプルを紹介します!

できること

kintone JavaScript API の kintone REST API 同時接続数を取得する を利用して、現在の REST API 同時接続数と上限値を調べます。

現在の同時接続数が多い場合は処理を中断し、API 同時接続数が上限値を上回ることを防ぐことができます。

実現方法

2017 年 11 月のアップデートで、kintone REST API のレスポンスヘッダーに同時接続数の上限値と現在の同時接続数の情報が付与されるようになりました。 しかし、 kintone REST API リクエストを送信する API を使ってリクエストしたときは、レスポンスヘッダーを利用できません。

そこで、2018 年 1 月のアップデートでリリースされる kintone REST API 同時接続数を取得する API を利用します。

処理時に現在の接続数がわかれば、条件分岐を入れることによって同時接続数のオーバーを回避できますね!

サンプルコード

今回は、次のサンプルを紹介します。

  • 同時接続数の上限値と、現在の接続数を取得
  • 現在の同時接続数が、上限値に近い(今回の例では 上限値 - 20)場合はスキップする。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/*
 * Get concurrency limit of sample program
 * Copyright (c) 2018 Cybozu
 *
 * Licensed under the MIT License
*/
(function() {
  'use strict';
  kintone.events.on('app.record.index.show', (event) => {

    // 同時接続数を取得する
    kintone.api.getConcurrencyLimit().then((result) => {
      const ApiLimit = result.limit; // 同時接続数の上限値
      const ApiRunnning = result.running; // 現在の同時接続数

      // 接続数が「上限値-20」を超える場合、後続処理を行わない
      if (ApiRunnning > ApiLimit - 20) {
        console.log('処理を中断しました。');
        return;
      }

      const body = {app: kintone.app.getId()};
      kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body, (resp) => {
        // success
        console.log(resp);
      }, (error) => {
        // error
        console.log(error);
      });
    });
  });
})();

注意点

kintone.api.getConcurrencyLimit() の戻り値は、Promise 形式で取得できます。

次のように、同期的には取得できません。

1
2
const result = kintone.api.getConcurrencyLimit();
console.log(result.limit);

詳細は、 kintone REST API 同時接続数を取得する API を確認してください。

おわりに

今回はシンプルな処理を紹介しましたが、たとえば、実行する kintone REST API の重要度によって、以下のように制御できます。

  • 重要ではないリクエスト: 同時接続数が 10 を超えたら処理しない。
  • 重要なリクエスト: 同時接続数が 50 未満の場合は実行し、50 を超えたら処理しない。

kintone REST API への同時アクセス数の上限値は、サブドメインごとに 100 までです。
詳細は kintone ヘルプ:同時アクセス数 (External link) を確認してください。

たくさんの処理を実行する必要性のある場合は、優先度をつけることで重要な処理が確実に実行されるよう工夫できますね。
ぜひ有効活用してみてください。

information

この Tips は、2018 年 1 月版 kintone で動作を確認しています。