Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
De un vistazo
Objetivo: Prueba cómo tu aplicación maneja la limitación de cualquier API
Tiempo: 15 minutos
Plugins:GenericRandomErrorPlugin, RetryAfterPlugin
Requisitos previos:Configuración del proxy de desarrollo
La limitación de pruebas es difícil porque rara vez se produce, solo cuando el servidor que hospeda la API está bajo mucha carga. Con el proxy de desarrollo, puede simular la limitación en cualquier API y comprobar si la aplicación la controla correctamente.
Para simular la limitación en cualquier API, use GenericRandomErrorPlugin. Si la API que usa, devuelve un Retry-After encabezado, use RetryAfterPlugin para comprobar que la aplicación vuelve a estar desactivada según lo indicado por la API.
Simulación de la limitación en cualquier API
Para empezar, habilite en el GenericRandomErrorPlugin archivo de configuración del proxy de desarrollo.
Archivo: devproxyrc.json
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/rc.schema.json",
"plugins": [
{
"name": "GenericRandomErrorPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "errorsContosoApi",
"urlsToWatch": [
"https://api.contoso.com/*"
]
}
]
}
A continuación, configure el complemento para que use un archivo que contenga los errores que desea simular.
Archivo: devproxyrc.json (con la configuración de errorsFile)
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/rc.schema.json",
"plugins": [
{
"name": "GenericRandomErrorPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "errorsContosoApi",
"urlsToWatch": [
"https://api.contoso.com/*"
]
}
],
"errorsContosoApi": {
"errorsFile": "errors-contoso-api.json"
}
}
En el archivo de errores, defina la respuesta de limitación para que coincida con la respuesta de limitación real de la API:
Archivo: errors-contoso-api.json
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/genericrandomerrorplugin.errorsfile.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 Dev Proxy con el archivo de configuración y pruebe la aplicación para ver cómo controla la limitación.
Probar la copia de seguridad correcta con el Retry-After encabezado
Muchas API usan el Retry-After encabezado de respuesta para indicar a la aplicación que se vuelva a desactivar durante un período de tiempo específico. Al simular respuestas de limitación mediante el proxy de desarrollo, puedes configurar el Retry-After encabezado en un valor estático o usar un valor dinámico que pruebe si la aplicación está esperando como se indica antes de volver a llamar a la API.
Para configurar el Retry-After encabezado en un valor estático, agregue el encabezado a la respuesta de limitación:
Archivo: errors-contoso-api.json (con Retry-After estático)
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/genericrandomerrorplugin.errorsfile.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"
}
}
]
}
]
}
En este ejemplo, el Retry-After encabezado se establece en 60 segundos. Al configurar el encabezado en un valor estático, El proxy de desarrollo no controla si la aplicación está esperando antes de volver a llamar a la API.
Para probar si la aplicación está esperando correctamente antes de volver a llamar a la API, cambie el valor del encabezado a @dynamic:
Archivo: errors-contoso-api.json (con Retry-After dinámico)
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/genericrandomerrorplugin.errorsfile.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"
}
}
]
}
]
}
Además, amplíe la configuración del proxy de desarrollo con .RetryAfterPlugin
Archivo: devproxyrc.json (completo con RetryAfterPlugin)
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/rc.schema.json",
"plugins": [
{
"name": "RetryAfterPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"urlsToWatch": [
"https://api.contoso.com/*"
]
},
{
"name": "GenericRandomErrorPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "errorsContosoApi",
"urlsToWatch": [
"https://api.contoso.com/*"
]
}
],
"errorsContosoApi": {
"errorsFile": "errors-contoso-api.json"
}
}
Precaución
Agregue antes del RetryAfterPlugin elemento en el GenericRandomErrorPlugin archivo de configuración. Si lo agrega después, se producirá un error en GenericRandomErrorPlugin la solicitud antes de RetryAfterPlugin que tenga la oportunidad de controlarla.
Este complemento realiza un seguimiento de las respuestas de limitación y produce un error forzado de las solicitudes emitidas a las API que todavía están limitadas.
Más información
Consulte también
- GenericRandomErrorPlugin : referencia completa
- < c0>RetryAfterPlugin - Verificar el comportamiento del reintento
- Simulación de la limitación en las API de Microsoft 365 : específico de Microsoft 365
- Glosario : terminología del proxy de desarrollo