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で動作を確認しています。