Documentation de référence sur la configuration des proxys d'API

Cette page s'applique Ă  Apigee et Ă  Apigee hybrid.

Consultez la documentation d'Apigee Edge.

En tant que développeur travaillant avec Apigee, vos activités de développement consistent principalement à configurer des serveurs d'API qui agissent comme des proxys pour les API ou les services de backend. Ce document fait référence à tous les éléments de configuration disponibles lors de la création de proxys d'API.

Si vous apprenez à créer des proxys d'API, nous vous recommandons de commencer par la rubrique Créer un proxy d'API simple.

Modifiez la configuration de votre proxy d'API de l'une des maniĂšres suivantes :

Structure du répertoire de configuration du proxy API

La structure de rĂ©pertoires de la configuration de proxy d'API est illustrĂ©e ci-dessous :

Affiche la structure de répertoire dans lequel apiproxy est la racine. Juste sous le répertoire apiproxy, vous trouverez les rÚgles, les proxys, les ressources et les répertoires cibles, ainsi que le fichier weatherapi.xml.

Une configuration de proxy d'API comprend les Ă©lĂ©ments suivants :

Configuration de base Principaux paramĂštres de configuration d'un proxy d'API.
ProxyEndpoint ParamĂštres de la connexion HTTP entrante (de l'envoi d'applications Ă  Apigee), les flux de requĂȘtes et de rĂ©ponses et les piĂšces jointes de rĂšgles.
TargetEndpoint ParamĂštres pour la connexion HTTP sortante (depuis Apigee vers le service de backend), les flux de requĂȘtes et de rĂ©ponses, et les rattachements de rĂšgles.
Flux Pipelines de requĂȘte et de rĂ©ponse ProxyEndpoint et TargetEndpoint auxquels les rĂšgles peuvent ĂȘtre associĂ©es.
RÚgles Fichiers de configuration au format XML conformes aux schémas des rÚgles Apigee.
Ressources Scripts, fichiers JAR et fichiers XSLT référencés par des rÚgles pour exécuter une logique personnalisée.

Configuration de base

/apiproxy/weatherapi.xml

Configuration de base d'un proxy d'API, qui dĂ©finit le nom du proxy API. Le nom doit ĂȘtre unique au sein d'une organisation.

Exemple de configuration :

<APIProxy name="weatherapi">
</APIProxy>

ÉlĂ©ments de configuration de base

Nom Description Par dĂ©faut Obligatoire ?
APIProxy
name Nom du proxy d'API, qui doit ĂȘtre unique au sein d'une organisation. Les caractĂšres que vous ĂȘtes autorisĂ© Ă  utiliser dans le nom sont limitĂ©s aux Ă©lĂ©ments suivants : A-Za-z0-9_- ND Oui
revision Numéro de révision de la configuration de proxy de l'API. Vous n'avez pas besoin de définir explicitement le numéro de révision, car Apigee suit automatiquement la révision actuelle du proxy d'API. ND Non
ConfigurationVersion Version du schĂ©ma de configuration du proxy d'API auquel ce proxy d'API est conforme. La seule valeur actuellement acceptĂ©e est majorVersion 4 et minorVersion 0. Ce paramĂštre pourra ĂȘtre utilisĂ© ultĂ©rieurement pour autoriser l'Ă©volution du format de proxy d'API. 4.0 Non
Description Description textuelle du proxy d'API. Si elle est fournie, la description s'affichera dans l'interface utilisateur d'Apigee. ND Non
DisplayName Un nom convivial qui peut ĂȘtre diffĂ©rent de l'attribut name de la configuration du proxy d'API. ND Non
Policies Liste des rÚgles dans le répertoire /policies de ce proxy d'API. Généralement, vous ne verrez cet élément que lorsque le proxy d'API a été créé à l'aide de l'interface utilisateur Apigee. Il s'agit simplement d'un paramÚtre manifest conçu pour fournir une visibilité sur le contenu du proxy d'API. ND Non
ProxyEndpoints Liste des points de terminaison du proxy dans le répertoire /proxies de ce proxy d'API. Généralement, vous ne verrez cet élément que lorsque le proxy d'API a été créé à l'aide de l'interface utilisateur Apigee. Il s'agit simplement d'un paramÚtre manifest, conçu pour fournir une visibilité sur le contenu du proxy d'API. ND Non
Resources La liste des ressources (JavaScript, Python, Java, XSLT) dans le répertoire /resources de ce proxy d'API. Normalement, vous ne verrez cet élément que lorsque le proxy d'API a été créé à l'aide de l'interface utilisateur Apigee. Il s'agit simplement d'un paramÚtre manifest conçu pour fournir une visibilité sur le contenu du proxy d'API. ND Non
Spec Identifie la spécification OpenAPI associée au proxy d'API. La valeur est définie sur une URL ou sur un chemin d'accÚs dans le magasin de spécifications.
ND Non
TargetServers Liste des serveurs cibles référencés dans n'importe quel point de terminaison cible du proxy d'API. Normalement, vous ne verrez cet élément que lorsque le proxy d'API a été créé à l'aide d'Apigee. Il s'agit simplement d'un paramÚtre manifest conçu pour fournir une visibilité sur le contenu du proxy d'API. ND Non
TargetEndpoints Liste des points de terminaison cibles dans le répertoire /targets de ce proxy d'API. Normalement, vous ne verrez cet élément que lorsque le proxy d'API a été créé à l'aide de l'interface utilisateur Apigee. Il s'agit simplement d'un paramÚtre manifest, conçu pour fournir une visibilité sur le contenu du proxy d'API. ND Non

ProxyEndpoint

L'image suivante montre le flux de requĂȘtes/rĂ©ponses :

Affiche un client appelant un service HTTP. La requĂȘte passe par le point de terminaison proxy, puis le point de terminaison cible avant d&#39;ĂȘtre traitĂ© par le service HTTP. La rĂ©ponse passe par le point de terminaison cible, puis le point de terminaison du proxy avant d&#39;ĂȘtre renvoyĂ© au client.

/apiproxy/proxies/default.xml

La configuration ProxyEndpoint définit l'interface entrante (destinée au client) d'un proxy d'API. Lorsque vous configurez un point de terminaison du proxy, vous paramétrez une configuration réseau qui définit la façon dont les applications clientes (apps) doivent appeler l'API avec proxy.

L'exemple de configuration ProxyEndpoint suivant serait stockĂ© sous /apiproxy/proxies :

<ProxyEndpoint name="default">
  <PreFlow/>
  <Flows/>
  <PostFlow/>
  <HTTPProxyConnection>
    <BasePath>/weather</BasePath>
    <Properties/>
  </HTTPProxyConnection>
  <FaultRules/>
  <DefaultFaultRule/>
  <RouteRule name="default">
    <TargetEndpoint>default</TargetEndpoint>
  </RouteRule>
</ProxyEndpoint>

Les Ă©lĂ©ments de configuration requis dans un point de terminaison du proxy sont les suivants :

ÉlĂ©ments de configuration ProxyEndpoint

Nom Description Par dĂ©faut Obligatoire ?
ProxyEndpoint
name Nom du point de terminaison du proxy. Doit ĂȘtre unique dans la configuration du proxy d'API, lorsque, dans de rares cas, plusieurs points de terminaison du proxy sont dĂ©finis. Les caractĂšres que vous ĂȘtes autorisĂ© Ă  utiliser dans le nom sont limitĂ©s aux Ă©lĂ©ments suivants : A-Za-z0-9._\-$ % ND Oui
PreFlow DĂ©finit les rĂšgles dans le flux PreFlow d'une requĂȘte ou d'une rĂ©ponse. ND Oui
Flows
DĂ©finit les rĂšgles dans les flux conditionnels d'une requĂȘte ou d'une rĂ©ponse.
ND Oui
PostFlow
DĂ©finit les rĂšgles dans le flux PostFlow d'une requĂȘte ou d'une rĂ©ponse.
ND Oui
HTTPProxyConnection Définit l'adresse réseau et le chemin d'URI associés au proxy d'API.
BasePath

Chaßne obligatoire qui identifie de maniÚre unique le chemin d'URI utilisé par Apigee pour acheminer les messages entrants vers le proxy d'API approprié.

BasePath est un fragment d'URI (par exemple, /weather) ajoutĂ© Ă  l'URL de base d'un proxy d'API (par exemple, http://apifactory-test.apigee.net). BasePath doit ĂȘtre unique au sein d'un environnement. L'unicitĂ© est validĂ©e lorsqu'un proxy d'API est gĂ©nĂ©rĂ© ou importĂ©.

Utiliser un caractÚre générique dans les chemins de base

Vous pouvez utiliser un ou plusieurs caractÚres génériques "*" dans les chemins d'accÚs de base du proxy d'API. Par exemple, un chemin de base de /team/*/members permet aux clients d'appeler https://[host]/team/blue/members et https://[host]/team/green/members sans que vous ayez besoin de créer de proxys d'API pour gérer les nouvelles équipes. Notez que /**/ n'est pas accepté.

Important : Apigee n'accepte PAS le caractĂšre gĂ©nĂ©rique "*" en tant que premier Ă©lĂ©ment d'un chemin de base. Par exemple, ceci n'est PAS acceptĂ© : /*/search. Commencer le chemin de base par un "*" peut entraĂźner des erreurs inattendues, en raison de la maniĂšre dont Apigee identifie les chemins valides.

/ Oui
Properties Un ensemble de paramĂštres de configuration HTTP facultatifs peut ĂȘtre dĂ©fini en tant que propriĂ©tĂ©s d'un objet <ProxyEndpoint>. Les propriĂ©tĂ©s disponibles sont les suivantes :
  • request.queryparams.ignore.content.type.charset

    Utilisez la propriĂ©tĂ© request.queryparams.ignore.content.type.charset pour indiquer au proxy d'ignorer le paramĂštre charset de l'en-tĂȘte Content-Type lors du traitement de l'URL de la requĂȘte. Par exemple :

    <Properties>
      <Property name="request.queryparams.ignore.content.type.charset">true</Property>
    </Properties>

    Le tableau suivant prĂ©sente un exemple de rĂ©sultat en fonction du paramĂštre de la propriĂ©tĂ© charset et de la prĂ©sence du paramĂštre charset de l'en-tĂȘte Content-Type.

    ParamĂštre de la propriĂ©tĂ© Valeur d’en-tĂȘte Exemple de rĂ©sultat :
    charset=false ParamÚtre charset non défini john.doe+test@gmail.com
    charset=false charset=utf-8 john.doe test@gmail.com
    charset=true et aucun paramĂštre charset dans l'en-tĂȘte ParamĂštre charset non dĂ©fini john.doe+test@gmail.com
    charset=true ParamÚtre charset=utf-8 défini john.doe+test@gmail.com
  • request.payload.parse.limit

    Utilisez la propriĂ©tĂ© request.payload.parse.limit pour dĂ©finir la taille maximale de la charge utile pouvant ĂȘtre traitĂ©e dans le flux de requĂȘte, en mĂ©gaoctets (M).

    Exemple :

    <Properties>
      <Property name="request.payload.parse.limit">30M</Property>
    </Properties>

    La limite configurable minimale est de 10 millions et la limite configurable maximale est de 30 millions. Si la propriĂ©tĂ© n'est pas dĂ©finie, la limite par dĂ©faut est de 10 millions.

    Pour en savoir plus, consultez Taille de la charge utile des messages.

N/A Non
FaultRules
DĂ©finit la maniĂšre dont le point de terminaison du proxy rĂ©agit Ă  une erreur. Une rĂšgle d'erreur spĂ©cifie les deux Ă©lĂ©ments suivants :
  • Une condition qui spĂ©cifie l'erreur Ă  gĂ©rer en fonction de la catĂ©gorie, de la sous-catĂ©gorie ou du nom prĂ©dĂ©finis de l'erreur.
  • Une ou plusieurs rĂšgles qui dĂ©finissent le comportement de la rĂšgle d'erreur pour la condition correspondante.

Consultez la page Gérer les erreurs.

ND Non
DefaultFaultRule

GÚre toutes les erreurs (systÚme, transport, messagerie ou rÚgle) qui ne sont pas explicitement gérées par une autre rÚgle d'erreur.

Consultez la page Gérer les erreurs.

ND Non
RouteRule DĂ©finit la destination des messages de requĂȘte entrants aprĂšs avoir Ă©tĂ© traitĂ©s par le pipeline de requĂȘtes ProxyEndpoint. En gĂ©nĂ©ral, la rĂšgle RouteRule pointe vers un point de terminaison cible, un IntegrationEndpoint ou une URL nommĂ©.
Name Attribut requis, qui fournit un nom pour la rĂšgle "RouteRule". Les caractĂšres que vous ĂȘtes autorisĂ© Ă  utiliser dans le nom sont limitĂ©s aux Ă©lĂ©ments suivants : A-Za-z0-9._\-$ % Par exemple, Cat2 %_ est un nom lĂ©gal. ND Oui
Condition Instruction conditionnelle facultative utilisée pour le routage dynamique lors de l'exécution. Les rÚgles de routage conditionnelles sont utiles, par exemple, pour permettre un routage basé sur le contenu afin d'assurer la gestion des versions du backend. ND Non
TargetEndpoint

ChaĂźne facultative qui identifie une configuration TargetEndpoint nommĂ©e. Un point de terminaison cible nommĂ© est un objet point de terminaison cible dĂ©fini dans le mĂȘme proxy d'API sous le rĂ©pertoire /targets).

En nommant un point de terminaison cible, vous spĂ©cifiez oĂč les messages de requĂȘte doivent ĂȘtre transfĂ©rĂ©s aprĂšs le traitement par le pipeline de requĂȘtes ProxyEndpoint. Notez qu'il s'agit d'un paramĂštre facultatif.

Un point de terminaison du proxy peut appeler directement une URL. Par exemple, une ressource JavaScript ou Java, fonctionnant en tant que client HTTP, peut effectuer la responsabilitĂ© de base d'un point de terminaison cible, qui consiste Ă  transfĂ©rer les requĂȘtes vers un service de backend.

ND Non
URL ChaĂźne facultative qui dĂ©finit une adresse rĂ©seau sortante appelĂ©e par le point de terminaison du proxy, en ignorant les configurations TargetEndpoint susceptibles d'ĂȘtre stockĂ©es sous /targets ND Non

Comment configurer des rĂšgles de routage

Un point de terminaison cible nommĂ© fait rĂ©fĂ©rence Ă  un fichier de configuration sous /apiproxy/targets, dans lequel la rĂšgle RouteRule transfĂšre une requĂȘte aprĂšs le traitement par point de terminaison du proxy.

Par exemple, la rĂšgle RouteRule suivante fait rĂ©fĂ©rence Ă  la configuration /apiproxy/targets/myTarget.xml :

<RouteRule name="default">
  <TargetEndpoint>myTarget</TargetEndpoint>
</RouteRule>

Appel direct d'URL

Un point de terminaison du proxy peut également appeler directement un service de backend. L'appel direct d'URL contourne toute configuration de point de terminaison cible nommée sous /apiproxy/targets. Pour cette raison, le point de terminaison cible est une configuration facultative de proxy d'API, bien qu'en pratique, l'appel direct à partir du point de terminaison du proxy ne soit pas recommandé.

Par exemple, la rĂšgle RouteRule suivante envoie un appel HTTP Ă  http://api.mycompany.com/v2.

<RouteRule name="default">
  <URL>http://api.mycompany.com/v2</URL> 
</RouteRule>

Routes conditionnelles

Les rĂšgles RouteRules peuvent ĂȘtre associĂ©es pour accepter le routage dynamique lors de l'exĂ©cution. Les requĂȘtes entrantes peuvent ĂȘtre acheminĂ©es vers des configurations TargetEndpoint nommĂ©es, directement vers des URL ou une combinaison des deux, en fonction des en-tĂȘtes HTTP, du contenu du message, des paramĂštres de requĂȘte ou des informations contextuelles telles que l'heure, paramĂštres rĂ©gionaux, etc.

Les rÚgles de routage conditionnelles fonctionnent comme les autres instructions conditionnelles sur Apigee. Consultez la documentation de référence sur les conditions et les variables de flux.

Par exemple, la combinaison RouteRule suivante permet d'Ă©valuer d'abord la requĂȘte entrante pour vĂ©rifier la valeur d'un en-tĂȘte HTTP. Si l'en-tĂȘte HTTP routeTo comporte la valeur TargetEndpoint1, la requĂȘte est transmise au point de terminaison cible nommĂ© TargetEndpoint1. Si ce n'est pas le cas, la requĂȘte entrante est transmise Ă  http://api.mycompany.com/v2.

<RouteRule name="MyRoute">
  <Condition>request.header.routeTo = "TargetEndpoint1"</Condition>
  <TargetEndpoint>TargetEndpoint1</TargetEndpoint>
</RouteRule>
<RouteRule name="default">
  <URL>http://api.mycompany.com/v2</URL>
</RouteRule>

Routes Null

Une valeur RouteRule nulle peut ĂȘtre dĂ©finie pour accepter des scĂ©narios dans lesquels le message de requĂȘte n'a pas besoin d'ĂȘtre transmis au point de terminaison cible. Cela s'avĂšre utile lorsqu'un point de terminaison du proxy effectue tous les traitements nĂ©cessaires, par exemple en utilisant JavaScript pour appeler un service externe ou rĂ©cupĂ©rer des donnĂ©es Ă  partir d'une recherche dans le magasin de clĂ©s/valeurs des services d'API.

Par exemple, ce qui suit dĂ©finit une route nulle :

<RouteRule name="GoNowhere"/>

Les routes conditionnelles nulles peuvent ĂȘtre utiles. Dans l'exemple suivant, une route nulle est configurĂ©e pour s'exĂ©cuter lorsqu'un en-tĂȘte HTTP request.header.X-DoNothing possĂšde une valeur autre que null.

<RouteRule name="DoNothingOnDemand">
  <Condition>request.header.X-DoNothing != null</Condition>
</RouteRule>

Rappelez-vous : les routesRules peuvent ĂȘtre enchaĂźnĂ©es. Par consĂ©quent, une route conditionnelle nulle est gĂ©nĂ©ralement un composant d'un ensemble de rĂšgles de route conçues pour prendre en charge le routage conditionnel.

Une route conditionnelle nulle peut ĂȘtre utile pour la compatibilitĂ© de la mise en cache. En utilisant la valeur de la variable dĂ©finie par la stratĂ©gie de mise en cache, vous pouvez configurer un proxy d'API pour qu'il exĂ©cute la route nulle lorsqu'une entrĂ©e est diffusĂ©e Ă  partir du cache.

<RouteRule name="DoNothingUnlessTheCacheIsStale">
  <Condition>lookupcache.LookupCache-1.cachehit is true</Condition>
</RouteRule>

Point de terminaison cible

Affiche un client appelant un service HTTP. La requĂȘte passe par le point de terminaison proxy, puis le point de terminaison cible avant d&#39;ĂȘtre traitĂ© par le service HTTP. La rĂ©ponse passe par le point de terminaison cible, puis le point de terminaison du proxy avant d&#39;ĂȘtre renvoyĂ© au client.

Un point de terminaison cible est l'Ă©quivalent sortant d'un point de terminaison du proxy. Un point de terminaison cible fonctionne en tant que client d'une API ou d'un service de backend : il envoie des requĂȘtes et reçoit des rĂ©ponses.

Un proxy d'API n'a pas besoin de point de terminaison cible. Les points de terminaison du proxy peuvent ĂȘtre configurĂ©s pour appeler directement les URL. Un proxy d'API sans point de terminaison cible contient gĂ©nĂ©ralement un point de terminaison de proxy qui appelle directement un service de backend, ou est configurĂ© pour appeler un service Ă  l'aide de Java ou de JavaScript.

Configuration de TargetEndpoint

/targets/default.xml

Le point de terminaison cible définit la connexion sortante d'Apigee vers un autre service ou une autre ressource.

Voici un exemple de configuration TargetEndpoint :

<TargetEndpoint name="default">
  <PreFlow/>
  <Flows/>
  <PostFlow/>
  <EventFlow/>
  <HTTPTargetConnection>
    <URL>http://mocktarget.apigee.net</URL>
    <SSLInfo/>
    <Authentication/>
  </HTTPTargetConnection>
  <FaultRules/>
  <DefaultFaultRule/>
  <ScriptTarget/>
  <LocalTargetConnection/>
</TargetEndpoint>

ÉlĂ©ments de configuration TargetEndpoint

Un point de terminaison cible peut appeler une cible de l'une des maniĂšres suivantes :

  • HTTPTargetConnection pour les appels HTTP ou HTTPS
  • LocalTargetConnection pour le chaĂźnage local de proxy Ă  proxy

Configurez un seul de ces éléments dans un point de terminaison cible.

Nom Description Par dĂ©faut Obligatoire ?
TargetEndpoint
name Nom du point de terminaison cible, qui doit ĂȘtre unique dans la configuration du proxy d'API. Le nom du point de terminaison cible est utilisĂ© dans la rĂšgle de routage ProxyEndpoint pour diriger les requĂȘtes en vue d'un traitement sortant. Les caractĂšres que vous ĂȘtes autorisĂ© Ă  utiliser dans le nom sont limitĂ©s aux Ă©lĂ©ments suivants : A-Za-z0-9._\-$ % ND Oui
PreFlow DĂ©finit les rĂšgles dans le flux PreFlow d'une requĂȘte ou d'une rĂ©ponse. ND Oui
Flows
DĂ©finit les rĂšgles dans les flux conditionnels d'une requĂȘte ou d'une rĂ©ponse.
ND Oui
PostFlow
DĂ©finit les rĂšgles dans le flux PostFlow d'une requĂȘte ou d'une rĂ©ponse.
ND Oui
EventFlow
Définit les rÚgles dans le flux EventFlow d'une réponse. EventFlow est utilisé pour diffuser des événements envoyés par le serveur. Pour en savoir plus, consultez Diffuser des événements envoyés par le serveur.
N/A Non
HTTPTargetConnection

Avec ses éléments enfants, spécifie une ressource de backend atteinte via HTTP.

Si vous utilisez HTTPTargetConnection, ne configurez pas d'autres types de connexions cibles (ScriptTarget ou LocalTargetConnection).

Vous pouvez utiliser l'Ă©lĂ©ment enfant <Authentication> pour effectuer des appels authentifiĂ©s aux services Google ou aux services personnalisĂ©s exĂ©cutĂ©s sur certains produits Google Cloud, tels que Cloud Functions et Cloud Run. L'utilisation de l'Ă©lĂ©ment <Authentication> nĂ©cessite de suivre les Ă©tapes de configuration et de dĂ©ploiement dĂ©crites dans la section Utiliser l'authentification Google. Avec une configuration appropriĂ©e, la rĂšgle crĂ©e un jeton d'authentification et l'ajoute Ă  la demande de service. Consultez Ă©galement la section Utilisation de l'Ă©lĂ©ment <Authentication>.

URL DĂ©finit l'adresse rĂ©seau du service de backend vers lequel le point de terminaison cible transmet les messages de requĂȘte. ND Non
LoadBalancer

Définit une ou plusieurs configurations TargetServer nommées. Les configurations TargetServer nommées peuvent servir à l'équilibrage de charge définissant deux ou plusieurs connexions de configuration de point de terminaison.

Vous pouvez également utiliser les serveurs cibles pour dissocier les configurations de proxy d'API des URL concrÚtes de points de terminaison du service de backend.

ND Non
Properties Un ensemble de paramĂštres de configuration HTTP facultatifs peut ĂȘtre dĂ©fini en tant que propriĂ©tĂ©s d'un objet <TargetEndpoint>.

Utilisez la propriĂ©tĂ© response.payload.parse.limit pour dĂ©finir la taille maximale de la charge utile pouvant ĂȘtre traitĂ©e dans le flux de rĂ©ponse, en mĂ©gaoctets (M).

Exemple :

<Properties>
  <Property name="response.payload.parse.limit">15M</Property>
</Properties>

La limite configurable minimale est de 10 millions et la limite configurable maximale est de 30 millions. Si la propriĂ©tĂ© n'est pas dĂ©finie, la limite par dĂ©faut est de 10 millions.

Pour en savoir plus, consultez Taille de la charge utile des messages.

N/A Non
SSLInfo Vous pouvez éventuellement définir des paramÚtres TLS/SSL sur un point de terminaison cible pour contrÎler la connexion TLS/SSL entre le proxy d'API et le service cible. Consultez la page Configuration TLS/SSL TargetEndpoint. ND Non
LocalTargetConnection Avec ses éléments enfants, spécifie une ressource à atteindre localement en ignorant les caractéristiques réseau, telles que l'équilibrage de charge et les processeurs de messages.

Pour spécifier la ressource cible, incluez soit l'élément enfant APIProxy (avec l'élément ProxyEndpoint), soit l'élément enfant Path.

Pour plus d'informations, consultez la section ChaĂźner des proxys d'API.

Si vous utilisez LocalTargetConnection, ne configurez pas d'autres types de connexions cibles (HTTPTargetConnection ou ScriptTarget).

APIProxy SpĂ©cifie le nom d'un proxy API Ă  utiliser comme cible pour les requĂȘtes. Le proxy cible doit appartenir Ă  la mĂȘme organisation et Ă  l'environnement que le proxy qui envoie les requĂȘtes. Ceci constitue une alternative Ă  l'utilisation de l'Ă©lĂ©ment Path. ND Non
ProxyEndpoint Utilisé avec APIProxy pour spécifier le nom du point de terminaison du proxy cible. ND Non
Path SpĂ©cifie le chemin d'accĂšs au point de terminaison d'un proxy d'API Ă  utiliser comme cible pour les requĂȘtes. Le proxy cible doit appartenir Ă  la mĂȘme organisation et Ă  l'environnement que le proxy qui envoie les requĂȘtes. Il s'agit d'une alternative Ă  l'utilisation d'APIProxy. ND Non
FaultRules
DĂ©finit la maniĂšre dont le point de terminaison cible rĂ©agit Ă  une erreur. Une rĂšgle d'erreur spĂ©cifie les deux Ă©lĂ©ments suivants :
  • Une condition qui spĂ©cifie l'erreur Ă  gĂ©rer en fonction de la catĂ©gorie, de la sous-catĂ©gorie ou du nom prĂ©dĂ©finis de l'erreur.
  • Une ou plusieurs rĂšgles qui dĂ©finissent le comportement de la rĂšgle d'erreur pour la condition correspondante.

Consultez la page Gérer les erreurs.

ND Non
DefaultFaultRule

GÚre toutes les erreurs (systÚme, transport, messagerie ou rÚgle) qui ne sont pas explicitement gérées par une autre rÚgle FaultRule.

Consultez la page Gérer les erreurs.

ND Non

Utilisation de l'élément <Authentication>

L'utilisation de l'Ă©lĂ©ment <Authentication> dans <TargetEndpoint> est identique Ă  l'utilisation de l'Ă©lĂ©ment <Authentication> dans la rĂšgle ServiceCallout. Dans <TargetEndpoint> et ServiceCallout, <Authentication> est un sous-Ă©lĂ©ment de <HttpTargetConnection>. Pour en savoir plus, consultez la section ÉlĂ©ment Authentication dans la documentation de rĂ©fĂ©rence de la rĂšgle ServiceCallout.

Référence d'erreur de l'élément <Authentication>

Si vous utilisez l'élément <Authentication>, vous trouverez des messages d'erreur possibles et des conseils de dépannage pour les erreurs de déploiement et d'exécution dans la section Erreurs de la documentation sur la rÚgle ServiceCallout.

Exemples de l'élément <Authentication>

L'exemple suivant montre comment appeler un service dĂ©ployĂ© sur Cloud Run en tant que cible Ă  l'aide de l'Ă©lĂ©ment Authentication afin de gĂ©nĂ©rer un jeton OpenID Connect nĂ©cessaire Ă  l'authentification de l'appel :

<TargetEndpoint name="TargetEndpoint-1">
  <HTTPTargetConnection>
      <Properties/>
      <URL>https://cloudrun-hostname.a.run.app/test</URL>
      <Authentication>
          <GoogleIDToken>
             <Audience>https://cloudrun-hostname.a.run.app/test</Audience>
          </GoogleIDToken>
     </Authentication>
  </HTTPTargetConnection>
</TargetEndpoint>

L'exemple suivant montre comment appeler un service cible (TargetService) qui pointe vers Cloud Run Ă  l'aide de l'Ă©lĂ©ment Authentication pour gĂ©nĂ©rer un jeton OpenID Connect nĂ©cessaire Ă  l'authentification de l'appel. L'Ă©lĂ©ment HeaderName ajoute le jeton de support gĂ©nĂ©rĂ© Ă  un en-tĂȘte nommĂ© X-Serverless-Authorization, qui est envoyĂ© au systĂšme cible. L'en-tĂȘte Authorization, s'il est prĂ©sent, est conservĂ© tel quel et est Ă©galement envoyĂ© dans la requĂȘte.

<TargetEndpoint name="TargetEndpoint-1">
   <HTTPTargetConnection>
     <Authentication>
        <HeaderName>X-Serverless-Authorization</HeaderName>
        <GoogleIDToken>
            <Audience ref="flow.variable.audience">https://cloudrun-hostname.a.run.app</Audience>
        </GoogleIDToken>
     </Authentication>
      <LoadBalancer>
         <Server name="cloud-run-target" />
      </LoadBalancer>
   </HTTPTargetConnection>
</TargetEndpoint>

L'exemple suivant montre comment appeler un service cible (TargetService) qui pointe vers le service Secret Manager de Google. Dans cet exemple, l'Ă©lĂ©ment GoogleAccessToken est configurĂ© pour gĂ©nĂ©rer un jeton d'authentification Google afin d'authentifier la requĂȘte cible :

<HTTPTargetConnection>
   <Authentication>
      <GoogleAccessToken>
        <Scopes>
          <Scope>https://www.googleapis.com/auth/cloud-platform</Scope>
        </Scopes>
      </GoogleAccessToken>
    </Authentication>
    <URL>
      https://secretmanager.googleapis.com/v1/projects/project-id/secrets/secret-id
    </URL>
</HTTPTargetConnection>

L'exemple suivant montre comment dĂ©finir automatiquement l'audience du jeton GoogleIDToken. Lorsque la valeur de useTargetUrl est true et que la variable rĂ©fĂ©rencĂ©e ne correspond pas Ă  une variable valide, l'URL de la cible (Ă  l'exclusion des paramĂštres de requĂȘte) est utilisĂ©e comme audience. Supposons que le chemin de la requĂȘte soit /foobar et que l'URL du serveur cible soit https://xyz.com, l'audience du GoogleIDToken est automatiquement dĂ©finie sur https://xyz.com/foobar.

<TargetEndpoint name="TargetEndpoint-1">
  <HTTPTargetConnection>
    <Authentication>
      <GoogleIDToken>
        <Audience ref='myvariable' useTargetUrl="true"/>
      </GoogleIDToken>
    </Authentication>
    <LoadBalancer>
      <Server name="TS" />
    </LoadBalancer>
  </HTTPTargetConnection>
</TargetEndpoint>

Configuration de TLS/SLL TargetEndpoint

Les points de terminaison cibles doivent souvent gérer les connexions HTTPS avec une infrastructure de backend hétérogÚne. C'est la raison pour laquelle un certain nombre de paramÚtres de configuration TLS/SSL sont acceptés.

ÉlĂ©ments de configuration TargetEndpoint TLS/SSL

Nom Description Par dĂ©faut Obligatoire ?
SSLInfo

Le bloc <SSLInfo> peut ĂȘtre utilisĂ© pour les protocoles TLS/SSL unidirectionnels et bidirectionnels.

Enabled

Lorsqu'il est défini sur true, il spécifie que la connexion cible doit utiliser le protocole SSL conformément à tous les autres paramÚtres spécifiés dans ce bloc <SSLInfo>. Lorsqu'il est défini sur false, il indique que la connexion cible ne doit pas utiliser SSL.

Toutefois, si le bloc <HTTPTargetConnection> englobant contient un Ă©lĂ©ment <URL> qui correspond Ă  une chaĂźne commençant par https://, le protocole SSL sera utilisĂ© mĂȘme si <Enabled> est dĂ©fini sur "false". Dans ce cas, l'intĂ©gralitĂ© du bloc <SSLInfo> est ignorĂ©e.

À l'inverse, s'il existe un Ă©lĂ©ment <URL> qui commence par http://, le protocole SSL ne sera pas utilisĂ© mĂȘme si <Enabled> est dĂ©fini sur "true".

faux Non
Enforce

Applique le protocole SSL strict entre Apigee et le backend cible.

Si la valeur est définie sur true, les connexions échouent pour les cibles avec des certificats non valides, des certificats expirés, des certificats autosignés, des certificats avec un nom d'hÎte incompatible et des certificats avec une racine non approuvée. Un code d'échec 4xx ou 5xx est renvoyé.

Si cette valeur n'est pas définie ou est définie sur false, le résultat des connexions aux backends cibles avec des certificats problématiques dépend du paramÚtre <IgnoreValidationErrors> (voir ci-dessous). Une réponse positive (2xx) peut se produire dans certaines conditions, si <IgnoreValidationErrors> est défini sur true.

Vous pouvez remplacer le champ Enforce au niveau de l'environnement avec le flag de fonctionnalité SSLInfo.Enforce. Consultez la section Spécifier l'application du protocole SSL au niveau de l'environnement.

false Non
TrustStore

Un keystore contenant des certificats de serveur approuvés. Apigee considÚre le pair distant comme approuvé si la chaßne de certificats qu'il envoie se termine par un certificat contenu dans ce keystore.

ND Non
ClientAuthEnabled

Si la valeur est true, active le protocole TLS bidirectionnel (également appelé TLS mutuel ou mTLS) entre Apigee et le pair distant (client API ou backend cible).

L'activation du TLS bidirectionnel nécessite généralement de configurer un truststore et un keystore sur Apigee.

false Non
KeyStore Magasin de clés contenant des clés privées utilisées pour l'authentification du client sortant ND Oui (si ClientAuthEnabled est défini sur "true")
KeyAlias Alias de la clé privée utilisée pour l'authentification du client sortant ND Oui (si ClientAuthEnabled est défini sur "true")
IgnoreValidationErrors

Indique si les erreurs de validation sont ignorées. Si le systÚme backend utilise SNI et renvoie un certificat dont le nom distinctif (DN) de l'objet ne correspond pas au nom d'hÎte, il est impossible d'ignorer l'erreur et la connexion échoue.

Remarque : Si la valeur de <Enforce> est dĂ©finie sur true, la valeur de <IgnoreValidationErrors> est ignorĂ©e.

false Non
Ciphers

Algorithmes de chiffrement compatibles avec TLS/SSL sortant Si aucun algorithme n'est spécifié, tous les algorithmes de chiffrement disponibles pour la JVM sont autorisés.

Pour limiter les algorithmes de chiffrement, ajoutez les Ă©lĂ©ments suivants, rĂ©pertoriant les algorithmes de chiffrement compatibles :

<Ciphers>
 <Cipher>TLS_RSA_WITH_3DES_EDE_CBC_SHA</Cipher>    
 <Cipher>TLS_RSA_WITH_DES_CBC_SHA</Cipher>
</Ciphers>
ND Non
Protocols

Protocoles compatibles pour le protocole TLS/SSL sortant Si aucun protocole n'est spécifié, tous les protocoles disponibles pour la JVM seront autorisés.

Pour limiter les protocoles, spĂ©cifiez-les explicitement. Par exemple, pour n'autoriser que TLS v1.2 ou TLS v1.3 :

<Protocols>
 <Protocol>TLSv1.2</Protocol>
 <Protocol>TLSv1.3</Protocol>
</Protocols>
N/A Non
CommonName

Apigee compare la valeur ici avec le CN (nom commun) ou les SAN (noms d'objet de remplacement) du certificat d'un pair distant.

ND Non

Spécifier l'application du protocole SSL au niveau de l'environnement

Si SSLInfo.Enforce est défini sur true ou false, la valeur spécifiée remplace toutes les options d'application précises spécifiées dans les blocs <SSLInfo> des configurations TargetEndpoint ou TargetServer.

Si SSLInfo.Enforce n'est pas défini, l'application du protocole SSL est déterminée par les valeurs spécifiées à l'aide de l'élément <Enforce> dans les blocs <SSLInfo> individuels. Pour en savoir plus, consultez la section Configuration de TLS/SSL TargetEndpoint.

Dans l'exemple suivant, SSLInfo.Enforce est défini sur true. Dans le résultat, vous pouvez voir que SSL est appliqué dans l'environnement spécifié.

VALUE=true
curl -Ss -v -X PUT \
    "https://apigee.googleapis.com/v1/organizations/MYORG/environments/MYENV" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer TOKEN" \
    -d '{
        "name": "MYENV",
        "properties": {
            "property": [{
                "name": "features.SSLInfo.Enforce",
                "value": "'"$VALUE"'"
            }]
        }
    }'
  

RĂ©sultat :

{
  ...
  "properties": {
    "property": [
      {
        "name": "features.SSLInfo.Enforce",
        "value": "true"
      }
    ]
  },
  ...
}

Exemple de point de terminaison cible avec authentification client sortante activée

<TargetEndpoint name="default">
  <HttpTargetConnection>
        <URL>https://myservice.com</URL>
    <SSLInfo>
      <Enabled>true</Enabled>
      <Enforce>true</Enforce>
      <ClientAuthEnabled>true</ClientAuthEnabled>
      <KeyStore>myKeystore</KeyStore>
      <KeyAlias>myKey</KeyAlias>
      <TrustStore>myTruststore</TrustStore>
    </SSLInfo>
  </HttpTargetConnection>
</TargetEndpoint>

Pour obtenir des instructions détaillées, consultez la section Configurer TLS.

Utiliser des variables de flux pour définir des valeurs TLS/SSL de maniÚre dynamique

Vous pouvez également définir de maniÚre dynamique les détails TLS/SSL pour répondre aux exigences d'exécution flexible. Par exemple, si votre proxy se connecte à deux cibles potentiellement différentes (une cible de test et une cible de production), vous pouvez configurer votre proxy d'API de maniÚre automatisée pour déterminer quel environnement est appelé et définir de maniÚre dynamique des références au keystore et au truststore appropriés. L'article de la communauté Apigee Dynamic SSLInfo for TargetEndpoint using variable reference explique en détail ce scénario et fournit des exemples de proxy d'API déployables.

Dans l'exemple suivant, la valeur du tag <SSLInfo> est dĂ©finie dans une configuration TargetEndpoint, et les valeurs peuvent ĂȘtre fournies lors de l'exĂ©cution, par exemple dans un appel Java, une rĂšgle JavaScript ou une rĂšgle AssignMessage. Utilisez les variables de message qui contiennent les valeurs que vous souhaitez dĂ©finir.

Les variables ne sont autorisées que dans les éléments suivants.

<SSLInfo>
    <Enabled>{myvars.ssl.enabled}</Enabled>
    <ClientAuthEnabled>{myvars.ssl.client.auth.enabled}</ClientAuthEnabled>
    <KeyStore>{myvars.ssl.keystore}</KeyStore>
    <KeyAlias>{myvars.ssl.keyAlias}</KeyAlias>
    <TrustStore>{myvars.ssl.trustStore}</TrustStore>
</SSLInfo>

Utiliser des références pour définir les valeurs TLS/SSL de maniÚre dynamique

Lorsque vous configurez un point de terminaison cible qui utilise HTTPS, vous devez prendre en compte le cas oĂč le certificat TLS/SSL expire ou lorsqu'une modification apportĂ©e Ă  la configuration systĂšme nĂ©cessite une mise Ă  jour du certificat.

Pour en savoir plus, consultez la section Gérer des certificats expirés.

Cependant, vous pouvez éventuellement configurer le point de terminaison cible pour utiliser une référence au keystore ou au truststore à la place. L'avantage d'utiliser une référence est que vous pouvez mettre à jour la référence pour qu'elle pointe vers un autre keystore ou truststore afin de mettre à jour le certificat TLS/SSL sans avoir à redémarrer les processeurs de message.

Par exemple, vous trouverez ci-dessous un point de terminaison cible qui utilise une rĂ©fĂ©rence au magasin de clĂ©s :

<SSLInfo>
  <Enabled>true</Enabled>
  <ClientAuthEnabled>false</ClientAuthEnabled>
  <KeyStore>ref://keystoreref</KeyStore>
  <KeyAlias>myKeyAlias</KeyAlias>
</SSLInfo>

Utilisez l'appel d'API POST suivant pour crĂ©er la rĂ©fĂ©rence nommĂ©e keystoreref :

curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{env}/references" \
  -X POST \
  -H "Authorization: Bearer $TOKEN" \
  -d '<ResourceReference name="keystoreref">
    <Refers>myTestKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
</ResourceReference>'

OĂč $TOKEN est dĂ©fini sur votre jeton d'accĂšs OAuth 2.0, comme dĂ©crit dans la section Obtenir un jeton d'accĂšs OAuth 2.0. Pour en savoir plus sur les options curl utilisĂ©es dans cet exemple, consultez la section Utiliser curl. Pour obtenir une description des variables d'environnement que vous pouvez utiliser, consultez DĂ©finir des variables d'environnement pour les requĂȘtes API Apigee.

La référence spécifie le nom du magasin de clés et son type.

Utilisez l'appel d'API GET suivant pour afficher la rĂ©fĂ©rence :

curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{env}/references/keystoreref" \
  -H "Authorization: Bearer $TOKEN"

OĂč $TOKEN est dĂ©fini sur votre jeton d'accĂšs OAuth 2.0, comme dĂ©crit dans la section Obtenir un jeton d'accĂšs OAuth 2.0. Pour en savoir plus sur les options curl utilisĂ©es dans cet exemple, consultez la section Utiliser curl. Pour obtenir une description des variables d'environnement que vous pouvez utiliser, consultez DĂ©finir des variables d'environnement pour les requĂȘtes API Apigee.

curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{env}/references/keystoreref" \
  -H "Authorization: Bearer $TOKEN"

OĂč $TOKEN est dĂ©fini sur votre jeton d'accĂšs OAuth 2.0, comme dĂ©crit dans la section Obtenir un jeton d'accĂšs OAuth 2.0. Pour en savoir plus sur les options curl utilisĂ©es dans cet exemple, consultez la section Utiliser curl. Pour obtenir une description des variables d'environnement que vous pouvez utiliser, consultez DĂ©finir des variables d'environnement pour les requĂȘtes API Apigee.

Pour modifier ultĂ©rieurement la rĂ©fĂ©rence afin qu'elle pointe vers un magasin de clĂ©s diffĂ©rent, assurez-vous que l'alias porte le mĂȘme nom, utilisez l'appel PUT suivant :

curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{env}/references/keystoreref" \
  -X PUT \
  -H "Authorization: Bearer $TOKEN" \
  -d '<ResourceReference name="keystoreref">
    <Refers>myNewKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
  </ResourceReference>'

OĂč $TOKEN est dĂ©fini sur votre jeton d'accĂšs OAuth 2.0, comme dĂ©crit dans la section Obtenir un jeton d'accĂšs OAuth 2.0. Pour en savoir plus sur les options curl utilisĂ©es dans cet exemple, consultez la section Utiliser curl. Pour obtenir une description des variables d'environnement que vous pouvez utiliser, consultez DĂ©finir des variables d'environnement pour les requĂȘtes API Apigee.

TargetEndpoint avec un équilibrage de charge cible

Les points de terminaison cibles acceptent l'Ă©quilibrage de charge sur plusieurs serveurs cibles nommĂ©s Ă  l'aide de trois algorithmes d'Ă©quilibrage de charge de type.

Pour obtenir des instructions dĂ©taillĂ©es, reportez-vous Ă  la section Équilibrage de charge sur les serveurs backend.

IntegrationEndpoint

Un IntegrationEndpoint est un point de terminaison cible qui exécute spécifiquement des intégrations Apigee. Si vous avez configuré un IntegrationEndpoint, Apigee envoie l'objet request à la plate-forme d'intégration d'Apigee pour l'exécuter. En plus de configurer le point de terminaison IntegrationEndpoint, vous devez également ajouter la rÚgle SetIntegrationRequest dans le flux de votre proxy pour exécuter votre intégration.

Vous pouvez configurer votre intégration pour qu'elle s'exécute de maniÚre synchrone ou asynchrone en définissant l'élément <AsyncExecution> dans la configuration IntegrationEndpoint. Pour en savoir plus, consultez la section Exécution synchrone et asynchrone. Une fois l'intégration exécutée, Apigee enregistre la réponse dans le message de réponse.

Configurer IntegrationEndpoint

Pour configurer un point de terminaison d'intĂ©gration comme point de terminaison cible, ajoutez l'Ă©lĂ©ment IntegrationEndpoint Ă  votre configuration ProxyEndpoint. Voici un exemple de configuration ProxyEndpoint :

<ProxyEndpoint name="default">
    <Description/>
    <FaultRules/>
    <PreFlow name="PreFlow">
        <Request>
            <Step>
                <Name>my-set-integration-request-policy</Name>
            </Step>
        </Request>
    </PreFlow>
    <Flows/>
    <PostFlow name="PostFlow"/>
    <HTTPProxyConnection>
        <BasePath>/integration-endpoint-test</BasePath>
        <Properties/>
    </HTTPProxyConnection>
    <RouteRule name="default">
        <IntegrationEndpoint>my-int-endpoint</IntegrationEndpoint>
    </RouteRule>
</ProxyEndpoint>

Dans l'exemple de configuration ProxyEndpoint, Apigee effectue les tĂąches suivantes :

  1. Dans le PreFlow, il exĂ©cute la rĂšgle nommĂ©e my-set-integration-request-policy, qui dĂ©finit l'objet de la requĂȘte d'intĂ©gration et les variables du flux d'intĂ©gration.
  2. Il utilise my-int-endpoint comme point de terminaison cible, comme spécifié dans la rÚgle RouteRule.
  3. Il lit l'objet de la requĂȘte d'intĂ©gration créé par my-set-integration-request-policy.
  4. Il envoie la requĂȘte Ă  la plate-forme d'intĂ©gration d'Apigee Ă  l'aide de l'objet de la requĂȘte et des variables de flux dĂ©finies par la rĂšgle SetIntegrationRequest.
  5. Il enregistre la réponse de l'intégration dans le message de réponse.

Le fichier XML contenant la dĂ©claration <IntegrationEndpoint> est disponible dans le rĂ©pertoire APIGEE_BUNDLE_DIRECTORY/apiproxy/integration-endpoints/. Si vous crĂ©ez votre proxy d'API Ă  l'aide de l'option Develop > API Proxies > CREATE NEW > Integration target, Apigee stocke la dĂ©claration dans le fichier /apiproxy/integration-endpoints/default.xml. Si vous crĂ©ez le fichier XML du point de terminaison d'intĂ©gration Ă  partir de l'UI, vous pouvez personnaliser son nom.

L'exemple suivant montre la dĂ©claration de l'Ă©lĂ©ment <IntegrationEndpoint> dans le fichier XML :

<IntegrationEndpoint name="my-int-endpoint">
    <AsyncExecution>false</AsyncExecution>
</IntegrationEndpoint>

ÉlĂ©ments de configuration de IntegrationEndpoint

Nom Description Par dĂ©faut Obligatoire ?
IntegrationEndpoint
name Nom du point de terminaison IntegrationEndpoint. Les caractĂšres que vous pouvez utiliser dans le nom se limitent Ă  : A-Za-z0-9._\-$ % ND Oui
AsyncExecution Valeur booléenne indiquant si l'intégration doit s'exécuter en mode synchrone ou asynchrone. Pour en savoir plus, consultez la section Exécution synchrone et asynchrone. faux Non

Exécution synchrone et asynchrone

Vous pouvez configurer l'intĂ©gration pour qu'elle s'exĂ©cute en mode synchrone ou asynchrone. Pour comprendre la diffĂ©rence entre ces deux modes d'exĂ©cution, consultez la section <AsyncExecution>.

Utilisez l'élément <AsyncExecution> de </IntegrationEndpoint> pour spécifier une exécution synchrone ou asynchrone. Si vous définissez <AsyncExecution> sur true, l'intégration s'exécute de maniÚre asynchrone. Si vous définissez cet élément sur false, l'intégration s'exécute de maniÚre synchrone.

L'exemple suivant dĂ©finit l'Ă©lĂ©ment AsyncExecution sur true :

<IntegrationEndpoint name="my-int-endpoint">
    <AsyncExecution>true</AsyncExecution>
</IntegrationEndpoint>

Stratégies

Le rĂ©pertoire /policies d'un proxy d'API contient toutes les stratĂ©gies pouvant ĂȘtre associĂ©es aux flux dans le proxy d'API.

ÉlĂ©ments de configuration de la stratĂ©gie

Nom Description Par dĂ©faut Obligatoire ?
Policy
name

Nom interne de la rĂšgle. Les caractĂšres que vous pouvez utiliser dans le nom se limitent Ă  : A-Za-z0-9._\-$ %. L'interface utilisateur Apigee applique cependant des restrictions supplĂ©mentaires, telles que la suppression automatique des caractĂšres qui ne sont pas alphanumĂ©riques.

Vous pouvez également utiliser l'élément <DisplayName> pour ajouter un libellé à la rÚgle dans l'éditeur de proxy de l'interface utilisateur d'Apigee, en utilisant un nom différent, en langage naturel.

ND Oui
enabled

Définissez sur true pour appliquer la rÚgle.

DĂ©finissez sur false pour dĂ©sactiver la rĂšgle. La stratĂ©gie ne sera pas appliquĂ©e, mĂȘme si elle reste associĂ©e Ă  un flux.

true Non
continueOnError

Définissez sur false pour afficher une erreur en cas d'échec d'une rÚgle. Il s'agit du comportement attendu pour la plupart des rÚgles.

DĂ©finissez sur true pour que l'exĂ©cution du flux se poursuive mĂȘme aprĂšs l'Ă©chec d'une rĂšgle.

false Non
async

Si dĂ©fini sur true, l'exĂ©cution de la rĂšgle est dĂ©chargĂ©e sur un thread diffĂ©rent, laissant ainsi le thread principal disponible pour gĂ©rer des requĂȘtes supplĂ©mentaires. Une fois le traitement hors connexion terminĂ©, le thread principal revient et finit le traitement du flux de messages. Dans certains cas, la dĂ©finition de l'option "async" sur true amĂ©liore les performances du proxy d'API. Cependant, une utilisation excessive de la mĂ©thode asynchrone peut nuire aux performances lorsque le nombre de threads est trop important.

Pour utiliser un comportement asynchrone dans des proxys d'API, consultez la page ModĂšle d'objet JavaScript.

false Non

Rattachement de stratégie

L'image suivante montre la sĂ©quence d'exĂ©cution des flux de proxy d'API :

montre un client appelant un service HTTP. La requĂȘte rencontre le point de terminaison du proxy et le point de terminaison cible, qui contiennent chacun des Ă©tapes qui dĂ©clenchent les rĂšgles. Une fois que le service HTTP a renvoyĂ© la rĂ©ponse, celle-ci est traitĂ©e par le point de terminaison cible, puis par l&#39;objet ProxyEndpoint avant d&#39;ĂȘtre renvoyĂ©e au client. Comme pour la requĂȘte, la rĂ©ponse est traitĂ©e par des stratĂ©gies au cours des Ă©tapes.

Comme indiquĂ© ci-dessus :

Les rĂšgles sont associĂ©es en tant qu'Ă©tapes de traitement aux Flux. Le nom de la rĂšgle est utilisĂ© pour rĂ©fĂ©rencer la stratĂ©gie Ă  appliquer en tant qu'Ă©tape de traitement. Le format d'un rattachement de stratĂ©gies est le suivant :

<Step><Name>MyPolicy</Name></Step>

Les stratĂ©gies sont appliquĂ©es dans l'ordre dans lequel elles sont associĂ©es Ă  un flux. Exemple :

<Step><Name>FirstPolicy</Name></Step>
<Step><Name>SecondPolicy</Name></Step>

ÉlĂ©ments de configuration de rattachement de stratĂ©gie

Nom Description Par dĂ©faut Obligatoire ?
Step
Name Nom de la stratégie à exécuter par cette définition d'étape. ND Oui
Condition Instruction conditionnelle déterminant si la stratégie est appliquée ou non. Si une stratégie est associée à une condition, elle ne s'exécute que si l'instruction conditionnelle est définie sur "true". ND Non

Flux

ProxyEndpoint et TargetEndpoint dĂ©finissent un pipeline pour le traitement des messages de requĂȘte et de rĂ©ponse. Un pipeline de traitement se compose d'un flux de requĂȘte et d'un flux de rĂ©ponse. Chaque flux de requĂȘtes et chaque flux de rĂ©ponses sont subdivisĂ©s en flux PreFlow, un ou plusieurs flux conditionnels ou nommĂ©s facultatifs, et un postFlow.

  • PreFlow : s'exĂ©cute toujours. S'exĂ©cute avant les flux conditionnels, le cas Ă©chĂ©ant.
  • PostFlow : s'exĂ©cute toujours. S'exĂ©cute aprĂšs les flux conditionnels, le cas Ă©chĂ©ant.

En outre, vous pouvez ajouter un PostClientFlow au point de terminaison du proxy, qui s'exĂ©cute une fois la rĂ©ponse renvoyĂ©e Ă  l'application cliente Ă  l'origine de la requĂȘte. Seule la rĂšgle MessageLogging peut ĂȘtre associĂ©e Ă  ce flux. PostClientFlow rĂ©duit la latence du proxy d'API et met les informations Ă  disposition pour la journalisation ne faisant pas l'objet de calculs avant que la rĂ©ponse ne soit renvoyĂ©e au client, comme client.sent.start.timestamp et client.sent.end.timestamp. Le flux est utilisĂ© principalement pour mesurer l'intervalle de temps entre les horodatages de dĂ©but et de fin du message de rĂ©ponse.

Voici un exemple de flux PostClientFlow avec une stratégie de journalisation des messages.

...
  <PostFlow name="PostFlow">
      <Request/>
      <Response/>
  </PostFlow>
  <PostClientFlow>
      <Request/>
      <Response>
          <Step>
              <Name>Message-Logging-1</Name>
          </Step>
      </Response>
  </PostClientFlow>
  ...

Le pipeline de traitement proxy de l'API exĂ©cute les flux dans l'ordre suivant :

Pipeline des requĂȘtes :

  1. PreFlow de requĂȘte de proxy
  2. Flux conditionnels de requĂȘte de proxy (facultatif)
  3. Post-flux de requĂȘte de proxy
  4. PreFlow de requĂȘte cible
  5. Flux conditionnels de requĂȘte cible (facultatif)
  6. Post-flux de requĂȘte cible

Pipeline de rĂ©ponse :

  1. PreFlow de réponse cible
  2. Flux conditionnels des réponses cibles (facultatif)
  3. Post-flux de réponse cible
  4. PreFlow de réponse proxy
  5. Flux conditionnels de réponse proxy (facultatif)
  6. Post-flux de réponse proxy
  7. RequĂȘte post-flux client (facultatif)

Seuls les flux avec des rattachements de stratĂ©gies doivent ĂȘtre configurĂ©s dans les configurations ProxyEndpoint ou TargetEndpoint. Les flux PreFlow et PostFlow ne doivent ĂȘtre spĂ©cifiĂ©s que dans une configuration ProxyEndpoint ou TargetEndpoint lorsqu'une stratĂ©gie doit ĂȘtre appliquĂ©e lors du traitement de PreFlow ou PostFlow.

Contrairement aux flux conditionnels, l'ordre des éléments PreFlow et PostFlow n'est pas important. Le proxy d'API exécute toujours chaque élément au moment approprié dans le pipeline, quel que soit leur emplacement dans la configuration du point de terminaison.

Flux conditionnels

Les points de terminaison du proxy et points de terminaison cibles sont compatibles avec un nombre illimité de flux conditionnels (également appelés flux nommés).

Le proxy d'API teste la condition spécifiée dans le flux conditionnel et, si la condition est remplie, les étapes de traitement du flux conditionnel sont exécutées par le proxy d'API. Si la condition n'est pas remplie, les étapes de traitement du flux conditionnel sont ignorées. Les flux conditionnels sont évalués dans l'ordre défini dans le proxy de l'API et le premier dont la condition est remplie est exécutée.

En dĂ©finissant des flux conditionnels, vous pouvez appliquer des Ă©tapes de traitement dans un proxy d'API en fonction des Ă©lĂ©ments suivants :

  • URI de la demande
  • Verbe HTTP (GET/PUT/POST/DELETE)
  • Valeur d'un paramĂštre de requĂȘte, d'un en-tĂȘte et d'un paramĂštre de formulaire
  • Beaucoup d'autres types de conditions

Par exemple, le flux conditionnel suivant spĂ©cifie qu'il n'est exĂ©cutĂ© que lorsque le chemin de la ressource de requĂȘte est /accesstoken. Toute requĂȘte entrante avec le chemin /accesstoken entraĂźne l'exĂ©cution de ce flux, ainsi que toutes les rĂšgles associĂ©es au flux. Si le chemin de la requĂȘte n'inclut pas le suffixe /accesstoken, le flux ne s'exĂ©cute pas (mĂȘme si un autre flux conditionnel peut ĂȘtre utilisĂ©).

<Flows>
  <Flow name="TokenEndpoint">
    <Condition>proxy.pathsuffix MatchesPath "/accesstoken"</Condition>
    <Request>
      <Step>
        <Name>GenerateAccessToken</Name>
      </Step>
    </Request> 
  </Flow>
</Flows>   

ÉlĂ©ments de configuration de flux

Nom Description Par dĂ©faut Obligatoire ?
Flow Pipeline de traitement de requĂȘte ou de rĂ©ponse dĂ©fini par un point de terminaison du proxy ou un point de terminaison cible
Name Nom unique du flux. ND Oui
Condition Instruction conditionnelle qui évalue une ou plusieurs variables à évaluer sur "vrai" ou "faux". Tous les flux autres que les types PreFlow et PostFlow prédéfinis doivent définir une condition pour leur exécution. Toutefois, si vous incluez un seul flux sans condition à la fin d'une séquence de flux, il agira comme l'instruction "Else" à la fin de la séquence de flux. ND Oui
Request Pipeline associĂ© au processeur des messages de requĂȘte ND Non
Response Pipeline associé au processeur des messages de réponse ND Non

Traitement par étapes

L'ordre séquentiel des flux conditionnels est appliqué par Apigee. Les flux conditionnels s'exécutent de haut en bas. Le premier flux conditionnel dont la condition est évaluée à true est exécuté, et un seul flux conditionnel est exécuté.

Par exemple, dans la configuration de flux suivante, toute requĂȘte entrante qui n'inclut pas le suffixe de chemin /first ou /second entraĂźne l'exĂ©cution de la rĂšgle ThirdFlow, en appliquant la rĂšgle nommĂ©e Return404.

<Flows>
  <Flow name="FirstFlow">
    <Condition>proxy.pathsuffix MatchesPath "/first"</Condition>
    <Request>
      <Step><Name>FirstPolicy</Name></Step>
    </Request>
  </Flow>
  <Flow name="SecondFlow">
    <Condition>proxy.pathsuffix MatchesPath "/second"</Condition>
    <Request>
      <Step><Name>FirstPolicy</Name></Step>
      <Step><Name>SecondPolicy</Name></Step>
    </Request>
  </Flow>
  <Flow name="ThirdFlow">
    <Request>
      <Step><Name>Return404</Name></Step>
    </Request>
  </Flow>
</Flows>

Ressources

Les "ressources" (fichiers de ressources Ă  utiliser dans les proxys d'API) sont des scripts, du code et des transformations XSL pouvant ĂȘtre associĂ©s aux flux Ă  l'aide de rĂšgles. Celles-ci s'affichent dans la section Scripts de l'Ă©diteur de proxy d'API dans l'interface utilisateur d'Apigee.

Pour connaßtre les types de ressources compatibles, consultez la section Gérer les ressources.

Les ressources peuvent ĂȘtre stockĂ©es dans un proxy d'API, un environnement ou une organisation. Dans chaque cas, une ressource est rĂ©fĂ©rencĂ©e par son nom dans une stratĂ©gie. Apigee rĂ©sout le nom en passant du proxy d'API Ă  l'environnement, au niveau de l'organisation.

Une ressource stockĂ©e au niveau de l'organisation peut ĂȘtre rĂ©fĂ©rencĂ©e par des stratĂ©gies dans n'importe quel environnement. Une ressource stockĂ©e au niveau de l'environnement peut ĂȘtre rĂ©fĂ©rencĂ©e par des stratĂ©gies dans cet environnement. Une ressource stockĂ©e au niveau du proxy d'API ne peut ĂȘtre rĂ©fĂ©rencĂ©e que par des rĂšgles dans ce proxy d'API.