API呼び出し回数を取得するAPI

日本語勉強中でよろしくお願いいたします。

背景・実現したいこと

アプリにつき、1万回超えそうになったら、こちら側でブロックしたいです。

エラー情報 (開発者ツールのコンソール)

API呼び出し回数が大幅超過しましたというメールが来ました。

利用したソースコード

開発中、APIを呼ぶ無限ループが放置してしまいました。

やってみたこと

現在、数秒ごとにブラウザー上からAPIの呼び出し回数情報をスクレ―ピングしています。その情報から、制限に当たりそうになったら、通知を送信しています。1万回になったら、APIを呼ぶ処理をブロックしています。

APIのリスポンスにrate-limiterのようなものがあれば、これが必要なくなります。どなたかアイディアがあれば、お願いいたします。

 

Lorenz Ras さん

まず kintone の仕様としては、同時接続数は取得できますが、APIのレートリミットは取得できません。

https://developer.cybozu.io/hc/ja/articles/201941754-kintone-REST-API%E3%81%AE%E5%85%B1%E9%80%9A%E4%BB%95%E6%A7%98#step10

以下クライアントサイドで制限を回避するアイディアになります。

  1. kintone API をプロキシ経由でリクエストしてコントロールする(Apigeeなど)
  2. kintone.api 関数をオーバライドして、リクエストをコントロールする(リクエスト数をカウントする、一定時間連続で同一リクエストが呼ばれたら例外を投げる等)
  3. kintone.api 関数を実行する前に、iframe 経由でアプリ管理ページにアクセスし、該当アプリのAPIリミットをスクレイピングで取得する(kintoneシステム管理権限があるユーザーに限定されますが)

分かりにくい日本語表現がありましたら、お気軽にご質問ください。参考になれば幸いです。

川村 さん

様々なやり方頂いてありがとうございます!

組み合わせてやってみました。とりあえず、以下の感じです。

フロントエンド → 社内サーバ → Kintone API

システム管理権限で社内サーバで全アプリの呼び出し回数をスクレ―ピングし、社内DBに格納しています。

社内サーバのミドルウェアで超過していないかどうか判定します。

対処アプリの呼び出し回数が超過している場合、すぐエラー429を返します。

Kintone APIのリスポンスに呼び出し回数も載せてほしいんですが、機能リクエストをすると、どのぐらいかかりますでしょう。

Lorenz Ras さん

お役に立てて嬉しく思います。

私は機能リクエスト(kintoneへの要望でしょうか?)を出した経験が無いため、具体的な回答はできず申し訳ないですが、kintoneの画面右上にあるヘルプボタン「?」で展開されるメニューに「kintone の改善に協力」という項目があるので、こちらからリクエストしてみてはいかがでしょうか?

という私も今回調べて「kintone の改善に協力」に初めて気づいたので、これを期に幾つかリクエストを出してみようと思います。このような機会をいただき感謝しています。

レスポンスヘッダーに API Rate Limit を設ける機能は私も欲しいと思う機能ですので、Lorenz Ras さんのアイディアが実装される日を楽しみにしています。