Política HTTPModifier

Qué

La política HTTPModifier puede cambiar un mensaje de solicitud o de respuesta.

La política te permite realizar las siguientes acciones con esos mensajes:

  • Añadir nuevos parámetros de formulario, encabezados o parámetros de consulta a un mensaje
  • Quitar encabezados, parámetros de consulta y parámetros de formulario de un mensaje
  • Definir el valor de las propiedades de un mensaje

Con HTTPModifier, puede añadir, cambiar o quitar propiedades de la solicitud o de la respuesta. También puede usar HTTPModifier para crear un mensaje de solicitud o respuesta personalizado y enviarlo a un destino alternativo, tal como se describe en el artículo sobre cómo crear mensajes de solicitud personalizados.

La política HTTPModifier puede crear variables de flujo con los siguientes elementos secundarios:

El orden en el que organices los elementos <Add>, <Set> y <Remove> es importante. La política ejecuta esas acciones en el orden en el que aparecen en la configuración de la política. Si necesitas quitar todos los encabezados, define un encabezado específico. Para ello, debes incluir el elemento <Remove> antes del elemento <Set>.

Esta política es una política estándar y se puede implementar en cualquier tipo de entorno. Para obtener información sobre los tipos de políticas y la disponibilidad de cada tipo de entorno, consulta Tipos de políticas.

Elemento <HTTPModifier>

Define una política HTTPModifier.

Valor predeterminado Consulta la pestaña Política predeterminada que aparece más abajo.
¿Es obligatorio? Obligatorio
Tipo Objeto complejo
Elemento principal N/A
Elementos secundarios <Add>
<AssignTo>
<DisplayName>
<IgnoreUnresolvedVariables>
<Remove>
<Set>

El elemento <HTTPModifier> utiliza la siguiente sintaxis:

Sintaxis

El elemento <HTTPModifier> utiliza la siguiente sintaxis:

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- All HTTPModifier child elements are optional -->
  <Add>
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Add>

  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">DESTINATION_VARIABLE_NAME</AssignTo>

  <DisplayName>POLICY_DISPLAY_NAME</DisplayName>

  <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>

  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Can also be an empty array to remove all FormParams (<FormParams/>) -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array to remove all Headers (<Headers/>) -->
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
    <!-- Can also be an empty array to remove all QueryParams (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Remove>

  <Set>
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
    <Path>PATH</Path>
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
    <StatusCode>HTTP_STATUS_CODE or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>

</HTTPModifier>

Política predeterminada

En el siguiente ejemplo se muestran los ajustes predeterminados al añadir una política HTTPModifier a tu flujo en la interfaz de usuario de Apigee:

<HTTPModifier continueOnError="false" enabled="true" name="http-modifier-default">
  <DisplayName>HTTP Modifier-1</DisplayName>
  <Properties/>
  <Remove>
    <Headers>
      <Header name="h1"/>
    </Headers>
    <QueryParams>
      <QueryParam name="q1"/>
    </QueryParams>
    <FormParams>
      <FormParam name="f1"/>
    </FormParams>
  </Remove>
  <Add>
    <Headers/>
    <QueryParams/>
    <FormParams/>
  </Add>
  <Set>
    <Headers/>
    <QueryParams/>
    <FormParams/>
    <!-- <Verb>GET</Verb> -->
    <Path/>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</HTTPModifier>

Cuando insertas una nueva política HTTPModifier en la interfaz de Apigee, la plantilla contiene stubs para todas las operaciones posibles. Normalmente, se seleccionan las operaciones que se quieren realizar con esta política y se eliminan el resto de los elementos secundarios. Por ejemplo, si quieres realizar una operación de adición, usa el elemento <Add> y quita <Remove> y otros elementos secundarios de la política para que sea más legible.

Este elemento tiene los siguientes atributos, que son comunes a todas las políticas:

Atributo Predeterminado ¿Es obligatorio? Descripción
name N/A Obligatorio

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.

continueOnError falso Opcional 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:
enabled true Opcional 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.
async   falso Obsoleto Este atributo está obsoleto.

En la siguiente tabla se ofrece una descripción general de los elementos secundarios de <HTTPModifier>:

Elemento secundario ¿Es obligatorio? Descripción
Operaciones comunes
<Add> Opcional Añade información al objeto de mensaje especificado por el elemento <AssignTo>.

<Add> añade al mensaje encabezados o parámetros que no existen en el mensaje original. Ten en cuenta que <Set> también ofrece esta función.

Para sobrescribir los encabezados o parámetros, usa el elemento <Set>.

<Remove> Opcional Elimina los elementos especificados de la variable de mensaje indicada en el elemento <AssignTo>.
<Set> Opcional Sustituye los valores de las propiedades de la solicitud o la respuesta, que se especifican mediante el elemento <AssignTo>.

<Set> sobrescribe los encabezados o parámetros que ya existen en el mensaje original o añade nuevos si no existen.

Otros elementos secundarios
<AssignTo> Opcional Especifica en qué mensaje opera la política HTTPModifier. Puede ser la solicitud o la respuesta estándar, o bien un mensaje personalizado.
<IgnoreUnresolvedVariables> Opcional Determina si el procesamiento se detiene cuando se encuentra una variable sin resolver.

Cada uno de estos elementos secundarios se describe en las secciones que aparecen a continuación.

Ejemplos

En los siguientes ejemplos se muestran algunas de las formas en las que puedes usar la política HTTPModifier:

1: Añadir encabezado

En el siguiente ejemplo se añade un encabezado a la solicitud con el elemento <Add>. La variable VerifyAPIKey de este ejemplo se genera con la política VerifyAPIKey:

<HTTPModifier name="HM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</HTTPModifier>

2: Modificar respuesta

En el siguiente ejemplo se modifica un objeto de respuesta añadiéndole un encabezado:

<HTTPModifier name="HM-modify-response">
  <Set>
    <Headers>
      <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignTo>response</AssignTo>
</HTTPModifier>

En este ejemplo no se crea un mensaje nuevo. En su lugar, modifica un mensaje de respuesta añadiendo un encabezado HTTP.

Como en este ejemplo se especifica response como nombre de variable en el elemento <AssignTo>, esta política modifica el objeto de respuesta que se había definido originalmente con los datos devueltos por el servidor de destino.

El encabezado HTTP que añade esta política al mensaje de respuesta se deriva de una variable rellenada por la política LookupCache. Por lo tanto, el mensaje de respuesta modificado por esta política HTTPModifier contiene un encabezado HTTP que indica si los resultados se han extraído de la caché o no. Definir encabezados en la respuesta puede ser útil para depurar y solucionar problemas.

3: Quitar parámetro de consulta

En el ejemplo siguiente, se elimina el parámetro de consulta apikey de la solicitud:

<HTTPModifier name="HM-remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Se recomienda eliminar el parámetro de consulta apikey del mensaje de solicitud cuando se usa la política VerifyAPIKey para la autenticación de usuarios. De esta forma, se evita que se transfiera información sensible de la clave al backend de destino.

Referencia de elemento secundario

En esta sección se describen los elementos secundarios de <HTTPModifier>.

<Add>

Añade información a la solicitud o a la respuesta, que se especifica en el elemento <AssignTo>.

El elemento <Add> añade propiedades al mensaje que no existen en el mensaje original. Ten en cuenta que <Set> también ofrece esta función. Para cambiar los valores de las propiedades existentes, use el elemento <Set>.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo Tipo complejo
Elemento principal <HTTPModifier>
Elementos secundarios <FormParams>
<Headers>
<QueryParams>

El elemento <Add> utiliza la siguiente sintaxis:

Sintaxis

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Add>
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Add>
</HTTPModifier>

Ejemplo 1

En el siguiente ejemplo se usa el elemento <FormParams> para obtener los valores de tres parámetros de cadena de consulta de la solicitud inicial y definirlos como parámetros de formulario en la solicitud del endpoint de destino:

<HTTPModifier name="HM-add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="username">{request.queryparam.name}</FormParam>
      <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam>
      <FormParam name="default_language">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <Remove>
    <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Ejemplo 2

En el siguiente ejemplo se usa el elemento <Headers> para añadir un encabezado partner-id a la solicitud que se enviará al endpoint de destino:

<HTTPModifier name="HM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Ejemplo 3

En el siguiente ejemplo se usa el elemento <QueryParams> para añadir un único parámetro de consulta con un valor estático a la solicitud:

<HTTPModifier name="HM-add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo>request</AssignTo>
</HTTPModifier>

En este ejemplo se usa <Add> en el preflujo de la solicitud. Si consultas los resultados en una herramienta, como la herramienta de depuración, la solicitud a https://example-target.com/get se convierte en https://example-target.com/get?myParam=42.

Los elementos secundarios de <Add> admiten la sustitución dinámica de cadenas, conocida como plantillas de mensajes.

<FormParams> (hijo de <Add>)

Añade nuevos parámetros de formulario al mensaje de solicitud. Este elemento no tiene ningún efecto en un mensaje de respuesta.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo Matriz de elementos <FormParam>
Elemento principal <Add>
Elementos secundarios <FormParam>

El elemento <FormParams> utiliza la siguiente sintaxis:

Sintaxis

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Add>
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">DESTINATION_VARIABLE_NAME</AssignTo>
  </Add>
</HTTPModifier>

Ejemplo 1

En el siguiente ejemplo se añade un parámetro de formulario (answer) y un valor estático (42) a la solicitud:

<HTTPModifier name="HM-add-formparams-1">
  <Add>
    <FormParams>
      <FormParam name="answer">42</FormParam>
    </FormParams>
  </Add>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Ejemplo 2

En el siguiente ejemplo, se obtiene el valor del parámetro de consulta name, se añade a la solicitud como parámetro de formulario y, a continuación, se elimina el parámetro de consulta:

<HTTPModifier name="HM-Swap-QueryParam-to-FormParams">
  <Add>
    <FormParam name="name">{request.queryparam.name}
  </Add>
  <Remove>
    <QueryParam name="name"/>
  </Remove>
</HTTPModifier>

Ten en cuenta que en este ejemplo no se especifica ningún objetivo con <AssignTo>. Esta política solo añade el parámetro a la solicitud.

Ejemplo 3

En el siguiente ejemplo se añaden varios parámetros de formulario a la solicitud:

<HTTPModifier name="HM-add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="username">{request.queryparam.name}</FormParam>
      <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam>
      <FormParam name="default_language">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <Remove>
    <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

En este ejemplo se obtienen los parámetros de cadena de consulta de la solicitud original y se añaden como parámetros de formulario con nombres diferentes. Después, elimina los parámetros de consulta originales. Apigee enviará la solicitud modificada al endpoint de destino.

Puedes usar la herramienta de depuración para ver el flujo. Verás que el cuerpo de la solicitud contiene los datos del formulario codificados en la URL, que originalmente se transfirieron como parámetros de cadena de consulta:

username=nick&zip_code=90210&default_language=en

Puedes usar <FormParams> solo si se cumplen los siguientes criterios:

  • Verbos HTTP: GET, POST
  • Tipo de mensaje: solicitud
  • Una (o ambas) de las siguientes opciones:
    • Datos del formulario: se asigna un valor o "" (la cadena vacía). Por ejemplo, con curl, añade -d "" a tu solicitud.
    • Encabezado Content-Length: se define como 0 (si no hay datos en la solicitud original; de lo contrario, la longitud actual, en bytes). Por ejemplo, con curl añade -H "Content-Length: 0" a tu solicitud.

Por ejemplo:

curl -vL -X POST -d "" -H "Content-Type: application/x-www-form-urlencoded"
  https://ahamilton-eval-test.apigee.net/am-test

Cuando añades <FormParams>, Apigee asigna el valor application/x-www-form-urlencoded a la cabecera Content-Type de la solicitud antes de enviar el mensaje al servicio de destino.

<Headers> (hijo de <Add>)

Añade nuevos encabezados a la solicitud o respuesta especificada, que se indica mediante el elemento <AssignTo>.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo Matriz de elementos <Header>
Elemento principal <Add>
Elementos secundarios <Header>

El elemento <Headers> utiliza la siguiente sintaxis:

Sintaxis

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Add>
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
  </Add>
</HTTPModifier>

Ejemplo 1

En el siguiente ejemplo se añade un encabezado partner-id al mensaje de solicitud y se asigna el valor de la variable de flujo verifyapikey.VAK-1.developer.app.partner-id a ese encabezado.

<HTTPModifier name="HM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</HTTPModifier>

<QueryParams> (hijo de <Add>)

Añade nuevos parámetros de consulta a la solicitud. Este elemento no tiene ningún efecto en una respuesta.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo Matriz de elementos <QueryParam>
Elemento principal <Add>
Elementos secundarios <QueryParam>

El elemento <QueryParams> utiliza la siguiente sintaxis:

Sintaxis

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Add>
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Add>
</HTTPModifier>

Ejemplo 1

En el ejemplo siguiente, se añade el parámetro de consulta myParam a la solicitud y se le asigna el valor 42:

<HTTPModifier name="HM-add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Puedes usar <QueryParams> solo si se cumplen los siguientes criterios:

  • Verbos HTTP: GET, POST
  • Tipo de mensaje: solicitud

Además, solo puede definir parámetros de consulta cuando el atributo type del elemento <AssignTo> sea un mensaje de solicitud. Definirlos en la respuesta no tiene ningún efecto.

Si define un array vacío de parámetros de consulta en su política (<Add><QueryParams/></Add>), la política no añade ningún parámetro de consulta. Es lo mismo que omitir <QueryParams>.

<AssignTo>

Determina en qué objeto opera la política HTTPModifier. Las opciones disponibles son:

  • Mensaje de solicitud: el request recibido por el proxy de API
  • Mensaje de respuesta: el response devuelto por el servidor de destino.
  • Mensaje personalizado: un objeto de solicitud o respuesta personalizado

Ten en cuenta que, en algunos casos, no puedes cambiar el objeto sobre el que actúa la política HTTPModifier. Por ejemplo, no puede usar <Add> ni <Set> para añadir o cambiar parámetros de consulta (<QueryParams>) o parámetros de formulario (<FormParams>) en la respuesta. Solo puede manipular los parámetros de consulta y los parámetros de formulario en la solicitud.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo Cadena
Elemento principal <HTTPModifier>
Elementos secundarios Ninguno

Si no especifica <AssignTo> o si especifica el elemento <AssignTo>, pero no especifica un valor de texto para el elemento, la política actúa en la solicitud o respuesta predeterminada, que se basa en el lugar donde se ejecuta la política. Si la política se ejecuta en el flujo de solicitudes, afecta al mensaje de solicitud. Si se ejecuta en el flujo de respuesta, la política afecta a la respuesta de forma predeterminada.

El elemento <AssignTo> utiliza la siguiente sintaxis:

Sintaxis

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">DESTINATION_VARIABLE_NAME</AssignTo>
</HTTPModifier>

Ejemplo 1

En el siguiente ejemplo no se especifica ningún mensaje en el texto del <AssignTo>. Esto implica que la política actuará sobre el mensaje request o response, en función de dónde se ejecute.

<HTTPModifier name="assignto-1">
  <AssignTo createNew="false" transport="http" type="request"/>-- no-op -->
  ...
</HTTPModifier>

Si especifica createNew="false" y no proporciona explícitamente un nombre de mensaje, los demás atributos de <AssignTo> no serán relevantes. En este caso, puede que te interese omitir por completo el elemento <AssignTo>.

Ejemplo 2

En el siguiente ejemplo se crea un objeto de solicitud que sobrescribe el objeto anterior:

<HTTPModifier name="assignto-2">
  <AssignTo createNew="true" transport="http" type="request"/>
  ...
</HTTPModifier>

Cuando creas un objeto de solicitud o de respuesta, los demás elementos de la política HTTPModifier (como <Add> y <Set>) actúan sobre ese nuevo objeto de solicitud.

Puedes acceder al nuevo objeto de solicitud en otras políticas más adelante en el flujo o enviar el nuevo objeto de solicitud a un servicio externo con una política ServiceCallout.

Ejemplo 3

En el siguiente ejemplo se crea un objeto de solicitud llamado MyRequestObject:

<HTTPModifier name="assignto-3">
  <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo>
  ...
</HTTPModifier>

Cuando creas un objeto de solicitud o de respuesta, los demás elementos de la política HTTPModifier (como <Add> y <Set>) actúan sobre ese nuevo objeto de solicitud.

Puedes acceder al nuevo objeto de solicitud por su nombre en otras políticas más adelante en el flujo o enviar el nuevo objeto de solicitud a un servicio externo con una política ServiceCallout.

En la siguiente tabla se describen los atributos de <AssignTo>:

Atributo Descripción ¿Es obligatorio? Tipo
createNew

Determina si esta política crea un mensaje al asignar valores.

Si true, la política crea una variable del tipo especificado por type (request o response). Si no especifica el nombre de la nueva variable, la política crea un objeto de solicitud o de respuesta en función del valor de type.

Si false, la política responde de una de estas dos formas:

  • Si <AssignTo> puede resolver el nombre de la variable en una solicitud o una respuesta, continúa con el procesamiento. Por ejemplo, si la política está en un flujo de solicitud, la variable es el objeto de solicitud. Si la política está en una respuesta, la variable es el objeto de respuesta.
  • Si no se puede resolver <AssignTo> o se resuelve en un tipo que no es de mensaje, la política genera un error.

Si no se especifica createNew, la política responde de una de estas dos formas:

  • Si <AssignTo> se resuelve en un mensaje, el proceso avanza al siguiente paso.
  • Si no se puede resolver <AssignTo> o se resuelve en un tipo que no es de mensaje, se crea una variable del tipo especificado en type.
Opcional Booleano
transport

Especifica el tipo de transporte del tipo de mensaje de solicitud o respuesta.

El valor predeterminado es http (el único valor admitido).

Opcional Cadena
type Especifica el tipo del nuevo mensaje cuando createNew es true. Los valores válidos son request y response.

El valor predeterminado es request. Si omite este atributo, Apigee creará una solicitud o una respuesta, en función de en qué parte del flujo se ejecute esta política.

Opcional Cadena

<DisplayName>

Se usa junto con el atributo name para etiquetar la política en el editor de proxy de la interfaz de usuario de gestión con un nombre diferente que suene más natural.

El elemento <DisplayName> es común a todas las políticas.

Valor predeterminado N/A
¿Es obligatorio? Opcional. Si omite <DisplayName>, se usará el valor del atributo name de la política.
Tipo Cadena
Elemento principal <PolicyElement>
Elementos secundarios Ninguno

El elemento <DisplayName> utiliza la siguiente sintaxis:

Sintaxis

<PolicyElement>
  <DisplayName>POLICY_DISPLAY_NAME</DisplayName>
  ...
</PolicyElement>

Ejemplo

<PolicyElement>
  <DisplayName>My Validation Policy</DisplayName>
</PolicyElement>

El elemento <DisplayName> no tiene atributos ni elementos secundarios.

<IgnoreUnresolvedVariables>

Determina si el procesamiento se detiene cuando se encuentra una variable sin resolver.

Valor predeterminado Falso
¿Es obligatorio? Opcional
Tipo Booleano
Elemento principal <HTTPModifier>
Elementos secundarios Ninguno

Asigna el valor true para ignorar las variables sin resolver y continuar con el procesamiento. De lo contrario, false. El valor predeterminado es false.

Definir <IgnoreUnresolvedVariables> como true es diferente de definir continueOnError de <HTTPModifier> como true, ya que se refiere específicamente a la definición y obtención de valores de variables. Si asignas el valor true a continueOnError, Apigee ignora todos los errores, no solo los que se producen al usar variables.

El elemento <IgnoreUnresolvedVariables> utiliza la siguiente sintaxis:

Sintaxis

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>
</HTTPModifier>

Ejemplo 1

En el siguiente ejemplo se asigna true a <IgnoreUnresolvedVariables>:

<HTTPModifier name="HM-Set-Headers">
  <Set>
    <Headers>
      <Header name='new-header'>{possibly-defined-variable}<Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</HTTPModifier>

Como <IgnoreUnresolvedVariables> tiene el valor true, si no se define la variable possibly-defined-variable, esta política no generará ningún error.

<Remove>

Elimina encabezados, parámetros de consulta o parámetros de formulario de un mensaje. Una etiqueta vacía elimina todos los parámetros correspondientes, incluidos los encabezados, los parámetros de formulario y los parámetros de consulta.

El mensaje afectado puede ser una solicitud o una respuesta. Para especificar en qué mensaje <Remove> actúa, usa el elemento <AssignTo>.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo Tipo complejo
Elemento principal <HTTPModifier>
Elementos secundarios <FormParams>
<Headers>
<QueryParams>

Un caso de uso habitual de <Remove> es eliminar un parámetro de consulta o un encabezado que contenga información sensible del objeto de solicitud entrante para evitar que se envíe al servidor backend.

El elemento <Remove> utiliza la siguiente sintaxis:

Sintaxis

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Can also be an empty array to remove all FormParams (<FormParams/>) -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array to remove all Headers (<Headers/>) -->
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
    <!-- Can also be an empty array to remove all QueryParams (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Remove>
</HTTPModifier>

Ejemplo 1

En el siguiente ejemplo se eliminan todos los parámetros de formulario y un parámetro de consulta del objeto request:

<HTTPModifier name="HM-remove-2">
  <Remove>
    <!-- Empty (<FormParams/>) removes all form parameters -->
    <FormParams/>
    <QueryParams>
      <QueryParam name="qp1"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Ejemplo 2

En el siguiente ejemplo se elimina todo de un objeto de mensaje:

<HTTPModifier name="HM-remove-3">
  <Remove/>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Normalmente, solo lo harías si fueras a usar el elemento <Set> para definir algunos valores de sustitución en el mensaje.

<FormParams> (hijo de <Remove>)

Quita los parámetros de formulario especificados de la solicitud. Este elemento no tiene ningún efecto en una respuesta.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo Matriz de elementos <FormParam> o matriz vacía
Elemento principal <Remove>
Elementos secundarios <FormParam>

El elemento <FormParams> utiliza la siguiente sintaxis:

Sintaxis

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Can also be an empty array to remove all FormParams (<FormParams/>) -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
  </Remove>
</HTTPModifier>

Ejemplo 1

En el ejemplo siguiente se eliminan tres parámetros de formulario de la solicitud:

<HTTPModifier name="HM-remove-formparams-1">
  <Remove>
    <FormParams>
      <FormParam name="form_param_1"/>
      <FormParam name="form_param_2"/>
      <FormParam name="form_param_3"/>
    </FormParams>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Ejemplo 2

En el siguiente ejemplo se eliminan todos los parámetros de formulario de la solicitud:

<HTTPModifier name="HM-remove-formparams-2">
  <Remove>
    <FormParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Ejemplo 3

Si hay varios parámetros de formulario con el mismo nombre, usa la siguiente sintaxis:

<HTTPModifier name="HM-remove-formparams-3">
  <Remove>
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

En este ejemplo se eliminan f1, f2 y el segundo valor de f3. Si f3 solo tiene un valor, no se elimina.

Puedes usar <FormParams> solo si se cumplen los siguientes criterios:

  • Tipo de mensaje: solicitud
  • Content-Type: application/x-www-form-urlencoded

<Headers> (hijo de <Remove>)

Elimina los encabezados HTTP especificados de la solicitud o la respuesta, que se indica en el elemento <AssignTo>.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo Matriz de elementos <Header> o matriz vacía
Elemento principal <Remove>
Elementos secundarios <Header>

El elemento <Headers> utiliza la siguiente sintaxis:

Sintaxis

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Can also be an empty array to remove all Headers (<Headers/>) -->
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
  </Remove>
</HTTPModifier>

Ejemplo 1

En el siguiente ejemplo se elimina el encabezado user-agent de la solicitud:

<HTTPModifier name="HM-remove-one-header">
  <Remove>
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Ejemplo 2

En el siguiente ejemplo se eliminan todos los encabezados de la solicitud:

<HTTPModifier name="HM-remove-all-headers">
  <Remove>
    <Headers/>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Ejemplo 3

Si hay varios encabezados con el mismo nombre, utiliza la siguiente sintaxis:

<HTTPModifier name="HM-remove-headers-3">
  <Remove>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

En este ejemplo se eliminan h1, h2 y el segundo valor de h3 de la solicitud. Si h3 solo tiene un valor, no se elimina.

<QueryParams> (hijo de <Remove>)

Quita los parámetros de consulta especificados de la solicitud. Este elemento no tiene ningún efecto en una respuesta.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo Matriz de elementos <QueryParam> o matriz vacía
Elemento principal <Remove>
Elementos secundarios <QueryParam>

El elemento <QueryParams> utiliza la siguiente sintaxis:

Sintaxis

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Can also be an empty array to remove all QueryParams (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Remove>
</HTTPModifier>

Ejemplo 1

En el siguiente ejemplo se elimina un único parámetro de consulta de la solicitud:

<HTTPModifier name="HM-remove-queryparams-1">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
      </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Ejemplo 2

En el siguiente ejemplo se eliminan todos los parámetros de consulta de la solicitud:

<HTTPModifier name="HM-remove-queryparams-2">
  &tl;Remove>
      <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Ejemplo 3

Si hay varios parámetros de consulta con el mismo nombre, utiliza la siguiente sintaxis:

<HTTPModifier name="HM-remove-queryparams-3">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
        <QueryParam name="qp2"/>
        <QueryParam name="qp3.2"/>
      </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

En este ejemplo se eliminan qp1, qp2 y el segundo valor de qp3 de la solicitud. Si qp3 solo tiene un valor, no se elimina.

Ejemplo 4

En el ejemplo siguiente, se elimina el parámetro de consulta apikey de la solicitud:

<HTTPModifier name="HM-remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Puedes usar <QueryParams> solo si se cumplen los siguientes criterios:

  • Verbos HTTP: GET, POST
  • Tipo de mensaje: solicitud

<Set>

Define la información en el mensaje de solicitud o respuesta, que se especifica mediante el elemento <AssignTo>. <Set> sobrescribe los encabezados o los parámetros de consulta o de formulario que ya existen en el mensaje original, o bien añade nuevos si no los hay.

Los encabezados y los parámetros de consulta y de formulario de un mensaje HTTP pueden contener varios valores. Para añadir valores adicionales a un encabezado o un parámetro, utilice el elemento <Add>.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo Tipo complejo
Elemento principal <HTTPModifier>
Elementos secundarios <FormParams>
<Headers>
<Path>
<QueryParams>
<StatusCode>
<Verb>
<Version>

El elemento <Set> utiliza la siguiente sintaxis:

Sintaxis

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
    <Path>PATH</Path>
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
    <StatusCode>HTTP_STATUS_CODE or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>
</HTTPModifier>

Ejemplo

En el siguiente ejemplo se define un encabezado específico. Cuando esta política se adjunta en el flujo de solicitudes, permitirá que el sistema upstream reciba un encabezado adicional que no se haya incluido en la solicitud entrante original.

<HTTPModifier name="HM-Set-Header">
  <Set>
    <Headers>
        <Header name="authenticated-developer">{verifyapikey.VAK-1.developer.id}</Header>
    </Headers>
  </Set>
  <AssignTo>request</AssignTo>
</HTTPModifier>

<FormParams> (hijo de <Set>)

Sobrescribe los parámetros de formulario de una solicitud y los sustituye por los nuevos valores que especifiques con este elemento. Este elemento no tiene ningún efecto en una respuesta.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo Matriz de elementos <FormParam>
Elemento principal <Set>
Elementos secundarios <FormParam>

El elemento <FormParams> utiliza la siguiente sintaxis:

Sintaxis

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
  </Set>
</HTTPModifier>

Ejemplo 1

En el siguiente ejemplo se asigna el valor de la variable request.header.myparam a un parámetro de formulario llamado myparam en una solicitud personalizada nueva:

<HTTPModifier name="HM-set-formparams-1">
  <Set>
    <FormParams>
      <FormParam name="myparam">{request.header.myparam}</FormParam>
    </FormParams>
  </Set>
  <AssignTo createNew="true" transport="http" type="request>>MyCustomRequest</AssignTo>
</HTTPModifier>

Puedes usar <FormParams> solo si se cumplen los siguientes criterios:

  • Verbo HTTP: POST
  • Tipo de mensaje: solicitud

Si define parámetros de formulario vacíos en su política (<Add><FormParams/></Add>), la política no añade ningún parámetro de formulario. Es lo mismo que omitir <FormParams>.

<Set> cambia el Content-Type del mensaje a application/x-www-form-urlencoded antes de enviarlo al endpoint de destino.

<Headers> (hijo de <Set>)

Sobrescribe los encabezados HTTP que ya haya en la solicitud o la respuesta, que se especifica mediante el elemento <AssignTo>.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo Matriz de elementos <Header>
Elemento principal <Set>
Elementos secundarios <Header>

El elemento <Headers> utiliza la siguiente sintaxis:

Sintaxis

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
  </Set>
</HTTPModifier>

Ejemplo 1

En el siguiente ejemplo, se asigna al encabezado x-ratelimit-remaining el valor de la variable ratelimit.Quota-1.available.count:

<HTTPModifier name="HM-Set-RateLimit-Header">
  <Set>
    <Headers>
      <Header name="X-RateLimit-Remaining">{ratelimit.Quota-1.available.count}</Header>
    </Headers>
  </Set>
  <AssignTo>response</AssignTo>
</HTTPModifier>

Si define encabezados vacíos en su política (<Set><Headers/></Set>), la política no definirá ningún encabezado. Esto tendrá el mismo efecto que omitir <Headers>.

<Path> (hijo de <Set>)

<QueryParams> (hijo de <Set>)

Sobrescribe los parámetros de consulta de la solicitud con nuevos valores. Este elemento no tiene ningún efecto en una respuesta.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo Matriz de elementos <QueryParam>
Elemento principal <Set>
Elementos secundarios <QueryParam>

El elemento <QueryParams> utiliza la siguiente sintaxis:

Sintaxis

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Set>
</HTTPModifier>

Ejemplo 1

En el ejemplo siguiente, se asigna al parámetro de consulta address el valor de la variable request.header.address:

<HTTPModifier name="HM-set-queryparams-1">
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
  </Set>
</HTTPModifier>

Puedes usar <QueryParams> solo si se cumplen los siguientes criterios:

  • Verbos HTTP: GET, POST
  • Tipo de mensaje: solicitud

Si define parámetros de consulta vacíos en su política (<Set><QueryParams/></Set>), la política no definirá ningún parámetro de consulta. Es lo mismo que omitir <QueryParams>.

<StatusCode> (hijo de <Set>)

Asigna el código de estado a la respuesta. Este elemento no tiene ningún efecto en una solicitud.

Valor predeterminado "200" (cuando el atributo createNew de <AssignTo> se define como "true")
¿Es obligatorio? Opcional
Tipo Cadena o VARIABLE
Elemento principal <Set>
Elementos secundarios Ninguno

El elemento <StatusCode> utiliza la siguiente sintaxis:

Sintaxis

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <StatusCode>HTTP_STATUS_CODE or {variable}</StatusCode>
  </Set>
</HTTPModifier>

Ejemplo 1

En el siguiente ejemplo se define un código de estado sencillo:

<HTTPModifier name="HM-set-statuscode-404">
  <Set>
    <StatusCode>404<<StatusCode>
  </Set>
  <AssignTo>response</AssignTo>
</HTTPModifier>

Ejemplo 2

El contenido de <StatusCode> se trata como una plantilla de mensaje. Esto significa que el nombre de una variable entre llaves se sustituirá en tiempo de ejecución por el valor de la variable a la que se hace referencia, como se muestra en el siguiente ejemplo:

<HTTPModifier name="set-statuscode-2">
  <Set>
    <StatusCode>{calloutresponse.status.code}</StatusCode>
  </Set>
  <AssignTo>response</AssignTo>
</HTTPModifier>

Puedes usar <StatusCode> solo si se cumplen los siguientes criterios:

  • Tipo de mensaje: Response

<Verb> (hijo de <Set>)

Define el verbo HTTP en la solicitud. Este elemento no tiene ningún efecto en una respuesta.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo Cadena o VARIABLE
Elemento principal <Set>
Elementos secundarios Ninguno

El elemento <Verb> utiliza la siguiente sintaxis:

Sintaxis

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
  </Set>
</HTTPModifier>

Ejemplo 1

En el siguiente ejemplo se define un verbo simple en la solicitud:

<HTTPModifier name="HM-set-verb-1">
  <Set>
    <Verb>POST</Verb>
  </Set>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Ejemplo 2

El contenido de <Verb> se trata como una plantilla de mensaje. Esto significa que un nombre de variable entre llaves se sustituirá en tiempo de ejecución por el valor de la variable a la que se hace referencia.

En el siguiente ejemplo se usa una variable para rellenar un verbo:

<HTTPModifier name="HM-set-verb-to-dynamic-value">
  <Set>
    <Verb>{my_variable}</Verb>
  </Set>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Puedes usar <Verb> solo si se cumplen los siguientes criterios:

  • Tipo de mensaje: solicitud

<Version> (hijo de <Set>)

Define la versión HTTP de una solicitud. Este elemento no tiene ningún efecto en una respuesta.

Valor predeterminado N/A
¿Es obligatorio? Opcional
Tipo Cadena o VARIABLE
Elemento principal <Set>
Elementos secundarios Ninguno

El elemento <Version> utiliza la siguiente sintaxis:

Sintaxis

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>
</HTTPModifier>

Ejemplo 1

En el siguiente ejemplo se asigna el número de versión 1.1:

<HTTPModifier name="HM-set-version-1">
  <Set>
    <Version>1.1</Version>
  </Set>
</HTTPModifier>

Ejemplo 2

En el siguiente ejemplo se usa una variable entre llaves para definir el número de versión:

<HTTPModifier name="HM-set-version-2">
  <Set>
    <Version>{my_version}</Version>
  </Set>
  <AssignTo>request</AssignTo>
</HTTPModifier>

El contenido de <Version> se trata como una plantilla de mensaje. Esto significa que el nombre de una variable entre llaves se sustituirá en tiempo de ejecución por el valor de la variable a la que se hace referencia.

Puedes usar <Version> solo si se cumplen los siguientes criterios:

  • Tipo de mensaje: solicitud

Crear mensajes de solicitud personalizados

Puede usar HTTPModifier para crear un mensaje de solicitud personalizado. Después de crear una solicitud personalizada, puedes usarla de las siguientes formas:

  • Acceder a sus variables en otras políticas
  • Pasarlo a un servicio externo

Para crear un mensaje de solicitud personalizado, usa el elemento <AssignTo> en tu política HTTPModifier. Asigna el valor true a createNew y especifica el nombre del nuevo mensaje en el cuerpo del elemento, tal como se muestra en el siguiente ejemplo:

<HTTPModifier name="assignto-3">
    <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo>
    ...
  </HTTPModifier>

De forma predeterminada, Apigee no hace nada con el mensaje de solicitud personalizado. Después de crearlo, Apigee continuará con el flujo con la solicitud original. Para usar la solicitud personalizada, añade una política que utilice el mensaje de solicitud y haz referencia explícita al mensaje de solicitud recién creado en la configuración de esa política. De esta forma, podrás enviar la solicitud personalizada a un endpoint de servicio externo.

En los siguientes ejemplos se crean mensajes de solicitud personalizados:

Ejemplo 1

En el siguiente ejemplo se crea un objeto de solicitud personalizado con HTTPModifier:

<HTTPModifier name="HTTPModifier-3">
  <AssignTo createNew="true" type="request">MyCustomRequest</AssignTo>
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.queryparam.addy}</QueryParam>
    </QueryParams>
    <Verb>GET</Verb>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</HTTPModifier>

Este ejemplo:

  • Crea un objeto de mensaje de solicitud llamado MyCustomRequest.
  • En MyCustomRequest, esta política:
    • Asigna al parámetro de consulta address del mensaje personalizado el valor del parámetro de consulta addy de la solicitud entrante.
    • Define el verbo HTTP en GET.
  • Asigna el valor false a <IgnoreUnresolvedVariables>. Cuando <IgnoreUnresolvedVariables> es false, si una de las variables a las que se hace referencia en la configuración de la política no existe, Apigee pasará al estado de error en el flujo de la API.

Ejemplo 2

A continuación, se muestra otro ejemplo de cómo crear un objeto de solicitud personalizado con HTTPModifier:

<HTTPModifier name="HTTPModifier-2">
  <AssignTo createNew="true" type="request">partner.request</AssignTo>
  <Set>
    <Verb>POST</Verb>
  </Set>
</HTTPModifier>

En este ejemplo se crea una solicitud personalizada llamada partner.request. A continuación, asigna el <Verb> a la nueva solicitud.

Puedes acceder a las distintas propiedades de un mensaje personalizado en otra política HTTPModifier que se produzca más adelante en el flujo. En el siguiente ejemplo, se obtiene el valor de un encabezado de una respuesta personalizada con nombre y se coloca en un encabezado nuevo del mensaje de solicitud:

<HTTPModifier name="HM-Set-Header">
  <AssignTo>request</AssignTo>
  <Set>
    <Headers>
      <Header name="injected-approval-id">{MyCalloutResponse.header.approval-id}</Header>
    </Headers>
  </Set>
</HTTPModifier>

Códigos de error

En esta sección se describen los códigos de error y los mensajes de error que devuelve Apigee, así como las variables de error que define, cuando esta política activa un error. Es importante que conozcas esta información si vas a desarrollar reglas de errores para gestionarlos. Para obtener más información, consulta Qué debes saber sobre los errores de políticas y Cómo gestionar los fallos.

Errores de tiempo de ejecución

Estos errores pueden producirse cuando se ejecuta la política.

Código de fallo Estado de HTTP Causa Solucionar
entities.UnresolvedVariable 500 La variable de plantilla de mensaje no está definida o está fuera del ámbito.
steps.httpmodifier.InvalidStatusCode 500 El valor resuelto del código de estado no es válido. Consulta la cadena de errores para obtener más información.

Errores de implementación

Estos errores pueden producirse al implementar un proxy que contenga esta política.

Nombre del error Causa Solucionar
InvalidIndex Si el índice especificado en los elementos <Remove> de la política HTTPModifier es 0 o un número negativo, no se podrá implementar el proxy de API.

Variables de error

Estas variables se definen cuando esta política activa un error en el tiempo de ejecución. Para obtener más información, consulta Qué debes saber sobre los errores de las políticas.

Variables Dónde Ejemplo
httpmodifier.POLICY_NAME.failed POLICY_NAME es el nombre de la política especificado por el usuario que ha provocado el error. httpmodifier.HM-SetResponse.failed = true

Ejemplo de respuesta de error

{
   "fault":{
      "detail":{
         "errorcode":"steps.httpmodifier.InvalidStatusCode"
      },
      "faultstring":"HTTPModifier[HM-SetResponse]: Invalid status code bad_request"
   }
}

Regla de error de ejemplo

<FaultRule name="HTTPModifier Faults">
    <Step>
        <Name>HM-CustomNonMessageTypeErrorResponse</Name>
        <Condition>(fault.name Matches "InvalidStatusCode")</Condition>
    </Step>
    <Condition>(httpmodifier.failed = true)</Condition>
</FaultRule>

Esquemas

Cada tipo de política se define mediante un esquema XML (.xsd). Para obtener información, puede consultar los esquemas de políticas en GitHub.