Política FlowCallout

Esta página se aplica a Apigee y Apigee Hybrid.

Consulta la documentación de Apigee Edge.

Icono de política

Usa la política FlowCallout para llamar a un flujo compartido desde un proxy de API u otro flujo compartido.

En un flujo compartido, se crea una secuencia de pasos que se puede reutilizar en 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 permite invocar el flujo compartido desde proxies de API y otros flujos compartidos. Funciona como una llamada de función en un lenguaje de programación tradicional.

  • Por ejemplo, supongamos que has creado un flujo compartido con funciones de seguridad como la verificación de claves de API, la validación de tokens OAuth y la protección con expresiones regulares. Este flujo compartido representa tu convención para comprobar las solicitudes entrantes. Con las políticas FlowCallout, puedes invocar ese flujo compartido desde varios proxies de API.
  • Puedes llamar a un flujo compartido desde otro implementando una política FlowCallout en un flujo compartido.

Esta política es una política extensible y su uso puede tener implicaciones en cuanto a costes o utilización, en función de tu licencia de Apigee. Para obtener información sobre los tipos de políticas y las implicaciones de uso, consulta Tipos de políticas.

Ejemplos

Verificar 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 FlowCallout para hacer llamadas a este flujo compartido.

La siguiente definición de flujo compartido incluye una política Verify-API-Key que se ejecuta cuando se llama al flujo compartido desde una política 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 VerifyAPIKey del flujo compartido anterior obtiene el valor de la 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 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 misma forma que un paquete de 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>

Enviar parámetros a un flujo compartido

En este ejemplo se muestra cómo transferir parámetros de una política FlowCallout a un flujo compartido. En este caso, una política de FlowCallout llama a un flujo compartido diseñado para realizar funciones comunes de gestión de cadenas. El flujo compartido incluye JavaScript que concatena su entrada, convierte su entrada a minúsculas o ambas cosas. La política FlowCallout define parámetros que especifican la entrada de cadena, la salida y qué hacer con la entrada.

  1. La política String-Handler FlowCallout llama al flujo compartido y le transfiere parámetros que especifican la variable en la que se almacenará el resultado del flujo compartido, la operación del flujo compartido que se va a usar y la entrada que se va a usar (en este caso, un literal de cadena, pero también podría ser una variable de flujo). Los elementos Parameter especifican los nombres y los valores de las variables que se van a crear en el tiempo 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>
  2. El siguiente flujo compartido default incluye una política de JavaScript SharedStringFunctions que se ejecuta cuando se llama al flujo compartido desde una política FlowCallout.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <SharedFlow name="default">
      <Step>
        <Name>SharedStringFunctions</Name>
      </Step>
    </SharedFlow>
  3. En el flujo compartido, la siguiente política de JavaScript SharedStringFunctions especifica el archivo de JavaScript SharedStringFunctions.js con el código que se va a 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>
  4. El siguiente código JavaScript, SharedStringFunctions.js, se ejecuta desde la política de JavaScript SharedStringFunctions. Esta secuencia de comandos obtiene valores de variables creadas a partir de elementos de la política FlowCallout Parameter.

    // 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);
  5. La ejecución vuelve de la política de JavaScript al flujo compartido y, a continuación, a la política FlowCallout del proxy de API de origen.

Referencia de elemento

A continuación, se indican los elementos y atributos que puede 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 de <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 superiores de la política:

Atributo Descripción Predeterminado Presencia
name

El nombre interno de la política. El valor del atributo name puede contener letras, números, espacios, guiones, guiones bajos y puntos. Este valor no puede superar los 255 caracteres.

Opcionalmente, usa el elemento <DisplayName> para etiquetar la política en el editor de proxy de la interfaz de gestión con un nombre diferente en lenguaje natural.

N/A Obligatorio
continueOnError

Asigna el valor false para devolver un error cuando falle una política. Este es el comportamiento esperado de la mayoría de las políticas.

Asigna el valor true para que la ejecución del flujo continúe incluso después de que falle una política. Consulta también:

falso Opcional
enabled

Asigna el valor true para aplicar la política.

Selecciona false para desactivar la política. La política no se aplicará aunque siga adjunta a un flujo.

true Opcional
async

Este atributo está obsoleto.

falso Obsoleto

Elemento <DisplayName>

Úsalo junto con el atributo name para etiquetar la política en el editor de proxy de la interfaz de gestión con un nombre diferente en lenguaje natural.

<DisplayName>Policy Display Name</DisplayName>
Predeterminado

N/A

Si omite este elemento, se usará el valor del atributo name de la política.

Presencia Opcional
Tipo Cadena

Elemento <SharedFlowBundle>

Especifica el nombre del flujo compartido al que se va a llamar. El valor de este elemento debe ser el mismo que el valor del atributo name del elemento <SharedFlowBundle> de destino.

<SharedFlowBundle/>

En el ejemplo más sencillo, se asigna el nombre del flujo compartido al que se llama como 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
Presencia Obligatorio
Tipo N/A

Atributos

Ninguno

Elemento <Parameter>

Especifica un parámetro y un valor (o una fuente de valor) que se transferirán como una variable al flujo compartido al que llama esta política.

Si usa un parámetro, puede especificar un valor (o una variable que contenga un valor) que se deba transferir al flujo compartido al que llama la política. Conceptualmente, es similar a especificar un parámetro en una llamada de función. Al igual que con un parámetro de función, el valor de un parámetro FlowCallout puede variar en función del contexto de la llamada al flujo compartido.

Los parámetros FlowCallout solo se muestran durante la ejecución del flujo compartido.

Sintaxis

Puedes usar este elemento con cualquiera de las siguientes formas de sintaxis. Ten en cuenta que, si utilizas un valor literal, el formato del valor que especifiques dependerá del código que lo consuma.

<!- 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 String-Handler FlowCallout transfiere parámetros que especifican dónde almacenar la salida del flujo compartido y qué entrada usar. Los elementos Parameter especifican los nombres y los valores de las variables que se van a crear en el tiempo 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
Presencia Obligatorio
Tipo N/A

Atributos

Atributo Descripción Predeterminado Presencia Tipo
name Nombre de la variable de tiempo de ejecución que se va a crear con este parámetro. Ninguno Obligatorio Cadena
ref

La variable que contiene el valor que se va a usar en el tiempo de ejecución. Omita este atributo si va a especificar un valor literal.

Ninguno Opcional Cadena
value El valor que se va a usar en la variable de tiempo de ejecución creada con este parámetro. Omita este atributo si especifica el nombre de una variable que debe ser la fuente del valor. Ninguno Opcional Cadena

Elemento <Parameters>

Especifica el conjunto de elementos <Parameter> que se van a transferir como variables al flujo compartido al que llama esta política.

Sintaxis

<Parameters>
  <Parameter name="parameter-name" value='parameter-value' />
</Parameters>
Predeterminado N/A
Presencia Opcional
Tipo N/A

Atributos

Ninguno

Esquemas

Variables de flujo

Las variables de flujo permiten que las políticas y los flujos tengan un comportamiento dinámico en el tiempo 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 la referencia de variables.

Variable Descripción

apigee.edge.sharedflow.name

Ámbito: durante la ejecución del flujo compartido
Tipo: cadena
Permiso: lectura

Valor del atributo name del flujo compartido.

apigee.edge.flowhook.name

Ámbito: durante la ejecución del flujo compartido adjunto al enlace de flujos.
Tipo: cadena
Permiso: lectura

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.

Errores en la implementación

N/A

Temas relacionados