Teste se meu aplicativo lida com a limitação corretamente
A limitação de teste é difícil porque ocorre raramente, apenas quando o servidor que hospeda a API está sob 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 limitação 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/microsoft/dev-proxy/main/schemas/v0.20.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/microsoft/dev-proxy/main/schemas/v0.20.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/microsoft/dev-proxy/main/schemas/v0.20.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 seu arquivo de configuração e teste seu aplicativo para ver como ele lida com a limitação.
Teste o recuo correto com o Retry-After
cabeçalho
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 Proxy de Desenvolvimento, você pode configurar o Retry-After
cabeçalho para um valor estático ou usar um valor dinâmico que testa se seu aplicativo está aguardando conforme as instruções antes de chamar a API novamente.
Para configurar o Retry-After
cabeçalho para um valor estático, adicione o cabeçalho à sua resposta de limitação:
{
"$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.20.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. Quando você configura o cabeçalho para um valor estático, o Proxy de Desenvolvimento não está controlando se seu aplicativo está aguardando antes de chamar a API novamente.
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/microsoft/dev-proxy/main/schemas/v0.20.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/microsoft/dev-proxy/main/schemas/v0.20.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 no GenericRandomErrorPlugin
seu arquivo de configuração. Se você adicioná-lo depois, a solicitação será falhada GenericRandomErrorPlugin
pelo antes que o RetryAfterPlugin
tenha a chance de tratá-lo.
Este plugin controla as respostas de limitação e falha forçadamente as solicitações emitidas para APIs que ainda estão limitadas.