Olá pessoal!
gostaria de saber se existe alguma forma de configurar um rate limite em uma api que estou construindo com base nesse repo da vtex: GitHub - vtex-apps/service-example: A reference app implementing a VTEX IO service with http route handlers
1 Like
Olá @Erislandio,
De acordo com a documentação de serviços do VTEX IO, os parâmetros de infraestrutura configuráveis são esses:
{
"memory": 256,
"ttl": 10,
"timeout": 2,
"minReplicas": 2,
"maxReplicas": 4,
"routes": {
"status": {
"path": "/_v/status/:code",
"public": true
}
}
}
Olá, Eris.
Sim, é possível e bem simples.
1º Instale a biblioteca rate-limiter-flexible
2º Crie um arquivo e cole o código:
import { RateLimiterMemory } from 'rate-limiter-flexible'
type RateLimiterRes = {
remainingPoints: number
msBeforeNext: number
consumedPoints: number
isFirstInDuration: boolean
}
const rateLimitOpts = {
points: 10,
duration: 60,
}
const rateLimiterMemory = new RateLimiterMemory(rateLimitOpts)
export async function rateLimiter(ctx: Context): Promise<RateLimiterRes> {
const [requestIp]: [string] = ctx.headers['x-forwarded-for'].split(',')
return rateLimiterMemory.consume(requestIp, 1) // consume 1 points
.then(async (rateLimiterRes: RateLimiterRes) => {
console.log(requestIp, rateLimiterRes)
return rateLimiterRes
})
.catch((rateLimiterRes: RateLimiterRes) => {
console.log(requestIp, rateLimiterRes)
const retryAfter = rateLimiterRes.msBeforeNext / 1000
throw new Error(`Too many request. Retry-after ${retryAfter}s`)
})
}
Obs: configure os parametros conforme a sua necessidade.
3º Faça o import da função rateLimiter que você acabou de criar dentro do seu middlware por exemplo e faça a chamada.
Ex: await rateLimiter(ctx)
3 Likes
system
Closed
4
This topic was automatically closed 24 hours after the last reply. New replies are no longer allowed.