Esta página se aplica a Apigee y Apigee Hybrid.
Consulta la documentación de Apigee Edge.
Usa la política de FlowCallout
para llamar a un flujo compartido desde un proxy de API o algún otro flujo compartido.
En un flujo compartido, creas una secuencia de pasos que puedes volver a usar en el tiempo de ejecución desde varios lugares. Estos pasos se implementan como políticas, como en un proxy de API. La política FlowCallout
te proporciona una forma de invocar el flujo compartido desde proxies de API y otros flujos compartidos.
Funciona como una llamada a función en un lenguaje de programación tradicional.
- Por ejemplo, imagina que creaste un flujo compartido con funciones de seguridad como verificación de clave de API, validación del token de OAuth y protección de expresiones regulares. Este flujo compartido representa tu convención para verificar una solicitud entrante.
Con las políticas de
FlowCallout
, puedes invocar ese flujo compartido desde varios proxies de API. - Puedes llamar a un flujo compartido desde otro mediante la implementación de una política de
FlowCallout
desde un flujo compartido.
Esta política es una política extensible, y el uso de esta política puede tener implicaciones de costo o uso, según tu licencia de Apigee. Para obtener información sobre los tipos de políticas y sus implicaciones de uso, consulta Tipos de políticas.
Muestras
Verifica la clave de API en el flujo compartido
En este ejemplo, se usa un flujo compartido para realizar tareas comunes relacionadas con la seguridad. Aquí, el flujo compartido valida una clave de API. Los proxies de API y otros flujos compartidos pueden usar la política de FlowCallout
para realizar llamadas en este flujo compartido.
La siguiente definición de flujo compartido incluye una política de Verify-API-Key
que se ejecuta cuando se llama al flujo compartido desde una política de FlowCallout
en un proxy de API.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <SharedFlow name="default"> <Step> <Name>Verify-API-Key</Name> </Step> </SharedFlow>
La política de VerifyAPIKey
dentro del flujo compartido anterior recupera el valor de clave y lo verifica.
<VerifyAPIKey async="false" continueOnError="false" enabled="true" name="Verify-API-Key"> <DisplayName>Verify API Key</DisplayName> <APIKey ref="request.queryparam.apikey"/> </VerifyAPIKey>
La siguiente política de FlowCallout
, que se usa en un proxy de API, llama al flujo compartido anterior para verificar la clave de API. El paquete de flujo compartido verify-apikey-shared
(no se muestra aquí) configura el flujo compartido de la manera en que un paquete APIProxy configura un proxy.
<FlowCallout async="false" continueOnError="false" enabled="true" name="Auth-Flow-Callout"> <DisplayName>Auth Flow Callout</DisplayName> <SharedFlowBundle>verify-apikey-shared</SharedFlowBundle> </FlowCallout>
Cómo pasar parámetros a un flujo compartido
En este ejemplo, se muestra cómo pasar parámetros de una política de FlowCallout
a un flujo compartido. Aquí, una política de FlowCallout
llama a un flujo compartido diseñado para realizar funciones comunes de manejo de strings. El flujo compartido incluye JavaScript que concatena su entrada, escribe su entrada en minúsculas o ambas. La política de FlowCallout
define parámetros que especifican la entrada de la string, el resultado y qué hacer con la entrada.
La política de
String-Handler
FlowCallout
llama al flujo compartido y pasa parámetros que especifican la variable para almacenar el resultado del flujo compartido, qué operación de flujo compartido usar y qué entrada usar (aquí, una string literal, pero también puede ser una variable de flujo). Los elementosParameter
especifican los nombres y valores de las variables para crear el entorno de ejecución. El flujo compartido puede recuperar estas variables para usarlas en su propio código.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <FlowCallout async="false" continueOnError="false" enabled="true" name="String-Handler"> <DisplayName>String Handler</DisplayName> <Parameters> <Parameter name="input">Gladys Kravitz</Parameter> <Parameter name="operations">concatenate tolowercase</Parameter> <Parameter name="outputVariable">string.handler.output</Parameter> </Parameters> <SharedFlowBundle>StringHandler</SharedFlowBundle> </FlowCallout>
El siguiente flujo compartido
default
incluye una política de JavaScript deSharedStringFunctions
que se ejecuta cuando se llama al flujo compartido desde una política deFlowCallout
.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <SharedFlow name="default"> <Step> <Name>SharedStringFunctions</Name> </Step> </SharedFlow>
En el flujo compartido, la siguiente política de JavaScript de
SharedStringFunctions
especifica el archivo de JavaScriptSharedStringFunctions.js
con el código que se ejecutará.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="SharedStringFunctions"> <DisplayName>SharedStringFunctions</DisplayName> <Properties/> <ResourceURL>jsc://SharedStringFunctions.js</ResourceURL> </Javascript>
El siguiente código de JavaScript,
SharedStringFunctions.js
, se ejecuta desde la política de JavaScript deSharedStringFunctions
. Esta secuencia de comandos recupera los valores de las variables creadas a partir de los elementos deParameter
de la política deFlowCallout
.// Input value from the calling API proxy. var handledString = context.getVariable("input"); // Variable to use for output from this script. var outputVariable = context.getVariable("outputVariable"); // A space-separated list of things to do to the input string. // Convert to lower case to handle unintentional capitals in configuration. var operation = context.getVariable("operations").toLowerCase(); // If "lowercase" was given as an operation, convert the input to lowercase. if (operation.includes("tolowercase")) { handledString = handledString.toLowerCase(); } // If "concatenate" was given as an operation, concatenate the input. if (operation.includes("concatenate")) { handledString = handledString.replace(/\s+/g, ''); } // Assign the resulting string to the output variable specified by // the calling API proxy. context.setVariable(outputVariable, handledString);
- La ejecución fluye de la política de JavaScript al flujo compartido y, luego, a la política de
FlowCallout
en el proxy de API de origen.
Referencia del elemento
A continuación, se describen los elementos y los atributos que puedes configurar en esta política:
<FlowCallout async="false" continueOnError="false" enabled="true" name="Flow-Callout-1"> <DisplayName>Custom label used in UI</DisplayName> <SharedFlowBundle>thereferencedsharedflowbundle</SharedFlowBundle> </FlowCallout>
Atributos <FlowCallout>
<FlowCallout async="false" continueOnError="false" enabled="true" name="Flow-Callout-1">
En la siguiente tabla, se describen los atributos que son comunes a todos los elementos principales de las políticas:
Atributo | Descripción | Configuración predeterminada | Presence |
---|---|---|---|
name |
El nombre interno de la política. El valor del atributo De forma opcional, usa el elemento |
N/A | Obligatorio |
continueOnError |
Configúralo como Configúralo como |
false | Opcional |
enabled |
Configúralo como Configúralo como |
true | Opcional |
async |
Este atributo dejó de estar disponible. |
false | Obsoleto |
Elemento <DisplayName>
Se usan además del atributo name
para etiquetar la política en el editor de proxy de la IU de administración con un nombre de lenguaje natural diferente.
<DisplayName>Policy Display Name</DisplayName>
Configuración predeterminada |
N/A Si omites este elemento, se usa el valor del atributo |
---|---|
Presence | Opcional |
Tipo | String |
Elemento <SharedFlowBundle>
Especifica el nombre del flujo compartido que se va a llamar. El valor de este elemento debe ser el mismo que el valor del atributo de nombre del elemento <SharedFlowBundle>
de destino.
<SharedFlowBundle/>
En el ejemplo más simple, asignas el nombre del flujo compartido al que se llamó al valor de este elemento. Es decir, el valor de este elemento debe ser el mismo que el valor del atributo name
del flujo compartido.
<SharedFlowBundle>Shared-Flow-Name</SharedFlowBundle>
Predeterminado | N/A |
---|---|
Presence | Obligatorio |
Tipo | N/A |
Atributos
Ninguno
Elemento <Parameter>
Especifica un parámetro y un valor (o una fuente de valor) para pasar como una variable al flujo compartido que llama esta política.
Cuando usas un parámetro, puedes especificar un valor (o una variable que contenga un valor) que se debe pasar al flujo compartido al que llama la política. Esto es conceptualmente similar a especificar un parámetro en una llamada a función. Al igual que con un parámetro de función, el valor de un parámetro de FlowCallout
puede variar según el contexto de la llamada de flujo compartido.
Los parámetros de FlowCallout
son visibles solo durante la ejecución del flujo compartido.
Sintaxis
Puedes usar este elemento con cualquiera de las siguientes formas de sintaxis. Ten en cuenta que, cuando usas un valor literal, el formato del valor que especifiques dependerá del código que lo consume.
<!- A literal value in an attribute. --/> <Parameter name="parameter-name" value='parameter-value' /> <!- A reference to a variable in an attribute. --/> <Parameter name="parameter-name" ref='source-variable-name' /> <!- A literal value in the element content. --/> <Parameter name="parameter-name">parameter-value</Parameter> <!- An reference to an attribute in the element content. --/> <Parameter name="parameter-name">{source-variable-name}</Parameter>
Ejemplo
Esta política de String-Handler
FlowCallout
pasa parámetros que especifican dónde almacenar el resultado del flujo compartido y qué entrada usar. Los elementos Parameter
especifican los nombres y valores de las variables para crear el entorno de ejecución. El flujo compartido puede recuperar estas variables para usarlas en su propio código.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <FlowCallout async="false" continueOnError="false" enabled="true" name="String-Handler"> <DisplayName>String Handler</DisplayName> <Parameters> <Parameter name="input">Gladys Kravitz</Parameter> <Parameter name="outputVariable">string.handler.output</Parameter> </Parameters> <SharedFlowBundle>StringHandler</SharedFlowBundle> </FlowCallout>
Predeterminado | N/A |
---|---|
Presence | Obligatorio |
Tipo | N/A |
Atributos
Atributo | Descripción | Predeterminado | Presence | Tipo |
---|---|---|---|---|
name |
El nombre de la variable de entorno de ejecución que se debe crear con este parámetro. | Ninguno | Obligatorio | String |
ref |
La variable que contiene el valor que se usará en el entorno de ejecución. Omite este atributo si especificas un valor literal que usarás. |
Ninguno | Opcional | String |
value |
El valor que se usará en la variable de entorno de ejecución creada con este parámetro. Omite este atributo si especificas el nombre de una variable que debe ser la fuente del valor. | Ninguno | Opcional | String |
Elemento <Parameters>
Especifica el conjunto de elementos <Parameter> para pasar como variables al flujo compartido al que llama esta política.
Sintaxis
<Parameters> <Parameter name="parameter-name" value='parameter-value' /> </Parameters>
Predeterminado | N/A |
---|---|
Presence | Opcional |
Tipo | N/A |
Atributos
Ninguno
Esquemas
Variables de flujo
Las variables de flujo habilitan el comportamiento dinámico de las políticas y los flujos en el entorno de ejecución, en función de los encabezados HTTP, el contenido de los mensajes o el contexto del flujo. Para obtener más información sobre las variables de flujo, consulta Referencia de las variables.
Variable | Descripción |
---|---|
|
Alcance: Durante la ejecución del flujo compartido Valor del atributo de nombre del flujo compartido. |
|
Alcance: Durante la ejecución del flujo compartido adjunto el hook de flujo. El nombre del hook de flujo. |
Referencia de errores
En esta sección, se describen los códigos de falla y los mensajes de error que se muestran, y las variables de falla que establece Apigee cuando esta política activa un error. Esta información es importante para saber si estás desarrollando reglas de fallas con el propósito de manejar fallas. Para obtener más información, consulta Qué debes saber sobre los errores de políticas y Soluciona fallas.
Errores de entorno de ejecución
Estos errores pueden producirse cuando se ejecuta la política.
Código de falla | Estado de HTTP | Causa | Corregir |
---|---|---|---|
flow.SharedFlowNotFound |
500 |
El flujo compartido no existe o existe, pero no se ha implementado. | build |
Errores en la implementación
N/A
Temas relacionados
- Crea flujos compartidos: Flujos compartidos reutilizables
- Ejecuta flujos compartidos en varios proxies: Adjunta un flujo compartido con un hook de flujo