APIレート制限は何か、どのように対処するのか?

APIレート制限とは、お客様のシステムが一定時間内にMoneytree LINK APIを呼び出すことができる回数を指します。弊社のAPIは、特定の条件下でレート制限を受けることがあります。お客様のシステムがこれらの条件や制限を超えた場合、弊社のAPIはHTTP 429 "Too Many Requests "で応答します。

基本的には、LINK APIはエンドユーザーによって開始されるオンデマンドのAPIリクエストを許可します。このようなリクエストはレート制限を受けません。例として、ユーザーがPFMアプリケーション上で行うLINKへのリクエストなどがございます。

しかし、お客様のシステムがユーザーの代わりに大量のリクエストを行う場合、LINK APIはレート制限を受ける場合がございます。このようなケースの例としては、バックエンドシステムによる多数のユーザーに対する一括データダウンロードが挙げられます。

現在、弊社のAPIは、レート制限がリセットされるタイミングをお客様のシステムに伝えることができません。そのため、APIのレート制限を回避するために、指数関数的バックオフアルゴリズムによる再試行を使用することをお勧めします。このアルゴリズムは、システムがリクエストで圧倒されないように、APIコールを一定のインターバルを挟んで行うのに役立ちます。

指数関数的バックオフとは、失敗したネットワークリクエストを再試行する方法で、APIクライアントは連続した再試行の間に次の再実行を開始するまでの時間待機を徐々に伸ばします。以下はその例です。

wait_interval = base * 2^n +/- jitter

ここで

  • wait_interval は、API が HTTP 429 で応答した場合に、システムがリクエストを再試行するまでの時間となります。
  • base は最初の間隔、つまり最初の再試行までの待ち時間です。この値には3000msを使用することをお勧めします。
  • n は、現在の呼び出しの前にリクエストが通らなかった数です。複数のスレッドやプロセスを使用して並行してAPIを呼び出している場合、nの値は現在のスレッド/プロセスにスコープされます。この値は、現在のスレッド/プロセスが、最後に成功した応答から何回 429 "Too Many Requests" エラーに遭遇したかを表します。
  • jitter は 0 から base の間の乱数です。これは、複数のスレッド/プロセスが全く同時にAPIを呼び出さないように、リクエストを少しずつ分散させるために使用されます。システムが待機するたびに、この乱数値を再計算し wait_interval の合計に加算するか減算するか、ランダムで選択してください。

このアルゴリズムを使うことで、レート制限を回避することができます。しかし、もしあなたのビジネスケースが、一度に多くの顧客(数千人以上)に対してLINK APIを一括してリクエストする必要がある場合、スケーラビリティの問題に直面することになるのでご注意してください。そのような場合は、弊社営業にご相談ください。より適切なソリューションを提供できるかと思います。