Tous les produits
Search
Centre de documentation

API Gateway:Routage backend

Dernière mise à jour :Sep 21, 2026

Un plug-in de routage backend (également appelé plug-in de type Routing dans la console) évalue les attributs de la requête, tels que l'identité de l'appelant, l'environnement, l'adresse IP du client et les paramètres personnalisés, puis achemine chaque requête vers le service backend approprié. Utilisez ce plug-in pour le routage multi-locataire, les déploiements blue-green et la répartition du trafic basée sur l'environnement.

Fonctionnement

API Gateway évalue les règles de routage dans l'ordre. La première règle dont la condition correspond à la requête détermine le backend. Si aucune règle ne correspond, la requête est envoyée au backend par défaut défini dans l'API.

Chaque règle de routage spécifie :

  • Une condition à laquelle la requête doit correspondre

  • Un backend vers lequel acheminer les requêtes correspondantes

  • (Facultatif) Un weight pour répartir le trafic entre plusieurs backends correspondants

  • (Facultatif) Des Constant parameters à joindre à la requête avant le transfert

Cas d'utilisation

Scénario

Fonctionnement

Approche de configuration

Routage multi-locataire

Acheminez les appelants VIP vers des clusters de serveurs dédiés

Faites correspondre $CaAppId pour router vers un backend VPC

Routage basé sur l'environnement

Dirigez les requêtes de l'étape de test vers un serveur de test

Faites correspondre $CaStage pour remplacer l'URL du backend

Déploiement blue-green

Répartissez le trafic entre les versions stable et nouvelle

Attribuez des poids à plusieurs routes avec des conditions 1 = 1

Hachage cohérent

Épinglez les requêtes provenant de la même adresse IP ou ayant le même paramètre à un seul backend

Définissez routeByHash avec un facteur de hachage

Format de configuration

Les plug-ins acceptent les formats JSON ou YAML. Les deux formats partagent le même schéma et sont interchangeables.

Le modèle YAML suivant illustre la structure de base :

---
routes:
  # Route VIP callers to a dedicated VPC backend
  - name: Vip
    condition: "$CaAppId = 123456"
    backend:
      type: "HTTP-VPC"
      vpcAccessName: "slbAccessForVip"

  # Return a mock response for outdated clients
  - name: MockForOldClient
    condition: "$ClientVersion < '2.0.5'"
    backend:
      type: "MOCK"
      statusCode: 400
      body: "This version is not supported!!!"

Objet Route

Champ

Obligatoire

Description

name

Oui

Nom unique au sein du plug-in. Lettres et chiffres uniquement. Lorsqu'une requête correspond à cette règle, API Gateway ajoute un en-tête X-Ca-Routing-Name avec cette valeur.

condition

Oui

Expression conditionnelle qui détermine si une requête correspond à cette règle. Les règles sont évaluées dans l'ordre ; la première correspondance l'emporte.

backend

Oui

Configuration du backend qui remplace le backend par défaut de l'API. Doit être conforme à la spécification OpenAPI d'API Gateway. Une configuration incomplète renvoie X-Ca-Error-Code: I504RB.

constant-parameters

Non

Paramètres constants personnalisés joints à la requête avant le transfert. Chaque paramètre nécessite name, location (header ou query), et value.

weight

Non

Poids du trafic pour cette route. Utilisé lorsque plusieurs routes correspondent.

Expressions conditionnelles

Syntaxe

Les expressions conditionnelles utilisent une syntaxe similaire à SQL :

$ParamName = 'value' and $AnotherParam = 'value'

Règles :

  • Préfixez chaque paramètre par $. Référencez n'importe quel paramètre de requête défini dans l'API (mode MAPPING ou PASSTHROUGH).

  • Combinez les expressions avec and et or. Utilisez des parenthèses () pour contrôler la priorité.

  • Un paramètre inexistant dans une condition est évalué à false.

Types de données pris en charge :

Type

Description

Exemple

STRING

Entourez de guillemets simples ou doubles

'Hello', "Hello"

INTEGER

Valeurs entières

1001, -1

NUMBER

Valeurs à virgule flottante

0.1, 100.0

BOOLEAN

Valeurs booléennes

true, false

Paramètres système

Vous pouvez référencer ces paramètres intégrés sans les définir dans l'API. Si une API définit un paramètre portant le même nom, la valeur du paramètre de l'API est prioritaire.

Paramètre

Description

Exemples de valeurs

$CaStage

Étape de déploiement de l'API

RELEASE, PRE, TEST

$CaDomain

Nom de domaine du groupe d'API

-

$CaRequestHandleTime

Heure de réception de la requête (UTC)

-

$CaAppId

AppId de l'appelant

10098

$CaAppKey

AppKey de l'appelant

-

$CaClientIp

Adresse IP du client

47.47.XX.XX

$CaApiName

Nom de l'API demandée

-

$CaHttpScheme

Protocole de la requête

HTTP, HTTPS

$CaClientUa

Chaîne UserAgent du client

-

Exemples d'expressions

Acheminez les requêtes pour les API publiées à l'étape de test :

$CaStage = 'TEST'

Faites correspondre un utilisateur spécifique depuis une adresse IP spécifique :

$UserName = 'Admin' and $CaClientIp = '47.47.XX.XX'

Faites correspondre plusieurs AppIds via HTTPS :

$CaHttpScheme = 'HTTPS' and ($CaAppId = 1001 or $CaAppId = 1098 or $CaAppId = 2011)

Types de backend

La configuration du backend dans une règle de routage remplace le backend par défaut de l'API liée. Pour modifier uniquement certains champs sans changer de type de backend, spécifiez uniquement les champs à remplacer. Les configurations de backend doivent être cohérentes avec les fichiers Swagger importés dans API Gateway. Pour plus d'informations, consultez la rubrique Importer des fichiers Swagger pour créer des API avec des extensions API Gateway.

Important

Pour distribuer les requêtes par poids, spécifiez tous les paramètres du backend. Pour les détails sur la priorité de l'en-tête Host, consultez la rubrique Configurer l'en-tête Host. Le délai d'expiration minimum configurable est de 300 ms. Les valeurs inférieures à ce seuil sont ramenées à 300 ms par défaut.

Référence des paramètres du backend

Type de backend

Paramètre

Description

HTTP

address

URL du backend, par ex. http://10.10.100.2:8000

httpTargetHostName

Remplacement de l'en-tête Host (priorité la plus élevée)

path

Chemin de la requête, par ex. /users/{userId}

method

Méthode HTTP, par ex. GET

timeout

Délai d'expiration en millisecondes (minimum 300 ms)

HTTP-VPC

vpcAccessName

Nom d'autorisation d'accès VPC

vpcTargetHostName

Remplacement de l'en-tête Host (priorité la plus élevée)

vpcScheme

Protocole pour le backend VPC, par ex. https

path

Chemin de la requête

method

Méthode HTTP

timeout

Délai d'expiration en millisecondes (minimum 300 ms)

FC

fcRegion

Région Function Compute, par ex. cn-shanghai

fcType

Type de déclencheur : FCEvent ou HttpTrigger

serviceName

Nom du service FC (FCEvent)

functionName

Nom de la fonction FC (FCEvent)

fcUrl

URL de la fonction (HttpTrigger)

roleArn

ARN du rôle RAM permettant à API Gateway d'accéder à FC

method

Méthode HTTP (HttpTrigger uniquement)

OSS

ossRegionId

Région Object Storage Service (OSS), par ex. cn-hangzhou

bucketName

Nom du bucket OSS

key

Clé de l'objet, par ex. /objectName

timeout

Délai d'expiration en millisecondes (minimum 300 ms)

action

Opération OSS, par ex. putObject

MOCK

mockResult

Corps de la réponse simulée

mockStatusCode

Code d'état HTTP pour la réponse simulée

mockHeaders

Tableau des en-têtes de réponse (chacun avec name et value)

Exemples de configuration

HTTP

---
backend:
  type: HTTP
  address: "http://10.10.100.2:8000"
  httpTargetHostName: "a.b.com"
  path: "/users/{userId}"
  method: GET
  timeout: 7000

HTTP-VPC

---
backend:
  type: HTTP-VPC
  vpcAccessName: vpcAccess1
  vpcTargetHostName: "a.b.com"
  vpcScheme: "https"
  path: "/users/{userId}"
  method: GET
  timeout: 10000

Function Compute (FCEvent)

---
backend:
  type: FC
  fcRegion: cn-shanghai
  fcType: FCEvent
  serviceName: fcService
  functionName: fcFunction
  roleArn: "acs:ram::111111111:role/aliyunapigatewayaccessingfcrole"

Function Compute (HttpTrigger)

---
backend:
  type: FC
  fcRegion: cn-shenzhen
  method: GET
  fcType: HttpTrigger
  fcUrl: https://1833848375796824.cn-shenzhen.fc.aliyuncs.com/2016-08-15/proxy/servicetest/fctest3/fctest3
  roleArn: acs:ram::1833848375796824:role/aliyunapigatewayaccessingfcrole

OSS

---
backend:
  type: OSS
  ossRegionId: cn-hangzhou
  bucketName: bucketName
  key: /objectName
  timeout: 10000
  action: putObject

MOCK

---
backend:
  type: MOCK
  mockResult: "mock resul sample"
  mockStatusCode: 200
  mockHeaders:
    - name: server
      value: mock
    - name: proxy
      value: GW

Répartition pondérée du trafic

Attribuez des poids aux routes pour répartir le trafic proportionnellement. Les routes avec des poids plus élevés reçoivent davantage de requêtes.

---
routes:
  - name: Backend01
    condition: "1 = 1"   # Always matches
    weight: 100
    backend:
      type: "HTTP"
      address: "https://test01.com"
      path: "/web/cloudapi"
  - name: Backend02
    condition: "1 = 1"
    weight: 80
    backend:
      type: "HTTP"
      address: "https://test02.com"
      path: "/web/cloudapi"

Règles de répartition du trafic :

Condition

Comportement

Une seule route correspond

Toutes les requêtes sont envoyées au backend de cette route

Plusieurs routes correspondent

Les requêtes sont réparties proportionnellement selon le poids

Aucune route ne correspond

Les requêtes sont envoyées au backend par défaut de l'API

Important

La répartition basée sur le poids nécessite de spécifier tous les paramètres du backend dans chaque route.

Hachage cohérent

Le hachage cohérent distribue les requêtes en fonction d'un facteur de hachage. Les requêtes ayant le même facteur de hachage atteignent toujours le même backend.

Facteurs de hachage pris en charge :

Facteur de hachage

Description

Adresse IP source

Les requêtes provenant de la même adresse IP client sont dirigées vers le même backend

Paramètre de requête

Les requêtes ayant la même valeur de paramètre sont dirigées vers le même backend

Exemple : hachage par adresse IP source

---
parameters:
  clientIp: "System:CaClientIp"
routeByHash: clientIp
routes:
  - name: route1
    condition: "1 = 1"
    backend:
      type: "MOCK"
      statusCode: 200
      mockResult: "Hello World!!!"
  - name: route2
    condition: "1 = 1"
    backend:
      type: "MOCK"
      statusCode: 400
      mockResult: "mock resul sample"
  - name: route3
    condition: "1 = 0"   # Never matches
    backend:
      type: "HTTP"
      address: "https://test.com"
    constant-parameters:
      - name: x-route-by-hash
        location: header
        value: "route-by-hash"

Dans cet exemple, parameters mappe clientIp au paramètre système CaClientIp. Le champ routeByHash sélectionne clientIp comme facteur de hachage. Les requêtes provenant de la même adresse IP client sont systématiquement acheminées vers le même backend parmi les routes correspondantes.

Scénarios de routage

Routage par ID d'application

Acheminez les appelants VIP (AppId 10098 ou 10099) vers un backend Virtual Private Cloud (VPC) dédié :

---
routes:
  - name: Vip
    condition: "$CaAppId = 10098 or $CaAppId = 10099"
    backend:
      type: "HTTP-VPC"
      vpcAccessName: "slbAccessForVip"

Routage par environnement

Envoyez toutes les requêtes de l'étape de test vers un serveur de test public :

---
routes:
  - name: Vip
    condition: "$CaStage = 'TEST'"
    backend:
      type: "HTTP"
      address: "https://test-env.foo.com"

Déploiement blue-green

Répartissez le trafic à 5 %/95 % entre un serveur bêta et un backend de production VPC :

---
routes:
  - name: BlueGreenPercent05
    condition: "1 = 1"
    weight: 5
    backend:
      type: "HTTP"
      address: "https://beta-version.api.foo.com"
      path: "/web/cloudapi"
    constant-parameters:
      - name: x-route-blue-green
        location: header
        value: "route-blue-green"
  - name: BlueGreenPercent95
    condition: "1 = 1"
    weight: 95
    backend:
      type: HTTP-VPC
      path: "/web/cloudapi"
      vpcAccessName: testvpc
condition: "1 = 1" correspond toujours. condition: "1 = 0" ne correspond jamais. Utilisez weight pour contrôler la répartition du trafic entre les routes correspondantes.

Limitations

Contrainte

Limite

Code d'erreur

Taille des métadonnées du plug-in

16 384 octets

InvalidPluginData.TooLarge

Routes par plug-in

160

InvalidPluginData.TooManyRoutes

Taille de l'expression conditionnelle

512 octets

InvalidPluginData.ConditionTooLong

Intervalle de mise à jour minimum

45 secondes

InvalidPluginData.UpdateTooBusy