Teste se meu aplicativo lida com a limitação corretamente
Testar a limitação é difícil porque ocorre raramente, apenas quando o servidor que hospeda a API está sob uma carga pesada. Usando o Proxy de Desenvolvimento, você pode simular a limitação em qualquer API e verificar se seu aplicativo lida com isso corretamente.
Para simular a imposição de limites em qualquer API, use o GenericRandomErrorPlugin. Se a API que você usa retornar um Retry-After
cabeçalho, use o RetryAfterPlugin para verificar se seu aplicativo recua conforme as instruções da API.
Simule a limitação em qualquer API
Para começar, habilite o GenericRandomErrorPlugin
no arquivo de configuração do Dev Proxy.
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.24.0/rc.schema.json",
"plugins": [
{
"name": "GenericRandomErrorPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll",
"configSection": "errorsContosoApi",
"urlsToWatch": [
"https://api.contoso.com/*"
]
}
]
}
Em seguida, configure o plug-in para usar um arquivo que contenha os erros que você deseja simular.
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.24.0/rc.schema.json",
"plugins": [
{
"name": "GenericRandomErrorPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll",
"configSection": "errorsContosoApi",
"urlsToWatch": [
"https://api.contoso.com/*"
]
}
],
"errorsContosoApi": {
"errorsFile": "errors-contoso-api.json"
}
}
No arquivo de erros, defina a resposta de limitação para que ela corresponda à resposta de limitação real da sua API:
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.24.0/genericrandomerrorplugin.schema.json",
"errors": [
{
"request": {
"url": "https://api.contoso.com/*"
},
"responses": [
{
"statusCode": 429,
"headers": [
{
"name": "Content-Type",
"value": "application/json"
}
],
"body": {
"code": "TooManyRequests",
"message": "Too many requests"
}
}
]
}
]
}
Inicie o Dev Proxy com o seu arquivo de configuração e teste a sua aplicação para ver como ela lida com a restrição.
Teste o recuo correto com o cabeçalho Retry-After
Muitas APIs usam o Retry-After
cabeçalho de resposta para instruir o aplicativo a recuar por um período de tempo específico. Ao simular respostas de limitação usando o Dev Proxy, pode configurar o cabeçalho Retry-After
para um valor estático ou usar um valor dinâmico que verifica se o seu aplicativo está aguardando conforme as instruções antes de chamar a API novamente.
Para configurar o cabeçalho Retry-After
para um valor estático, adicione o cabeçalho à resposta de controlo de taxa:
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.24.0/genericrandomerrorplugin.schema.json",
"errors": [
{
"request": {
"url": "https://api.contoso.com/*"
},
"responses": [
{
"statusCode": 429,
"headers": [
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Retry-After",
"value": "60"
}
],
"body": {
"code": "TooManyRequests",
"message": "Too many requests"
}
}
]
}
]
}
Neste exemplo, o Retry-After
cabeçalho é definido como 60 segundos. Configurar o cabeçalho para um valor estático não faz com que o Dev Proxy controle se a aplicação está a aguardar antes de fazer outra chamada à API.
Para testar se seu aplicativo está aguardando corretamente antes de chamar a API novamente, altere o valor do cabeçalho para @dynamic
:
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.24.0/genericrandomerrorplugin.schema.json",
"errors": [
{
"request": {
"url": "https://api.contoso.com/*"
},
"responses": [
{
"statusCode": 429,
"headers": [
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Retry-After",
"value": "@dynamic"
}
],
"body": {
"code": "TooManyRequests",
"message": "Too many requests"
}
}
]
}
]
}
Além disso, estenda sua configuração de Dev Proxy com o RetryAfterPlugin
.
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.24.0/rc.schema.json",
"plugins": [
{
"name": "RetryAfterPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll",
"urlsToWatch": [
"https://api.contoso.com/*"
]
},
{
"name": "GenericRandomErrorPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll",
"configSection": "errorsContosoApi",
"urlsToWatch": [
"https://api.contoso.com/*"
]
}
],
"errorsContosoApi": {
"errorsFile": "errors-contoso-api.json"
}
}
Atenção
Adicione o RetryAfterPlugin
antes do GenericRandomErrorPlugin
no seu arquivo de configuração. Se o adicionar depois, a solicitação falhará por GenericRandomErrorPlugin
antes que RetryAfterPlugin
tenha a chance de a tratar.
Este plugin controla as respostas de limitação e falha forçadamente as solicitações emitidas para APIs que ainda estão limitadas.