Política de FlowCallout

Estás consultando la documentación de Apigee Edge.
Consulta la documentación de Apigee X.
Información

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 FlowClaim te permite 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 compilaste un flujo compartido con funciones de seguridad como la verificación de la clave de API, la validación de tokens OAuth y la protección de expresiones regulares. Este flujo compartido representa la convención para una forma de verificar las solicitudes entrantes. Con las políticas FlowReferencia, puedes invocar ese flujo compartido desde varios proxies de API.
  • Puedes llamar a un flujo compartido desde otro si implementas la política FlowFeatured desde un flujo compartido.

Ejemplos

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 FlowClaim para realizar llamadas a 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 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 Flow leyenda, 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 (que no se muestra aquí) configura el flujo compartido de la forma en 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>

Cómo pasar parámetros a un flujo compartido

En este ejemplo, se muestra cómo pasar parámetros de una política FlowReferencia a un flujo compartido. En este caso, una política de FlowExtension llama a un flujo compartido diseñado para realizar funciones comunes de control de strings. El flujo compartido incluye JavaScript que concatena su entrada, escribe su entrada en minúsculas o ambas. La política FlowReferencia define los parámetros que especifican la entrada y el resultado de la string, y lo que se debe hacer con la entrada.

  1. La política FlowReferencia String-Handler llama al flujo compartido y pasa parámetros que especifican la variable para almacenar la salida del flujo compartido, qué operación de flujo compartido se debe usar y qué entrada se debe usar (aquí, un literal de string, pero también puede ser una variable de flujo). Los elementos Parameter especifican los nombres y los 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>
    
  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 de 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 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 JavaScript, SharedStringFunctions.js, se ejecuta desde la política SharedStringFunctions de JavaScript. Esta secuencia de comandos recupera valores de las variables creadas a partir de los elementos Parameter de la política de FlowExtension.

    // 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 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 Predeterminada 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.

De forma opcional, usa el elemento <DisplayName> para etiquetar la política en el editor de proxy de la IU de administración con un nombre de lenguaje natural diferente.

No disponible Obligatorias
continueOnError

Configúralo como false para mostrar un error cuando una política falla. Este es el comportamiento previsto para la mayoría de las políticas.

Configúralo como true para continuar con la ejecución del flujo incluso después de que una política falle.

false Opcional
enabled

Configúralo como true para aplicar la política.

Configúralo como false para desactivar la política. La política no se aplicará incluso si permanece adjunta a un flujo.

true Opcional
async

Este atributo dejó de estar disponible.

false Funciones obsoletas

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>
Predeterminada

No disponible

Si omites este elemento, se usa el valor del atributo name de la política.

Presencia Opcional
Tipo Cadena

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, debes asignar el nombre del flujo compartido al que se llama como un valor para 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>
 
Predeterminada No disponible
Presencia

Obligatorio.

Tipo No disponible

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 FlowExtension 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 String-Handler FlowClaim pasa 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 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>
Predeterminada No disponible
Presencia

Obligatorio.

Tipo No disponible

Atributos

Atributo Descripción Predeterminada Presencia Tipo
name El nombre de la variable de entorno de ejecución que se debe crear con este parámetro. Ninguno Obligatorio. Cadena
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. Cadena
valor 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. Cadena

Elemento <Parameters>

Especifica el conjunto de elementos <Parameter> que deben pasar como variables al flujo compartido que llama esta política.

Sintaxis

<Parameters>
  <Parameter name="parameter-name" value='parameter-value' />
</Parameters>
Predeterminada No disponible
Presencia

Opcional.

Tipo No disponible

Atributos

Ninguno

Esquemas

Variables de flujo

Las variables de flujo permiten el comportamiento dinámico de políticas y flujos en el entorno de ejecución, según los encabezados HTTP, el contenido del mensaje o el contexto de flujo. Para obtener más información sobre las variables de flujo, consulta la Referencia de variables.

Variable Descripción

apigee.edge.sharedflow.name

Alcance: Durante la ejecución del flujo compartido
Tipo: String
Permiso: Lectura

Valor del atributo de nombre del flujo compartido.

apigee.edge.flowhook.name

Alcance: Durante la ejecución del flujo compartido adjunto el hook de flujo.
Tipo: String
Permiso: Lectura

El nombre del hook de flujo.

Referencia de errores

En esta sección, se describen los códigos y mensajes de error que se muestran, así como las variables de fallas que establece Edge 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 Lo que necesitas saber sobre errores de políticas y Controla 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

No disponible

Temas relacionados