備忘録

備忘録

ASP.NET 7 以降でAPI呼出回数制限を実装する方法

Ⅰ. はじめに

タイトルの通り「ASP.NET 7 以降でAPI呼出回数制限を実装する方法」です。

Ⅱ. 手順

1. サンプルプログラムを書く
Program.cs

using Microsoft.AspNetCore.RateLimiting;
using System.Threading.RateLimiting;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRateLimiter(x =>
{
  x.AddFixedWindowLimiter("MyPerfectPolicyName", y =>
  {
    y.Window = TimeSpan.FromSeconds(10); // 例として10秒を指定する
    y.PermitLimit = 1; // Windowで指定した時間内で許容するリクエスト数
    y.QueueLimit = 2; // 許容リクエスト数を超えた場合の最大キュー数
    y.QueueProcessingOrder = QueueProcessingOrder.OldestFirst; // キューの処理順序。古いリクエストを優先する。 
  });
});

var app = builder.Build();
app.MapControllers();
app.UseRateLimiter(); // 追加
app.Run();

ApiController.cs

[EnableRateLimiting("MyPerfectPolicyName")]
[ApiController]
[Route("[controller]")]
public class ApiController : ControllerBase
{
  [HttpGet]
  public string Get() => "123";
}

実行結果


連続で4回アクセスした場合

HTTPリクエスト回数 動作
1回目 成功
2回目 10秒以内で2回目のリクエストが発生
待機キューに追加される
3回目 10秒以内で3回目のリクエストが発生
待機キューに追加される
4回目 10秒以内で4回目のリクエストが発生
待機キューの最大数2を超えているのでリクエストは破棄される
  • 1回目から10秒後、2回目のリクエストが処理される
    さらに10秒後、3回目のリクエストが処理される