Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Tip
Vous découvrez la limitation du débit ? Découvrez ce qu’est la limitation du débit et comment la gérer.
En un clin d’œil
Objectif: Tester la façon dont votre application gère la limitation des API sur n’importe quelle API
Heure : 15 minutes
Plugins :GenericRandomErrorPlugin, RetryAfterPlugin
Prérequis :configurer le proxy de développement
Le test de limitation est difficile, car il se produit rarement, uniquement lorsque le serveur hébergeant l’API est sous une charge importante. À l’aide de Dev Proxy, vous pouvez simuler une limitation de débit sur n’importe quelle API et vérifier si votre application la gère correctement.
Pour simuler une limitation de débit sur n’importe quelle API, utilisez le GenericRandomErrorPlugin. Si l’API que vous utilisez, retourne un Retry-After en-tête, utilisez RetryAfterPlugin pour vérifier que votre application est désactivée comme indiqué par l’API.
Simuler la limitation de débit pour n’importe quelle API
Pour commencer, activez le GenericRandomErrorPlugin fichier de configuration de votre proxy de développement.
Fichier : devproxyrc.json
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.1.0/rc.schema.json",
"plugins": [
{
"name": "GenericRandomErrorPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "errorsContosoApi",
"urlsToWatch": [
"https://api.contoso.com/*"
]
}
]
}
Ensuite, configurez le plug-in pour utiliser un fichier qui contient les erreurs que vous souhaitez simuler.
Fichier : devproxyrc.json (avec la configuration errorsFile)
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.1.0/rc.schema.json",
"plugins": [
{
"name": "GenericRandomErrorPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "errorsContosoApi",
"urlsToWatch": [
"https://api.contoso.com/*"
]
}
],
"errorsContosoApi": {
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.1.0/genericrandomerrorplugin.schema.json",
"errorsFile": "errors-contoso-api.json"
}
}
Dans le fichier d’erreurs, définissez la réponse de limitation afin qu’elle corresponde à la réponse de limitation réelle de votre API :
Fichier : errors-contoso-api.json
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.1.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"
}
}
]
}
]
}
Démarrez Dev Proxy avec votre fichier de configuration et testez votre application pour voir comment elle gère la limitation du débit.
Tester le repli correct avec l’en-tête Retry-After
De nombreuses API utilisent l’en-tête Retry-After de réponse pour indiquer à l’application de se retirer pendant une durée spécifique. Lors de la simulation de réponses de limitation du débit à l’aide de Dev Proxy, vous pouvez soit définir l’en-tête Retry-After sur une valeur statique, soit utiliser une valeur dynamique qui permet de vérifier si votre application attend bien le délai indiqué avant d’appeler à nouveau l’API.
Pour configurer l’en-tête Retry-After avec une valeur statique, ajoutez l’en-tête à votre réponse de limitation du débit :
Fichier : errors-contoso-api.json (avec des Retry-After statiques)
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.1.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"
}
}
]
}
]
}
Dans cet exemple, l’en-tête Retry-After est défini sur 60 secondes. Lorsque vous configurez l’en-tête sur une valeur statique, le proxy de développement ne contrôle pas si votre application attend avant d’appeler à nouveau l’API.
Pour tester si votre application attend correctement avant d’appeler à nouveau l’API, remplacez la valeur de l’en-tête par @dynamic:
Fichier : errors-contoso-api.json (avec Retry-Afterdynamique)
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.1.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"
}
}
]
}
]
}
En outre, étendez votre configuration Dev Proxy avec le RetryAfterPlugin.
Fichier : devproxyrc.json (terminé avec RetryAfterPlugin)
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.1.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": {
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.1.0/genericrandomerrorplugin.schema.json",
"errorsFile": "errors-contoso-api.json"
}
}
Mise en garde
Ajoutez le RetryAfterPlugin avant le GenericRandomErrorPlugin dans votre fichier de configuration. Si vous l’ajoutez après, la requête sera rejetée par le GenericRandomErrorPlugin avant que le RetryAfterPlugin n’ait la possibilité de la traiter.
Ce plug-in suit les réponses indiquant une limitation de débit et force l’échec des requêtes envoyées à des API toujours soumises à cette limitation.
Plus d’informations
Voir aussi
- GenericRandomErrorPlugin - Référence complète
- RetryAfterPlugin - Vérifier le comportement de nouvelle tentative
- Simuler le throttling sur les API Microsoft 365 - Spécifique à Microsoft 365
- Simuler des réponses d’API Rate-Limit - Test de résilience associé
- Utiliser le proxy de développement dans CI/CD - Automatiser les tests de résilience dans votre pipeline
- Glossaire - Terminologie du proxy de développement