APIの制限
本サービスのAPIには、レート制限と、リソース制限の2種類の制限があります。
また、このレート制限とは別に、クレジットカード決済において同一の
- リカーリングトークン
- 金額
の組み合わせで、30秒以内に課金処理すると重複エラー(エラーコード:311)にを起こす仕様があります。
これは、重複課金を防止する事を目的としています。
レート制限
本サービスのAPIは、アクセス先のリソースとパスに応じて「レート制限」を設定しています。
APIへのリクエスト元は、リクエストを行う度に「バーストレート」と呼ばれるものをレスポンスで受け取ります。
バーストレートは一度に送信できるリクエストの残高のような役割を果たします。
バーストレートは一定時間で補充されますが、使い果たした状態でリクエストを行うと、Too Many Requests
のエラーが発生します。
このバーストレートは、リクエストに対するレスポンスのヘッダで取得できます。
ヘッダの出力例
以下は、イグザクトバーストレートの上限が10、ルートバーストレートの上限が30に設定されたAPIへ、1件だけGETのリクエストを送った直後のレスポンス例です。
X-Remaining-Requests-Exact: 9
X-Remaining-Requests-Route: 29
X-Requests-Per-Minute-Exact: 120
X-Requests-Per-Minute-Route: 1200
意味合いとしては、以下の通りです。
- 1回あたりのイグザクトバーストレート:残り9
- 1回あたりのルートバーストレート:残り29
- 1分あたりのリクエスト上限(イグザクト):120
- 1分あたりのリクエスト上限(ルート):1,200
イグザクトバーストレートの上限が10であるため、1件のリクエストは許容され、イグザクトバーストレートが「9」、パスバーストレートが「29」に、それぞれ減算されレスポンスされています。
イグザクトバーストレートは、0.001(1ミリ)秒ごとに0.02(この場合は1分あたり上限÷1分間のミリ秒換算=1,200/60,000)だけ回復します。
つまり、仮に次回10件のリクエストをするなら、イグザクトバーストレートが10まで回復するのを待つ必要があり、最短で0.05秒(1/0.02=50ミリ秒)の待機が必要になるということです。
なお、元のイグザクトバーストレートの上限が10であるため、0.05秒以上の待機をしても、上限の10以上まで増えることはありません。
レート制限の種類
各種レート制限には規定値が設定されており、規定値のあるものが、リクエストへのレスポンスのヘッダに出力されます。
課金レート制限
課金の作成に関するリクエストを行う際にカウントされます。
対象API | X-Remaining-Requests (バーストレート) | X-Requests-Per-Minute (1分あたりのリクエスト上限) |
---|---|---|
POST /tokens POST /charges POST /subscriptions | 上限:100 | 3,000/分 |
これらのリクエストに対して
- バーストレート
- 1分あたりのリクエスト上限
が、レスポンスされます。
後述する標準レート制限が同時に適用されることはなく、レスポンス内容も異なります。
標準レート制限
標準レート制限は、以下2つに分類されます。
なお、全てのリクエストに対して
- イグザクトバーストレート
- ルートバーストレート
- 1分あたりのリクエスト上限(イグザクト)
- 1分あたりのリクエスト上限(ルート)
が、レスポンスされます。
また、全てのリクエストでルートバーストレートとイグザクトバーストレートの両方がカウントされます。
この制限が課金レート制限と同時に適用されることはなく、レスポンス内容も異なります。
ルートバーストレート
アクセスするリソースの「パス」に対しての制限です。例えば
GET /charges/{charge_id_1}
GET /charges/{charge_id_2}
という2回のリクエストは、「/charges
」という同一のパスに対するものであるため、1つのパスに対し2回リクエストしたとカウントされます。
本サービスは全てのパスに対し、同一のルートバーストレートを設定しています。
対象 | X-Remaining-Requests-Route (ルートバーストレート) | X-Requests-Per-Minute-Route (1分あたりのリクエスト上限:ルート) |
---|---|---|
全てのパス | 上限:30 | 1,200 |
イグザクトバーストレート
イグザクトバーストレートは、Exact(完全一致)の名の通り、リソースIDやクエリ文字列も含めて完全に一致するパスに対して適用されます。例えば
GET /charges/{charge_id_1}
というリクエストがされた場合は、この/charges/{charge_id_1}
に対して、カウントされます。
本サービスは全てのリクエストに対し、同一のイグザクトバーストレートを設定しています。
対象 | X-Remaining-Requests-Exact (イグザクトバーストレート) | X-Requests-Per-Minute-Exact (1分あたりのリクエスト上限:イグザクト) |
---|---|---|
全てのクエリ | 上限:10 | 120 |
リソースの制限
1つの加盟店または店舗で、有効にできるリソース数には上限があります。
この上限を超えるリソースの作成リクエストには、ResourceLimitReached
エラーが出力されます。
リソース | 上限 |
---|---|
webhook (ウェブフック) | 20 |
jwt (アプリトークン) | 20 |
パスワードリセットトークン | 5回/日 |
テスト課金 | 1440件/日 |