0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人的アドカレAdvent Calendar 2024

Day 23

express-rate-limit でAPIのリクエスト制限を設定してみる

Posted at

はじめに

本記事では、express-rate-limitを利用してAPIのリクエスト制限を実装します。一定時間内のリクエスト数を制限し、制限を超えた場合はリクエスト制限に引っかかってエラーを返すところまで試してみます。

環境

  • Node:v20.1
  • express:4.21
  • express-rate-limit:7.4.1

インストール

パッケージをインストールします。

npm init -y
npm install express express-rate-limit

ソース

1分間に5回までのリクエストを許可し、それを超えるとエラーメッセージを返すように設定しています。

index.js
const express = require('express');
const rateLimit = require('express-rate-limit');

const app = express();

const limiter = rateLimit({
  // 1分
  windowMs: 60 * 1000,
  // 1分間に最大5リクエスト
  max: 5,
  message: {
    // 429 Too Many Requests https://developer.mozilla.org/ja/docs/Web/HTTP/Status/429
    status: 429,
    error: 'リクエスト数が制限を超えました。しばらく待ってから再度お試しください。'
  }
});

// 全てのルートにリミッターを適用
app.use(limiter);

app.get('/', (req, res) => {
  res.send('Hello World!');
});

const PORT = 3000;
// listen:APIコールを受け付けつける入口
app.listen(PORT, () => {
  console.log(`Server is running on http://localhost:${PORT}`);
});

実行

ターミナルで以下のコマンドを実行してサーバーを起動します。

node index.js

別のターミナルウィンドウを開き、curlコマンドを使って連続的にリクエストを送信します。

for i in {1..10}; do curl http://localhost:3000; echo; done

実行結果

最初の5回のリクエストは成功し、"Hello World!"が表示されます。6回目以降のリクエストは制限にかかり、エラーメッセージが表示されます。

$ for i in {1..10}; do curl http://localhost:3000; echo; done
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
{"status":429,"error":"リクエスト数が制限を超えました。しばらく待ってから再度お試しください。"}
{"status":429,"error":"リクエスト数が制限を超えました。しばらく待ってから再度お試しください。"}
{"status":429,"error":"リクエスト数が制限を超えました。しばらく待ってから再度お試しください。"}
{"status":429,"error":"リクエスト数が制限を超えました。しばらく待ってから再度お試しください。"}
{"status":429,"error":"リクエスト数が制限を超えました。しばらく待ってから再度お試しください。"}

想定通り5回のリクエスト制限が機能している事を確認できました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?