制限ノード.エクスプレス料金制限付きのJS API呼び出し
14582 ワード
多くの理由のために、あなたはあなたのAPI呼び出しを制限する必要があるかもしれません:それはクラウドで余分なコストを避けるために、あなたのAPIを使用するためにフリーティアを作成するために、サードパーティ製API要件を満たすために、パフォーマンスの問題を防止することができます.私は、あなたがこのポストを読んでいるならば、この目的があなたの心で非常に明確で、あなたがちょうどそれを働かせる方法を理解しようとしていると信じています.ではこれにフォーカスしましょう.
The express-rate-limit 私たちのためのこの問題を解決するシンプルでまっすぐ進むライブラリです.それは最も完全なものではないが、この目標を達成するために軽量で高速な方法です.ほとんどの洗練されたオプションについては、Expressレート制限自体はすでに他のライブラリrate-limiter-flexible express-brute and express-limiter .
現在出発
パッケージのインストール
まず最初にノードが必要です.プロジェクト.そこでディレクトリを作成し、コマンドを実行しました
次に、このアプリケーションの必要なパッケージをインストールしますexpress とexpress-rate-limit
セットアップエクスプレス
実行を容易にするために、私のパッケージを更新します.JSONファイルとスタートスクリプトを追加します.このプロジェクトを実行するには
それで、私は最も一般的な急行スタートコードを置きます.
と
レート制限の追加
私たちはすでにexpress-rate-limit 最初のステップでは、まず使い始めなければなりません.
ミドルウェアとしてのエクスプレス料金制限の仕事は、我々は単一のルート、アプリケーション全体またはサブルートのグループでそれを使用できることを意味します.
そのためには、急行はミドルウェアをどのように扱っているかを理解する必要がありますが、
あなたがExpressによってミドルウェア使用についてより多くを理解したいならば、あなたはexpress documentation .
さあ、使いましょう.
まずはエクスプレスインポートのすぐ下に我々のコードの急行制限をインポートする必要があります
そして、制限が超えられるとき、それはデフォルトメッセージを表示します
そして、それはすでに働いている!
このメッセージを変更するには2つのオプションがあります.
paramとして渡されたオブジェクト内の"message "プロパティを追加します
失敗した場合の処理にハンドラ関数を追加します.
ボーナス
また、関数ハンドラを使用して、要求された要求に対して消費者の請求を開始します
そして、それ!
ありがとう
これを読んでくれてありがとう.
そこにはより多くの利用可能な機能と構成がありますexpress-rate-limit documentation APIリクエストを制御するためにこのライブラリをどのように使うのかは簡単な例でした.
例とステップバイステップはthis repository 枝.
私はそれがあなたを助けることを望む!
The express-rate-limit 私たちのためのこの問題を解決するシンプルでまっすぐ進むライブラリです.それは最も完全なものではないが、この目標を達成するために軽量で高速な方法です.ほとんどの洗練されたオプションについては、Expressレート制限自体はすでに他のライブラリrate-limiter-flexible express-brute and express-limiter .
現在出発
パッケージのインストール
まず最初にノードが必要です.プロジェクト.そこでディレクトリを作成し、コマンドを実行しました
npm init -y
デフォルトパッケージを作成するにはJSONファイル.次に、このアプリケーションの必要なパッケージをインストールしますexpress とexpress-rate-limit
npm install express express-rate-limit
セットアップエクスプレス
実行を容易にするために、私のパッケージを更新します.JSONファイルとスタートスクリプトを追加します.このプロジェクトを実行するには
npm start
コマンド...
"scripts": {
"start": "node index.js"
},
...
次にインデックスを作成します.エントリディレクトリとなるルートディレクトリのjsファイル.それで、私は最も一般的な急行スタートコードを置きます.
// express import
const express = require('express')
// express initialization
const app = express()
const PORT = 3000
// generic GET route that we will use for the tests
app.get('/', function (req, res) {
return res.send('Hello World')
})
// server initialization
app.listen(PORT, () => {
console.log(`server started on port ${PORT}`)
})
それで、我々が動くときnpm start
(or node index.js
あなたがパッケージをジャンプするならば.JSON STEP )アプリケーションが動作していることを示すメッセージを表示します.と
localhost:3000
ルートでは、Hello World
設定します.レート制限の追加
私たちはすでにexpress-rate-limit 最初のステップでは、まず使い始めなければなりません.
ミドルウェアとしてのエクスプレス料金制限の仕事は、我々は単一のルート、アプリケーション全体またはサブルートのグループでそれを使用できることを意味します.
そのためには、急行はミドルウェアをどのように扱っているかを理解する必要がありますが、
use
機能は、完全にそれをラップするために、ミドルウェアまたはリクエストハンドラーをAPIのルートに加えます.あなたがExpressによってミドルウェア使用についてより多くを理解したいならば、あなたはexpress documentation .
さあ、使いましょう.
まずはエクスプレスインポートのすぐ下に我々のコードの急行制限をインポートする必要があります
// /index.js
const express = require('express')
const rateLimit = require('express-rate-limit')
// ...
次に、ミリ秒単位でタイムボックス( Windowms )を設定し、IPアドレスあたりのリクエスト数を最大にします.// /index.js
const express = require('express')
const rateLimit = require('express-rate-limit')
const app = express()
const PORT = 3000
// Create the rate limit rule
const apiRequestLimiter = rateLimit({
windowMs: 1 * 60 * 1000, // 1 minute
max: 2 // limit each IP to 2 requests per windowMs
})
// Use the limit rule as an application middleware
app.use(apiRequestLimiter)
app.get('/', function (req, res) {
return res.send('Hello World')
})
app.listen(PORT, () => {
console.log(`server started on port ${PORT}`)
})
これはデフォルトレスポンスです.そして、制限が超えられるとき、それはデフォルトメッセージを表示します
Too many requests, please try again later.
:そして、それはすでに働いている!
このメッセージを変更するには2つのオプションがあります.
paramとして渡されたオブジェクト内の"message "プロパティを追加します
rateLimit
機能const apiRequestLimiter = rateLimit({
windowMs: 1 * 60 * 1000, // 1 minute
max: 2, // limit each IP to 2 requests per windowMs
message: "Your limit exceeded"
})
失敗した場合の処理にハンドラ関数を追加します.
const apiRequestLimiter = rateLimit({
windowMs: 1 * 60 * 1000, // 1 minute
max: 2, // limit each IP to 2 requests per windowMs
handler: function (req, res, /*next*/) {
return res.status(429).json({
error: 'You sent too many requests. Please wait a while then try again'
})
}
})
ボーナス
また、関数ハンドラを使用して、要求された要求に対して消費者の請求を開始します
const apiRequestLimiter = rateLimit({
windowMs: 1 * 60 * 1000, // 1 minute
max: 2, // limit each IP to 2 requests per windowMs
handler: function (req, res, next) {
applyFeesForConsumer()
next()
}
})
あなたが要求をブロックしないように、ちょうど前に手数料を適用します.そして、それ!
ありがとう
これを読んでくれてありがとう.
そこにはより多くの利用可能な機能と構成がありますexpress-rate-limit documentation APIリクエストを制御するためにこのライブラリをどのように使うのかは簡単な例でした.
例とステップバイステップはthis repository 枝.
私はそれがあなたを助けることを望む!
Reference
この問題について(制限ノード.エクスプレス料金制限付きのJS API呼び出し), 我々は、より多くの情報をここで見つけました https://dev.to/brunohgv/limiting-node-js-api-calls-with-express-rate-limit-11klテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol