Sélection dynamique des éléments dorsaux de la passerelle d'API en fonction des éléments de demande
Découvrez comment acheminer les demandes envoyées à la même passerelle d'API vers différents éléments dorsaux en fonction des éléments de la demande avec la passerelle d'API.
Une exigence commune consiste à acheminer les demandes envoyées à la même passerelle d'API vers différents éléments dorsaux en fonction des éléments de la demande. Par exemple, pour acheminer des demandes vers différents éléments dorsaux en fonction de :
- Hôte et/ou domaine et/ou sous-domaine auquel une demande a été envoyée. Par exemple, pour acheminer les demandes entrantes de cars.example.com et de trucks.example.com qui ont été envoyées à la même passerelle d'API vers deux serveurs dorsaux complètement différents.
- Plan d'utilisation auquel le client d'API envoyant une demande est abonné. Par exemple, pour acheminer les demandes entrantes vers un hôte standard pour les clients d'API abonnés à un plan d'utilisation
Free Tier
ou vers un hôte haute performance pour les clients d'API abonnés au plan d'utilisationPremium Tier
. - En-têtes et valeurs d'en-tête dans une demande. Par exemple, pour acheminer une demande qui inclut un en-tête
Accept
avec la valeurapplication/xml
vers un élément dorsal approprié qui retourne une réponse de ce type de contenu.
La sélection dynamique d'un élément dorsal vous permet de présenter une seule façade aux consommateurs d'API et de les protéger de la complexité de plusieurs systèmes dorsaux.
Vous pouvez acheminer dynamiquement les demandes vers :
- Éléments dorsaux HTTP
- extrémités dorsales de fonction sans serveur
- éléments dorsaux de réponse de stock
Lorsque vous définissez plusieurs éléments dorsaux pour le même déploiement d'API, vous créez des règles pour permettre à la passerelle d'API de sélectionner dynamiquement l'élément dorsal vers lequel acheminer une demande, en fonction d'un élément de la demande initiale.
Pour permettre à la passerelle d'API de sélectionner de manière dynamique l'élément dorsal approprié, vous utilisez les variables de contexte suivantes pour saisir les éléments de la demande :
request.auth[<key>]
où<key>
est le nom d'une revendication retournée par une fonction d'autorisation ou contenue dans un jeton JWT.request.headers[<key>]
où<key>
est le nom d'un en-tête inclus dans la demande à l'API.request.host
est le nom de l'hôte auquel la demande initiale a été envoyée.request.path[<key>]
où<key>
est le nom d'un paramètre de chemin défini dans la spécification de déploiement d'API.request.query[<key>]
où<key>
est le nom d'un paramètre d'interrogation inclus dans la demande à l'API.request.subdomain[<key>]
où<key>
est la partie de fin du nom d'hôte à ignorer lors de la saisie de la partie principale du nom d'hôte à laquelle la demande initiale a été envoyée.request.usage_plan[id]
oùid
est l'OCID d'un plan d'utilisation auquel le client d'API est abonné.
Notez que si une variable de contexte comporte plusieurs valeurs, seule la première valeur est utilisée lors de la sélection de l'élément dorsal. Pour plus d'informations sur les variables de contexte, voir Ajout de variables de contexte aux politiques et aux définitions d'élément dorsal HTTP.
Vous définissez les critères pour sélectionner dynamiquement les éléments dorsaux dans une spécification de déploiement d'API en procédant comme suit :
- En utilisant la console.
- En modifiant un fichier JSON.
Notes sur la mise en correspondance de règle dorsale
Lors de la création des règles pour déterminer quel élément dorsal utiliser, vous pouvez spécifier dans quelle mesure la valeur de la variable de contexte doit correspondre à une valeur donnée pour que la demande soit acheminée vers un élément dorsal particulier. Vous pouvez exiger une correspondance exacte, ou vous pouvez spécifier une valeur commençant par un caractère générique ou se terminant par. La passerelle d'API évalue les règles dans l'ordre que vous spécifiez (règles de correspondance exactes en premier, suivies de règles génériques) et utilise la première règle de correspondance. Vous pouvez également spécifier une règle par défaut à utiliser si la valeur de la variable de contexte ne correspond à aucune règle dorsale. Si aucune règle n'est spécifiée comme valeur par défaut et que la valeur de la variable de contexte dans une demande entrante ne correspond à aucune règle dorsale, la demande retourne une erreur. L'ordre de priorité pour déterminer la règle dorsale (et donc l'élément dorsal) à utiliser peut être résumé comme suit :
- Si la valeur de la variable de contexte correspond exactement à la valeur d'une règle, utilisez cette règle.
- Sinon, si la valeur de la variable de contexte correspond à la valeur d'une règle qui commence ou se termine par un caractère générique, utilisez la première règle contenant un caractère générique qui correspond.
- Sinon, si une règle est spécifiée comme règle par défaut, utilisez cette règle.
- Sinon, renvoyez une erreur.
Utilisation de la console pour ajouter une sélection dorsale dynamique à une spécification de déploiement d'API
Pour ajouter une sélection d'élément dorsal dynamique à une spécification de déploiement d'API à l'aide de la console :
-
Créez ou mettez à jour un déploiement d'API à l'aide de la console, sélectionnez l'option À partir de zéro et entrez les détails dans la page Informations de base.
Pour plus d'informations, voir Déploiement d'une API sur une passerelle d'API en créant un déploiement d'API et Mise à jour d'une passerelle d'API.
- Dans la page Authentification, spécifiez comment authentifier les demandes effectuées sur les routes du déploiement d'API.
Pour plus d'informations, voir Ajout de l'authentification et de l'autorisation aux déploiements d'API.
-
Dans la page Routes, créez une route et spécifiez les données suivantes :
-
Chemin : Chemin des appels d'API utilisant les méthodes indiquées au service dorsal. Notez que le chemin de routage que vous spécifiez :
- Est relatif au préfixe du chemin du déploiement (voir Déploiement d'une API sur une passerelle d'API en créant un déploiement d'API).
- Doit être précédé d'une barre oblique (/) et peut être simplement cette seule barre oblique.
- Peut contenir plusieurs barres obliques (à condition qu'elles ne soient pas adjacentes) et peut se terminer par une barre oblique.
- Peut inclure des caractères alphanumériques en majuscules et en minuscules.
- peut inclure les caractères spéciaux
$ - _ . + ! * ' ( ) , % ; : @ & =
- Peut inclure des paramètres et des caractères génériques (voir Ajout de paramètres de chemin et de caractères génériques aux chemins de routage).
- Méthodes : Une ou plusieurs méthodes acceptées par le service dorsal. Par exemple,
GET, PUT
.
-
- Sélectionnez Ajouter plusieurs serveurs dorsaux pour spécifier que vous voulez que les demandes soient acheminées vers différents serveurs dorsaux, en fonction de la variable de contexte et des règles que vous entrez.
- Dans la liste Sélecteur, sélectionnez la table de contexte (contenant la variable de contexte) à utiliser pour déterminer l'élément dorsal auquel envoyer la demande, comme suit :
- Authentification : Utilisez la valeur d'une réclamation retournée par une fonction d'autorisation ou contenue dans un JWT (et enregistrée dans la table de contexte
request.auth
) pour déterminer l'élément dorsal. - En-têtes : Utilisez la valeur d'un en-tête de la demande initiale (et enregistrée dans la table de contexte
request.headers
) pour déterminer l'élément dorsal. - Hôte : Utilisez le nom de l'hôte auquel la demande initiale a été envoyée (extrait du champ hôte de l'en-tête d'hôte dans la demande et enregistré dans la table de contexte
request.host
) pour déterminer l'élément dorsal. - Chemin : Utilisez un paramètre de chemin de la demande initiale (et enregistré dans la table de contexte
request.path
) pour déterminer l'élément dorsal. - Paramètres d'interrogation : Utilisez la valeur d'un paramètre d'interrogation de la demande initiale (et enregistrée dans la table de contexte
request.query
) pour déterminer l'élément dorsal. - Sous-domaine : Utilisez la partie principale du nom d'hôte auquel la demande initiale a été envoyée (juste la partie du nom d'hôte non spécifiée en tant que clé, et enregistrée dans la table de contexte
request.subdomain
) pour déterminer l'élément dorsal. Notez que la clé est la partie de fin du nom d'hôte à ne pas utiliser. - OCID du plan d'utilisation : Utilisez l'OCID d'un plan d'utilisation auquel le client d'API est abonné (identifié à partir d'un jeton client dans la demande initiale et enregistré dans la table de contexte
request.usage_plan
) pour déterminer l'élément dorsal.
- Authentification : Utilisez la valeur d'une réclamation retournée par une fonction d'autorisation ou contenue dans un JWT (et enregistrée dans la table de contexte
- Selon la table de contexte que vous sélectionnez, entrez le nom de la clé à utiliser pour déterminer l'élément dorsal auquel envoyer la demande.
- Dans la liste Sélecteur, sélectionnez la table de contexte (contenant la variable de contexte) à utiliser pour déterminer l'élément dorsal auquel envoyer la demande, comme suit :
- Sélectionnez Définir un serveur dorsal pour entrer une règle pour la variable de contexte qui, si elle est satisfaite, achemine la demande vers le serveur dorsal que vous définissez.
- Entrez les détails de la règle comme suit :
- Nom : Entrez un nom pour la règle. Utilisez le nom que vous entrez pour identifier l'élément dorsal lors de la référence aux journaux et aux mesures.
- Type de correspondance : Spécifiez à quel point la valeur de la variable de contexte doit correspondre à une valeur que vous entrez pour que la demande soit acheminée vers ce serveur dorsal. Sélectionnez Au choix si vous voulez que la variable de contexte corresponde exactement à la valeur du champ Valeurs. Sélectionnez Caractère générique si la variable de contexte doit correspondre à une valeur du champ Expression qui contient des caractères génériques. La correspondance de valeurs n'est pas sensible à la casse si vous sélectionnez Au choix et sensible à la casse si vous sélectionnez Caractère générique.
- Valeurs : (Affiché si vous avez sélectionné N'importe lequel dans le champ Type de correspondance.) Spécifiez une valeur (ou plusieurs valeurs dans une liste séparée par des virgules) que la variable de contexte doit correspondre exactement. Notez que la correspondance n'est pas sensible à la casse si vous avez sélectionné Au choix. Notez également que les valeurs doivent être uniques au sein d'une seule règle dorsale et dans toutes les règles dorsales définies pour le déploiement d'API.
- Expression : (Affichée si vous avez sélectionné Caractère générique dans le champ Type de correspondance) Spécifiez une valeur commençant par, ou se terminant par, un caractère générique que la variable de contexte doit correspondre. Utilisez le caractère générique
*
(astérisque) pour indiquer zéro caractère ou plus, et/ou le caractère générique+
(signe plus) pour indiquer un ou plusieurs caractères. Notez que la correspondance est sensible à la casse si vous avez sélectionné Caractère générique. Notez que vous ne pouvez pas inclure plus d'un caractère générique dans une valeur et que vous ne pouvez pas inclure un caractère générique au milieu d'une valeur. Notez également que la configuration incorrecte de caractères génériques peut entraîner l'acheminement des demandes vers des éléments dorsaux non voulus. - Définir la valeur par défaut : Spécifiez si vous devez utiliser l'élément dorsal défini pour cette règle si aucune règle dorsale ne correspond.
- Entrez les détails de l'élément dorsal comme suit :
- Dans le champ Type dorsal, sélectionnez HTTP/HTTPS, Oracle Functions, Réponse de stock ou Déconnexion comme élément dorsal vers lequel acheminer la demande si la règle que vous avez entrée est respectée.
- Entrez les détails de l'élément dorsal sélectionné. Les détails à entrer dépendent du type d'élément dorsal que vous avez sélectionné et sont décrits en détail dans :
- Utilisation de la console pour ajouter des éléments dorsaux HTTP ou HTTPS à une spécification de déploiement d'API
- Utilisation de la console pour ajouter des éléments dorsaux de fonction sans serveur à une spécification de déploiement d'API
- Utilisation de la console pour ajouter des réponses standard à une spécification de déploiement d'API
- Sélectionnez Définir pour créer l'élément dorsal et la règle associée.
- (Facultatif) Sélectionnez à nouveau Définir un serveur dorsal pour définir des serveurs dorsaux supplémentaires et les règles associées.
- (Facultatif) Sélectionnez Autre route pour entrer les détails des routes supplémentaires.
- Sélectionnez Suivant pour vérifier les détails que vous avez entrés pour le déploiement d'API.
- Sélectionnez Créer ou enregistrer les modifications pour créer ou mettre à jour le déploiement d'API.
- (Facultatif) Vérifiez que l'API a été déployée avec succès en l'appelant (voir Appel d'une API déployée sur une passerelle d'API).
Modification d'un fichier JSON pour ajouter une sélection dorsale dynamique à une spécification de déploiement d'API
Pour ajouter une sélection dorsale dynamique à une spécification de déploiement d'API dans un fichier JSON :
-
Dans votre éditeur JSON préféré, créez une spécification de déploiement d'API (voir Création d'une spécification de déploiement d'API) au format suivant :
{ "requestPolicies": {}, "routes": [ { "path": "<api-route-path>", "methods": ["<method-list>"], "backend": { "type": "DYNAMIC_ROUTING_BACKEND", "selectionSource": { "type": "SINGLE", "selector": "<context-table-key>" }, "routingBackends": [ { "key": { "type": "<ANY_OF|WILDCARD>", "values": [ "<context-variable-value>" ], "isDefault": "<true|false>", "name": "<rule-name>" }, "backend": { "type": "<backend-type>", "<backend-target>": "<identifier>" } } ] } } ] }
où :
"requestPolicies"
spécifie des politiques facultatives pour contrôler le comportement d'un déploiement d'API. Si vous voulez appliquer des politiques à toutes les routes d'une spécification de déploiement d'API, placez les politiques en dehors de la sectionroutes
. Si vous voulez appliquer les politiques uniquement à une route particulière, placez les politiques dans la sectionroutes
. Voir Ajout de politiques de demande et de réponse aux spécifications de déploiement d'API.-
<api-route-path>
spécifie un chemin pour les appels d'API utilisant les méthodes indiquées au service dorsal. Notez que le chemin de routage que vous spécifiez :- Est relatif au préfixe du chemin du déploiement (voir Déploiement d'une API sur une passerelle d'API en créant un déploiement d'API).
- Doit être précédé d'une barre oblique (/) et peut être simplement cette seule barre oblique.
- Peut contenir plusieurs barres obliques (à condition qu'elles ne soient pas adjacentes) et peut se terminer par une barre oblique.
- Peut inclure des caractères alphanumériques en majuscules et en minuscules.
- peut inclure les caractères spéciaux
$ - _ . + ! * ' ( ) , % ; : @ & =
- Peut inclure des paramètres et des caractères génériques (voir Ajout de paramètres de chemin et de caractères génériques aux chemins de routage).
<method-list>
spécifie une ou plusieurs méthodes acceptées par le service dorsal, séparées par des virgules. Par exemple,"GET, PUT"
."type": "DYNAMIC_ROUTING_BACKEND"
indique que vous voulez sélectionner l'élément dorsal de manière dynamique en fonction des éléments de la demande."type": "SINGLE"
indique que vous voulez utiliser une seule variable de contexte pour sélectionner dynamiquement l'élément dorsal."selector": "<context-table-key>"
spécifie la table de contexte (et la clé, le cas échéant) à partir de laquelle obtenir la valeur de variable de contexte qui détermine l'élément dorsal vers lequel envoyer la demande, comme suit :request.auth[<key>]
Utilisez la valeur d'une revendication retournée par une fonction d'autorisation ou contenue dans un jeton Web JSON (JWT) pour déterminer l'élément dorsal.<key>
est le nom de la revendication. Par exemple,request.auth[tenant]
request.headers[<key>]
Utilisez la valeur d'un en-tête de la demande initiale pour déterminer l'élément dorsal.<key>
est le nom de l'en-tête. Par exemple,request.headers[Accept]
request.host
Utilisez le nom de l'hôte auquel la demande initiale a été envoyée (extrait du champ hôte de l'en-tête d'hôte dans la demande) pour déterminer l'élément dorsal.request.path[<key>]
Utilisez un paramètre de chemin de la demande initiale pour déterminer l'élément dorsal.<key>
est le nom du paramètre de chemin. Par exemple,request.path[region]
request.query[<key>]
Utilisez la valeur d'un paramètre d'interrogation de la demande initiale pour déterminer l'élément dorsal.<key>
est le nom du paramètre d'interrogation. Par exemple,request.query[state]
request.subdomain[<key>]
Utilisez la partie principale du nom d'hôte à laquelle la demande initiale a été envoyée (juste la partie du nom d'hôte non spécifiée en tant que clé) pour déterminer l'élément dorsal. Notez que<key>
est la partie de fin du nom d'hôte à ne pas utiliser. Par exemple,request.subdomain[example.com]
request.usage_plan[id]
Utilisez l'OCID d'un plan d'utilisation auquel le client d'API est abonné (identifié à partir d'un jeton de client dans la demande initiale) pour déterminer l'élément dorsal.
"key": {...}
spécifie la règle à respecter pour envoyer une demande au serveur dorsal spécifié par"backend": {…}
."type": "<ANY_OF|WILDCARD>"
indique à quel point la valeur de la variable de contexte identifiée par<context-table-key>
doit correspondre à la valeur entrée pour<context-variable-value>
pour que la demande soit envoyée au serveur dorsal spécifié par"backend": {…}
. SpécifiezANY_OF
si la valeur de la variable de contexte identifiée par<context-table-key>
doit correspondre exactement à la valeur que vous spécifiez pour<context-variable-value>
. SpécifiezWILDCARD
si la valeur de la variable de contexte identifiée par<context-table-key>
doit correspondre à une valeur contenant des caractères génériques que vous spécifiez pour<context-variable-value>
. La correspondance de valeurs n'est pas sensible à la casse si vous spécifiezANY_OF
et la casse si vous spécifiezWILDCARD
.<context-variable-value>
est une valeur qui correspond éventuellement à la valeur de la variable de contexte identifiée par<context-table-key>
. Vous pouvez inclure plusieurs entrées"<context-variable-value>"
dans le tableauvalues:[...]
, séparées par des virgules. La demande est envoyée au serveur dorsal spécifié par"backend": {…}
si les valeurs correspondent, comme suit :- Si vous avez spécifié
"type": "ANY_OF"
, les valeurs doivent correspondre exactement. Notez que les valeurs doivent être uniques dans une seule règle dorsale et dans toutes les règles dorsales définies pour un déploiement d'API. La correspondance de valeurs n'est pas sensible à la casse si vous avez spécifiéANY_OF
. - Si vous avez spécifié
"type": "WILDCARD"
, vous pouvez spécifier une valeur pour<context-variable-value>
qui commence par un caractère générique ou qui se termine par. Utilisez le caractère générique*
(astérisque) pour indiquer zéro caractère ou plus, et/ou le caractère générique+
(signe plus) pour indiquer un ou plusieurs caractères. Notez que vous ne pouvez pas inclure plus d'un caractère générique dans une valeur et que vous ne pouvez pas inclure un caractère générique au milieu d'une valeur. La correspondance de valeurs est sensible à la casse si vous avez spécifiéWILDCARD
. Notez également que la configuration incorrecte de caractères génériques peut entraîner l'acheminement des demandes vers des éléments dorsaux non voulus.
"selector": "request.headers[Accept]"
"type": "ANY_OF"
"values": ["application/xml"]
- Si vous avez spécifié
"isDefault": "<true|false>"
est une valeur booléenne facultative (true
oufalse
) indiquant si l'élément dorsal doit être utilisé pour cette règle si aucune règle dorsale ne correspond. Si la valeur n'est pas indiquée, la valeur par défaut estfalse
."name": "<rule-name>"
indique un nom pour la règle. Utilisez ce nom pour identifier l'élément dorsal lors de la référence aux journaux et aux mesures.<backend-type>
spécifie le type du service dorsal. Les valeurs valides sontORACLE_FUNCTIONS_BACKEND
,HTTP_BACKEND
etSTOCK_RESPONSE_BACKEND
.<backend-target>
et<identifier>
spécifient le service dorsal. Les valeurs valides pour<backend-target>
et<identifier>
dépendent de la valeur de<backend-type>
, comme suit :- Si vous réglez la valeur
<backend type>
àORACLE_FUNCTIONS_BACKEND
, remplacez<backend target>
parfunctionId
et remplacez<identifier>
par l'OCID de la fonction. Par exemple,"functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab5b..."
. Voir Ajout d'une fonction du service des fonctions pour OCI en tant qu'élément dorsal du service de passerelle d'API. - Si vous réglez la valeur
<backend type>
àHTTP_BACKEND
, remplacez<backend target>
parurl
et<identifier>
par l'URL du service dorsal. Par exemple,"url": "https://api.weather.gov"
. Voir Ajout d'une URL HTTP ou HTTPS comme élément dorsal du service de passerelle d'API. - Si vous réglez la valeur
<backend-type>
àSTOCK_RESPONSE_BACKEND
, remplacez<backend-target>
et<identifier>
par des paires clé-valeur appropriées. Voir Ajout de réponses standard comme élément dorsal du service de passerelle d'API.
- Si vous réglez la valeur
Par exemple, la spécification de déploiement d'API de base suivante inclut une sélection dorsale dynamique qui achemine les demandes en fonction de la valeur du paramètre d'interrogation
vehicle-type
transmis dans la demande. Si le paramètre d'interrogationvehicle-type
a la valeurcar
, la demande est acheminée verscars-api.example.com
. Si le paramètre d'interrogationvehicle-type
a la valeurtruck
ouminivan
, la demande est acheminée vers une fonction sans serveur dans le service des fonctions pour OCI pour traitement. Si la valeur du paramètre d'interrogationvehicle-type
n'est nicar
, nitruck
, niminivan
, la demande est acheminée verscars-api.example.com
par défaut :{ "routes": [ { "path": "/users/{path1*}", "methods": [ "GET", "POST", "PUT", "DELETE" ], "backend": { "type": "DYNAMIC_ROUTING_BACKEND", "selectionSource": { "type": "SINGLE", "selector": "request.query[vehicle-type]" }, "routingBackends": [ { "key": { "type": "ANY_OF", "values": [ "cars" ], "isDefault": "true", "name": "car-rule" }, "backend": { "type": "HTTP_BACKEND", "url": "https://cars-api.example.com" } }, { "key": { "type": "ANY_OF", "values": [ "minivan", "truck" ], "name": "truck-minivan-rule" }, "backend": { "type": "ORACLE_FUNCTIONS_BACKEND", "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq" } } ] } } ] }
- Enregistrez le fichier JSON contenant la spécification de déploiement d'API.
-
Utilisez comme suit la spécification de déploiement d'API lorsque vous créez ou mettez à jour un déploiement d'API :
- En spécifiant le fichier JSON dans la console lorsque vous sélectionnez l'option Charger une API existante.
- En spécifiant le fichier JSON dans une demande à l'API REST du service Passerelle d'API.
Pour plus d'informations,voir Déploiement d'une API sur une passerelle d'API en créant un déploiement d'API.
-
(Facultatif) Vérifiez que l'API a été déployée en l'appelant (voir Appel d'une API déployée sur une passerelle d'API).
Exemples de sélection dynamique des éléments dorsaux du service de passerelle d'API
Les exemples de cette section supposent la définition de déploiement d'API suivante et une spécification de déploiement d'API incomplète dans un fichier JSON :
{
"displayName": "Marketing Deployment",
"gatewayId": "ocid1.apigateway.oc1..aaaaaaaab______hga",
"compartmentId": "ocid1.compartment.oc1..aaaaaaaa7______ysq",
"pathPrefix": "/marketing",
"specification": {
"routes": [
{
"path": "/sales",
"methods": [
"GET",
"POST",
"PUT",
"DELETE"
],
"backend": {
"type": "DYNAMIC_ROUTING_BACKEND",
.
.
.
}
}
]
},
"freeformTags": {},
"definedTags": {}
}
Notez que ces exemples s'appliquent également lorsque vous définissez une spécification de déploiement d'API à l'aide des boîtes de dialogue de la console.
Exemple 1 : Sélectionner un élément dorsal par hôte
Vous pouvez configurer un déploiement d'API pour sélectionner dynamiquement un élément dorsal en fonction de l'hôte auquel la demande initiale a été envoyée (extrait du champ hôte de l'en-tête d'hôte dans la demande). Cette conception vous permet de définir une passerelle d'API qui prend en charge différents locataires.
{
"routes": [
{
"path": "/sales",
"methods": [
"GET",
"POST",
"PUT",
"DELETE"
],
"backend": {
"type": "DYNAMIC_ROUTING_BACKEND",
"selectionSource": {
"type": "SINGLE",
"selector": "request.host"
},
"routingBackends": [
{
"key": {
"type": "ANY_OF",
"values": [
"cars.example.com"
],
"isDefault": "true",
"name": "car-rule"
},
"backend": {
"type": "HTTP_BACKEND",
"url": "http://cars-api.example.com"
}
},
{
"key": {
"type": "ANY_OF",
"values": [
"minivans.examplecloud.com",
"trucks.example.com"
],
"name": "truck-minivan-rule"
},
"backend": {
"type": "ORACLE_FUNCTIONS_BACKEND",
"functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
}
}
]
}
}
]
}
Dans cet exemple, la façon dont la passerelle d'API résout une demande à https://<gateway-hostname>/marketing/sales
dépend de l'hôte auquel la demande initiale a été envoyée (extrait du champ hôte de l'en-tête d'hôte dans la demande), comme suit :
- Si la demande a été envoyée à
cars.example.com
, elle est acheminée vershttp://cars-api.example.com
. - Si la demande a été envoyée à
minivans.examplecloud.com
ou àtrucks.example.com
, elle est acheminée vers un élément dorsal de fonction sans serveur dans le service des fonctions pour OCI. - Si la demande a été envoyée à un autre hôte, elle est acheminée vers
http://cars-api.example.com
par défaut.
Exemple 2 : Sélectionner un élément dorsal par sous-domaine d'hôte
Vous pouvez configurer un déploiement d'API pour sélectionner dynamiquement un élément dorsal en fonction d'un sous-domaine dans la chaîne d'hôte à laquelle la demande initiale a été envoyée. La chaîne hôte est extraite de l'en-tête Host de la demande et masquée par une chaîne que vous spécifiez, laissant le sous-domaine utilisé pour acheminer la demande. Cette conception vous permet de définir une passerelle d'API qui prend en charge différents locataires.
{
"routes": [
{
"path": "/sales",
"methods": [
"GET",
"POST",
"PUT",
"DELETE"
],
"backend": {
"type": "DYNAMIC_ROUTING_BACKEND",
"selectionSource": {
"type": "SINGLE",
"selector": "request.subdomain[example.com]"
},
"routingBackends": [
{
"key": {
"type": "ANY_OF",
"values": [
"cars"
],
"isDefault": "true",
"name": "car-rule"
},
"backend": {
"type": "HTTP_BACKEND",
"url": "https://cars-api.example.com"
}
},
{
"key": {
"type": "ANY_OF",
"values": [
"minivans",
"trucks"
],
"name": "truck-minivan-rule"
},
"backend": {
"type": "ORACLE_FUNCTIONS_BACKEND",
"functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
}
}
]
}
}
]
}
Dans cet exemple, la façon dont la passerelle d'API résout une demande à https://<gateway-hostname>/marketing/sales
dépend du sous-domaine d'hôte auquel la demande initiale a été envoyée, comme suit :
- si la demande a été envoyée à
cars.example.com
, la demande est acheminée vershttp://cars-api.example.com
- si la demande a été envoyée à
minivans.example.com
ou àtrucks.example.com
, elle est acheminée vers un élément dorsal de fonction sans serveur dans le service des fonctions pour OCI - si la demande a été envoyée à un autre sous-domaine de
example.com
(par exemple,car.example.com
ousedan.example.com
), la demande est acheminée vershttp://cars-api.example.com
par défaut
Exemple 3a : Sélectionner un élément dorsal par sous-domaine d'hôte (modification du nom d'hôte dans l'URL dorsale et utilisation du type de correspondance ANY_OF)
Vous pouvez configurer un déploiement d'API pour sélectionner dynamiquement un élément dorsal en fonction d'un sous-domaine dans la chaîne d'hôte à laquelle la demande initiale a été envoyée. La chaîne hôte est extraite de l'en-tête Host de la demande et masquée par une chaîne que vous spécifiez, laissant le sous-domaine utilisé pour acheminer la demande. Pour une validation supplémentaire, vous pouvez inclure le masque de sous-domaine en tant que variable de contexte dans l'URL dorsale afin de vous assurer que les demandes ne sont acheminées qu'aux éléments dorsaux que vous souhaitez exposer. Si vous spécifiez ANY_OF
comme type de correspondance, la valeur de la variable de contexte ne peut pas inclure de caractères génériques et doit correspondre exactement à l'une des valeurs routes.routingBackends.key
pour que la demande soit envoyée au serveur dorsal.
{
"routes": [
{
"path": "/sales",
"methods": [
"GET",
"POST",
"PUT",
"DELETE"
],
"backend": {
"type": "DYNAMIC_ROUTING_BACKEND",
"selectionSource": {
"type": "SINGLE",
"selector": "request.subdomain[example.com]"
},
"routingBackends": [
{
"key": {
"type": "ANY_OF",
"values": [
"cars",
"hatchbacks"
],
"name": "car-hatchback-rule"
},
"backend": {
"type": "HTTP_BACKEND",
"url": "https://${request.subdomain[example.com]}-api.example.com"
}
}
]
}
}
]
}
Dans cet exemple, la façon dont la passerelle d'API résout une demande à https://<gateway-hostname>/marketing/sales
dépend du sous-domaine d'hôte auquel la demande initiale a été envoyée, comme suit :
- si la demande a été envoyée à
cars.example.com
ou àhatchbacks.example.com
, la demande est acheminée vershttp://cars-api.example.com
ouhttp://hatchbacks-api.example.com
- si la demande a été envoyée à un autre sous-domaine de
example.com
(par exemple,suvs.example.com
ousedans.example.com
), la demande échoue.
Si vous envisagez de modifier le nom d'hôte dans l'URL dorsale en incluant une variable de contexte comme illustré dans cet exemple, notez les points suivants :
- Vous pouvez uniquement modifier l'URL dorsale à l'aide de la variable de contexte spécifiée pour
selector
. - Pour appliquer la liste des éléments dorsaux autorisés, ne définissez
"isDefault: "true"
pour aucune règle.
Exemple 3b : Sélectionner un élément dorsal par sous-domaine d'hôte (modification du nom d'hôte dans l'URL d'élément dorsal et utilisation d'un type de correspondance WILDCARD)
Vous pouvez configurer un déploiement d'API pour sélectionner dynamiquement un élément dorsal en fonction d'un sous-domaine dans la chaîne d'hôte à laquelle la demande initiale a été envoyée. La chaîne hôte est extraite de l'en-tête Host de la demande et masquée par une chaîne que vous spécifiez, laissant le sous-domaine utilisé pour acheminer la demande. Pour une validation supplémentaire, vous pouvez inclure le masque de sous-domaine en tant que variable de contexte dans l'URL dorsale afin de vous assurer que les demandes ne sont acheminées qu'aux éléments dorsaux que vous souhaitez exposer. Si vous spécifiez WILDCARD
comme type de correspondance, la valeur de la variable de contexte peut inclure des caractères génériques et doit correspondre à l'une des valeurs routes.routingBackends.key
pour que la demande soit envoyée au serveur dorsal.
{
"routes": [
{
"path": "/sales",
"methods": [
"GET",
"POST",
"PUT",
"DELETE"
],
"backend": {
"type": "DYNAMIC_ROUTING_BACKEND",
"selectionSource": {
"type": "SINGLE",
"selector": "request.subdomain[example.com]"
},
"routingBackends": [
{
"key": {
"type": "WILDCARD",
"values": [
"*s"
],
"name": "domestic-rule"
},
"backend": {
"type": "HTTP_BACKEND",
"url": "https://${request.subdomain[example.com]}-api.example.com"
}
}
]
}
}
]
}
Dans cet exemple, la façon dont la passerelle d'API résout une demande à https://<gateway-hostname>/marketing/sales
dépend du fait que le sous-domaine d'hôte auquel la demande initiale a été envoyée correspond à la valeur routes.routingBackends.key
, y compris le caractère générique. Dans ce cas, si la demande initiale a été envoyée à un sous-domaine hôte qui se termine par la lettre 's', comme suit :
- Si la demande a été envoyée à un sous-domaine qui se termine par la lettre 's', la demande est acheminée de manière appropriée. Par exemple, les demandes envoyées à
cars.example.com
,hatchbacks.example.com
,suvs.example.com
ousedans.example.com
sont acheminées vershttp://cars-api.example.com
,http://hatchbacks-api.example.com
,http://suvs-api.example.com
ouhttp://sedans-api.example.com
, respectivement. - Si la demande a été envoyée à un sous-domaine qui ne se termine pas par la lettre 's', la demande échoue. Par exemple, les demandes envoyées à
truck.example.com
outractor.example.com
échouent.
Si vous envisagez de modifier le nom d'hôte dans l'URL dorsale en incluant une variable de contexte comme illustré dans cet exemple, notez les points suivants :
- Vous pouvez uniquement modifier l'URL dorsale à l'aide de la variable de contexte spécifiée pour
selector
. - Lors de l'utilisation de caractères génériques, configurez le caractère générique avec soin. Une configuration de caractère générique incorrecte peut entraîner l'acheminement des demandes vers des éléments dorsaux non voulus. Par exemple, dans l'exemple, les demandes envoyées à
buses.example.com
sont correctement acheminées vershttp://buses-api.example.com
, comme prévu. Toutefois, cette configuration achemine également les demandes initialement envoyées àbus.example.com
ets.example.com
àhttp://bus-api.example.com
ethttp://s-api.example.com
respectivement, dont aucune n'était prévue.
Exemple 4 : Sélectionner un élément dorsal par plan d'utilisation
Vous pouvez configurer un déploiement d'API pour sélectionner de manière dynamique un élément dorsal en fonction de l'OCID d'un plan d'utilisation auquel le client d'API est abonné (identifié à partir d'un jeton de client dans la demande initiale). L'OCID du plan d'utilisation est stocké dans la variable de contexte request.usage_plan[id]
.
{
"routes": [
{
"path": "/sales",
"methods": [
"GET",
"POST",
"PUT",
"DELETE"
],
"backend": {
"type": "DYNAMIC_ROUTING_BACKEND",
"selectionSource": {
"type": "SINGLE",
"selector": "request.usage_plan[id]"
},
"routingBackends": [
{
"key": {
"type": "ANY_OF",
"values": [
"ocid1.usageplan.oc1..aaaaaaaaab______gap"
],
"name": "free-rule",
"isDefault": true
},
"backend": {
"type": "HTTP_BACKEND",
"url": "http://dev.example.com/"
}
},
{
"key": {
"type": "ANY_OF",
"values": [
"ocid1.usageplan.oc1..aaaaaaaaay______lcf"
],
"name": "premium-rule"
},
"backend": {
"type": "HTTP_BACKEND",
"url": "http://api.example.com"
}
}
]
}
}
]
}
Dans cet exemple, la façon dont la passerelle d'API résout une demande à https://<gateway-hostname>/marketing/sales
dépend du plan d'utilisation auquel le client d'API est abonné. Deux plans d'utilisation ont été définis comme suit :
Free Tier
, qui a l'OCIDocid1.usageplan.oc1..aaaaaaaaab______gap
. Lorsque cet OCID est la valeur de la variable de contexterequest.usage_plan[id]
, la demande est acheminée vershttp://dev.example.com/
. Le plan d'utilisationFree Tier
est également utilisé par défaut si la demande n'incluait pas de jeton client.Premium Tier
, qui a l'OCIDocid1.usageplan.oc1..aaaaaaaaay______lcf
. Lorsque cet OCID est la valeur de la variable de contexterequest.usage_plan[id]
, la demande est acheminée vershttp://api.example.com
Exemple 5 : Sélectionner un élément dorsal par paramètre d'en-tête
Vous pouvez configurer un déploiement d'API pour sélectionner dynamiquement un élément dorsal en fonction d'un paramètre transmis dans l'en-tête de la demande initiale.
{
"routes": [
{
"path": "/sales",
"methods": [
"GET",
"POST",
"PUT",
"DELETE"
],
"backend": {
"type": "DYNAMIC_ROUTING_BACKEND",
"selectionSource": {
"type": "SINGLE",
"selector": "request.headers[Accept]"
},
"routingBackends": [
{
"key": {
"type": "ANY_OF",
"values": [
"application/json"
],
"name": "json-rule",
"isDefault": true
},
"backend": {
"type": "HTTP_BACKEND",
"url": "http://api.example.com"
}
},
{
"key": {
"type": "ANY_OF",
"values": [
"application/xml"
],
"name": "xml-rule"
},
"backend": {
"type": "HTTP_BACKEND",
"url": "http://xml.example.com"
}
}
]
}
}
]
}
Dans cet exemple, la façon dont la passerelle d'API résout une demande à https://<gateway-hostname>/marketing/sales
dépend de la valeur de l'en-tête Accept
dans la demande initiale, comme suit :
- si l'en-tête
Accept
demande une réponse au formatapplication/json
, la demande est acheminée vershttp://api.example.com
- si l'en-tête
Accept
demande une réponse au formatapplication/xml
, la demande est acheminée vershttp://xml.example.com
Exemple 6 : Sélectionner un élément dorsal par paramètre d'authentification
Vous pouvez configurer un déploiement d'API pour sélectionner dynamiquement un élément dorsal en fonction d'un paramètre d'authentification (également appelé 'claim') retourné par une fonction d'autorisation ou contenu dans un jeton Web JSON (JWT).
{
"routes": [
{
"path": "/sales",
"methods": [
"GET",
"POST",
"PUT",
"DELETE"
],
"backend": {
"type": "DYNAMIC_ROUTING_BACKEND",
"selectionSource": {
"type": "SINGLE",
"selector": "request.auth[tenant]"
},
"routingBackends": [
{
"key": {
"type": "ANY_OF",
"values": [
"tenant-cars"
],
"name": "cars-tenant-rule",
"isDefault": true
},
"backend": {
"type": "HTTP_BACKEND",
"url": "http://cars-api.example.com"
}
},
{
"key": {
"type": "ANY_OF",
"values": [
"tenant-trucks"
],
"name": "trucks-tenant-rule"
},
"backend": {
"type": "HTTP_BACKEND",
"url": "http://trucks-api.example.com"
}
}
]
}
}
]
}
Dans cet exemple, la façon dont la passerelle d'API résout une demande à https://<gateway-hostname>/marketing/sales
dépend de la valeur de la revendication tenant
retournée par une fonction d'autorisation, comme suit :
- si la variable de contexte
request.auth[tenant]
est réglée àtenant-cars
, la demande est acheminée vershttp://cars-api.example.com
- si la variable de contexte
request.auth[tenant]
est réglée àtenant-trucks
, la demande est acheminée vershttp://trucks-api.example.com
Exemple 7 : Sélectionner un élément dorsal par paramètre d'interrogation
Vous pouvez configurer un déploiement d'API pour sélectionner dynamiquement un élément dorsal en fonction d'un paramètre d'interrogation transmis par la demande initiale.
{
"routes": [
{
"path": "/sales",
"methods": [
"GET",
"POST",
"PUT",
"DELETE"
],
"backend": {
"type": "DYNAMIC_ROUTING_BACKEND",
"selectionSource": {
"type": "SINGLE",
"selector": "request.query[vehicle-type]"
},
"routingBackends": [
{
"key": {
"type": "ANY_OF",
"values": [
"car"
],
"isDefault": "true",
"name": "car-rule"
},
"backend": {
"type": "HTTP_BACKEND",
"url": "https://cars-api.example.com"
}
},
{
"key": {
"type": "ANY_OF",
"values": [
"minivan",
"truck"
],
"name": "truck-rule"
},
"backend": {
"type": "ORACLE_FUNCTIONS_BACKEND",
"functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
}
}
]
}
}
]
}
Dans cet exemple, la façon dont la passerelle d'API résout une demande à https://<gateway-hostname>/marketing/sales
dépend de la valeur du paramètre d'interrogation vehicle-type
transmis par la demande initiale, comme suit :
- Si le paramètre d'interrogation
vehicle-type
a la valeurcar
, la demande est acheminée verscars-api.example.com
. - Si le paramètre d'interrogation
vehicle-type
a la valeurtruck
ouminivan
, la demande est acheminée vers une fonction sans serveur dans le service des fonctions pour OCI pour traitement. - Si la valeur du paramètre d'interrogation
vehicle-type
n'est nicar
, nitruck
, niminivan
, la demande est acheminée verscars-api.example.com
par défaut :