Política HTTPModifier

Qué

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

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

  • Agregar nuevos parámetros de formulario, encabezados o parámetros de búsqueda a un mensaje
  • Quitar encabezados, parámetros de consulta y parámetros de formulario de un mensaje
  • Establecer el valor de las propiedades existentes en un mensaje

Con HTTPModifier, puedes agregar, cambiar o quitar propiedades de la solicitud o la respuesta. De forma alternativa, puedes usar HTTPModifier para crear una solicitud personalizada o un mensaje de respuesta y pasarlo a un destino alternativo, como se describe en Crea mensajes de solicitud personalizados.

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

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

Esta es una política estándar y se puede implementar en cualquier tipo de entorno. No todos los usuarios necesitan conocer los tipos de políticas y el entorno. Para obtener información sobre los tipos de políticas y la disponibilidad con 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, a continuación
¿Es obligatorio? Obligatorio
Tipo Objeto complejo
Elemento principal N/A
Elementos secundarios <Add>
<AssignTo>
<DisplayName>
<IgnoreUnresolvedVariables>
<Remove>
<Set>

El elemento <HTTPModifier> usa la siguiente sintaxis:

Sintaxis

El elemento <HTTPModifier> usa 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 muestra la configuración predeterminada cuando agregas una política HTTPModifier a tu flujo en la IU 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 de HTTPModifier en la IU de Apigee, la plantilla contiene stubs para todas las operaciones posibles. Por lo general, debes seleccionar qué operaciones quieres realizar con esta política y quitas el resto de los elementos secundarios. Por ejemplo, si deseas realizar una operación de agregació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 Predeterminada (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.

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.

continueOnError falso Opcional 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. También consulta:
enabled true Opcional 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 conectada a un flujo.
async   falso Obsoleta Este atributo dejó de estar disponible.

En la siguiente tabla, se proporciona una descripción de alto nivel de los elementos secundarios de <HTTPModifier>.

Elemento secundario ¿Es obligatorio? Descripción
Operaciones comunes
<Add> Opcional Agrega información al el objeto de mensaje que especifica el elemento <AssignTo>.

<Add> agrega encabezados o parámetros al mensaje que no existe en el mensaje original. Ten en cuenta que <Set> también proporciona esta funcionalidad.

Para reemplazar encabezados o parámetros existentes, usa el elemento <Set>.

<Remove> Opcional Borra los elementos especificados de la variable de mensaje especificada en el elemento <AssignTo>.
<Set> Opcional Reemplaza los valores de las propiedades existentes en la solicitud o respuesta, que se especifica con el elemento <AssignTo>.

<Set> reemplaza los encabezados o parámetros que ya existen en el mensaje original o agrega nuevos si no lo hacen.

Otros elementos secundarios
<AssignTo> Opcional Especifica en qué mensaje opera la política HTTPModifier. Puede ser la solicitud o la respuesta estándar, o puede ser un mensaje personalizado nuevo.
<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 siguientes secciones.

Ejemplos

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

1: Agrega encabezados

En el siguiente ejemplo, se agrega un encabezado a la solicitud con el elemento <Add>. La variable VerifyAPIKey en este ejemplo se genera mediante 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: Modifica la respuesta

En el siguiente ejemplo, se modifica un objeto de respuesta existente cuando se le agrega 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, puedes modificar un mensaje de respuesta existente si agregas un encabezado HTTP.

Debido a que este ejemplo especifica response como el nombre de la variable en el elemento <AssignTo>, esta política modifica el objeto de respuesta que se configuró en un principio con los datos que muestra el servidor de destino.

El encabezado HTTP que se agrega al mensaje de respuesta que proporciona esta política se deriva de una variable propagada 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 extrajeron de la caché o no. Configurar encabezados en la respuesta puede ser útil para la depuración y la solución de problemas.

3: Quita parámetros de búsqueda

En el siguiente ejemplo, se quita el parámetro de búsqueda apikey de la solicitud:

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

Se recomienda quitar el parámetro de búsqueda apikey del mensaje de la solicitud cuando uses la política VerifyAPIKey para la autenticación de usuarios. Debes hacer esto para impedir que la información de clave sensible se pase al destino del backend.

Referencia del elemento secundario

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

<Add>

Agrega información a la solicitud o respuesta, que se especifica mediante el elemento <AssignTo>.

El elemento <Add> agrega propiedades nuevas en el mensaje que no existe en el mensaje original. Ten en cuenta que <Set> también proporciona esta funcionalidad. Para cambiar los valores de las propiedades existentes, usa el elemento <Set>.

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

El elemento <Add> usa 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 ejemplo siguiente, se usa el elemento <FormParams> para obtener los valores de tres parámetros de string de consulta de la solicitud inicial y configurarlos como parámetros de forma en la solicitud de extremo 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 agregar un encabezado partner-id a la solicitud que se enviará al extremo 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 agregar un solo parámetro de búsqueda 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 flujo previo de la solicitud. Si examinas 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 reemplazo de strings dinámicas, conocida como plantilla de mensajes.

<FormParams> (secundario de <Add>)

Agrega parámetros nuevos del formulario al mensaje de la solicitud. Este elemento no tiene efecto en un mensaje de respuesta.

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

El elemento <FormParams> usa 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 agrega un solo 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 y se lo agrega a la solicitud como un parámetro de formulario y, luego, se quita 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 un objetivo con <AssignTo>. Esta política solo agrega el parámetro a la solicitud.

Ejemplo 3

En el siguiente ejemplo, se agregan 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 la string de consulta de la solicitud original y se los agrega como parámetros de formulario con diferentes nombres. Luego, quita los parámetros de consulta originales. Apigee enviará la solicitud modificada al extremo 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 con codificación URL, que se pasaron originalmente como parámetros de string de consulta:

username=nick&zip_code=90210&default_language=en

Solo puedes usar <FormParams> cuando se cumplan los siguientes criterios:

  • Verbos HTTP: GET, POST
  • Tipo de mensaje: solicitud
  • Uno (o ambos) de los siguientes elementos:
    • Datos del formulario: establecidos en algún valor o "" (la cadena vacía). Por ejemplo, con curl, agrega -d "" a tu solicitud.
    • Encabezado Content-Length: Se establece en 0 (si no hay datos en la solicitud original; de lo contrario, la longitud actual, en bytes). Por ejemplo, con curl, agrega -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 agregas <FormParams>, Apigee establece el encabezado Content-Type de la solicitud en application/x-www-form-urlencoded antes de enviar el mensaje al servicio de destino.

<Headers> (secundario de <Add>)

Agrega encabezados nuevos a la solicitud o respuesta especificadas, que se especifica mediante el elemento <AssignTo>.

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

El elemento <Headers> usa 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 agrega el 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> (secundario de <Add>)

Agrega nuevos parámetros de búsqueda a la solicitud. Este elemento no tiene efecto en una respuesta.

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

El elemento <QueryParams> usa 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 siguiente ejemplo, se agrega el parámetro de búsqueda 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>

Solo puedes usar <QueryParams> cuando se cumplan los siguientes criterios:

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

Además, solo puedes establecer parámetros de búsqueda cuando el atributo type del elemento <AssignTo> es un mensaje de solicitud. Configurarlos en la respuesta no causa ningún efecto.

Si defines un arreglo vacío de parámetros de búsqueda en tu política (<Add><QueryParams/></Add>), la política no agrega ningún parámetro de búsqueda. Esto es lo mismo que omitir <QueryParams>.

<AssignTo>

Determina en qué objeto funciona la política HTTPModifier. Las opciones son las siguientes:

  • Mensaje de la solicitud: La request que recibe el proxy de API
  • Mensaje de respuesta: La response que muestra 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 en el que actúa la política HTTPModifier. Por ejemplo, no puedes usar <Add> o <Set> para agregar o cambiar parámetros de búsqueda (<QueryParams>) o parámetros de formulario (<FormParams>) en la respuesta. Solo puedes manipular parámetros de búsqueda y parámetros de formulario en la solicitud.

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

Si no especificas <AssignTo> o si especificas el elemento <AssignTo>, pero no especificas un valor de texto para el elemento, la política actúa sobre la solicitud o respuesta predeterminada, que es lo que se muestra a continuación: en función de dónde se ejecuta la política. Si la política se ejecuta en el flujo de la solicitud, afecta el mensaje de la solicitud. Si se ejecuta en el flujo de respuesta, la política afecta la respuesta de forma predeterminada.

El elemento <AssignTo> usa 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 de <AssignTo>. Esto implica que la política actuará sobre el mensaje request o response, según dónde se ejecute la política.

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

Si especificas createNew="false" y no proporcionas un nombre de mensaje de forma explícita, los otros atributos de <AssignTo> son irrelevantes. En este caso, es posible que desees omitir el elemento <AssignTo> por completo.

Ejemplo 2

En el siguiente ejemplo, se crea un objeto de solicitud nuevo y se reemplaza el objeto existente:

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

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

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

Ejemplo 3

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

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

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

Puedes acceder al nuevo objeto de solicitud en otras políticas más adelante en el flujo o enviar el objeto de solicitud nuevo 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 nuevo cuando asigna valores.

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

Si es false, la política responde de una de las siguientes dos maneras:

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

Si no se especifica createNew, la política responde de dos maneras:

  • Si <AssignTo> se resuelve en un mensaje y, luego, procesa el paso siguiente.
  • Si <AssignTo> no se puede resolver o se resuelve en un tipo que no es de mensaje, se crea una nueva variable de tipo especificada 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 String
type Especifica el tipo de mensaje nuevo, cuando createNew es true. Los valores válidos son request o response.

El valor predeterminado es request. Si omites este atributo, Apigee crea una solicitud o una respuesta, según en qué parte del flujo se ejecute esta política.

Opcional Cadena

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

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

Valor predeterminado N/A
¿Es obligatorio? Opcional. Si omites <DisplayName>, se usa el valor del atributo name de la política.
Tipo String
Elemento principal <PolicyElement>
Elementos secundarios Ninguna

El elemento <DisplayName> usa 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 Ninguna

Configúralo como true para ignorar las variables sin resolver y continuar con el procesamiento, de lo contrario, false. El valor predeterminado es false.

Configurar <IgnoreUnresolvedVariables> como true es diferente a configurar el parámetro continueOnError de <HTTPModifier> como true puesto que es específico de la configuración y la obtención de valores de variables. Si configuras continueOnError como true, Apigee ignorará todos los errores, no solo los errores detectados cuando se usan variables.

El elemento <IgnoreUnresolvedVariables> usa 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 configura <IgnoreUnresolvedVariables> como true:

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

Debido a que <IgnoreUnresolvedVariables> está configurado como true, si la variable possibly-defined-variable no está definida, esta política no arrojará una falla.

<Remove>

Quita los encabezados, los parámetros de búsqueda o los parámetros de formulario de un mensaje. Una etiqueta vacía quita todos los parámetros correspondientes, incluidos encabezados, formparams y queryparams.

El mensaje afectado puede ser una solicitud o una respuesta. Especifica en qué mensaje actúa <Remove> mediante 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 común para <Remove> es borrar un parámetro de consulta o encabezado que contiene información sensible del objeto de solicitud entrante para evitar pasarlo al servidor de backend.

El elemento <Remove> usa 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 quitan 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 quita todo del objeto de mensaje:

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

Por lo general, lo haces solo si usarías el elemento <Set> para configurar algunos valores de reemplazo en el mensaje.

<FormParams> (secundario de <Remove>)

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

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

El elemento <FormParams> usa 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 siguiente ejemplo, se quitan tres parámetros de búsqueda 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 quitan todos los parámetros de búsqueda 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, utiliza 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 quitan f1, f2 y el segundo valor de f3. Si f3 tiene solo un valor, no se quitará.

Solo puedes usar <FormParams> cuando se cumplan los siguientes criterios:

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

<Headers> (secundario de <Remove>)

Quita los encabezados HTTP especificados de la solicitud o respuesta, que se especifica mediante el elemento <AssignTo>.

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

El elemento <Headers> usa 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 quita 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 quitan 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, usa 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 quitan h1, h2 y el segundo valor de h3 de la solicitud. Si h3 tiene solo un valor, no se quitará.

<QueryParams> (secundario de <Remove>)

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

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

El elemento <QueryParams> usa 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 quita un solo parámetro de búsqueda 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 quitan todos los parámetros de búsqueda 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 búsqueda con el mismo nombre, usa 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 quitan qp1, qp2 y el segundo valor de qp3 de la solicitud. Si qp3 tiene solo un valor, no se quitará.

Ejemplo 4

En el siguiente ejemplo, se quita el parámetro de búsqueda apikey de la solicitud:

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

Solo puedes usar <QueryParams> cuando se cumplan los siguientes criterios:

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

<Set>

Establece la información en la solicitud o mensaje de respuesta, que se especifica mediante el elemento <AssignTo>. <Set> reemplaza los encabezados o los parámetros de consulta o formulario que ya existen en el mensaje original o agrega nuevos si no existen.

Los encabezados y los parámetros de consulta y formulario en un mensaje HTTP pueden contener varios valores. Para agregar valores adicionales a un encabezado o parámetro, usa el elemento <Add> en su lugar.

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> usa 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 establece un encabezado específico. Cuando se adjunte esta política en el flujo de solicitudes, permitirá que el sistema ascendente reciba un encabezado adicional que no se incluyó en la solicitud de entrada 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> (secundario de <Set>)

Reemplaza los parámetros de formulario existentes en una solicitud y los reemplaza por los nuevos valores que especificas con este elemento. Este elemento no tiene efecto en una respuesta.

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

El elemento <FormParams> usa 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 configura un parámetro de formulario llamado myparam para el valor de la variable request.header.myparam en una nueva solicitud personalizada:

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

Solo puedes usar <FormParams> cuando se cumplan los siguientes criterios:

  • Verbo HTTP POST
  • Tipo de mensaje: solicitud

Si defines parámetros de formulario vacíos en tu política (<Add><FormParams/></Add>), la política no agregará ningún parámetro de formulario. Esto es lo mismo que omitir <FormParams>.

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

<Headers> (secundario de <Set>)

Reemplaza los encabezados HTTP existentes en la solicitud o respuesta, que se especifica mediante el elemento <AssignTo>.

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

El elemento <Headers> usa 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 establece el encabezado x-ratelimit-remaining en 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 defines encabezados vacíos en tu política (<Set><Headers/></Set>), la política no agregará encabezados. Esto tendrá el mismo efecto que omitir <Headers>.

<Path> (secundario de <Set>)

<QueryParams> (secundario de <Set>)

Reemplaza los parámetros de búsqueda existentes en la solicitud con valores nuevos. Este elemento no causa ningún efecto en una respuesta.

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

El elemento <QueryParams> usa 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 siguiente ejemplo, se establece el parámetro de búsqueda address en 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>

Solo puedes usar <QueryParams> cuando se cumplan los siguientes criterios:

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

Si defines parámetros de búsqueda vacíos en tu política (<Set><QueryParams/></Set>), la política no establece ningún parámetro de consulta. Esto es lo mismo que omitir <QueryParams>.

<StatusCode> (secundario de <Set>)

Establece el código de estado en la respuesta. Este elemento no causa ningún efecto en una solicitud.

Valor predeterminado “200” (cuando el atributo createNew de <AssignTo> se configura como “true”)
¿Es obligatorio? Opcional
Tipo String o VARIABLE
Elemento principal <Set>
Elementos secundarios Ninguna

El elemento <StatusCode> usa 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 configura un código de estado simple:

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

Ejemplo 2

El contenido de <StatusCode> se considera una plantilla de mensaje. Esto significa que un nombre de variable entre llaves se reemplazará en el entorno 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>

Solo puedes usar <StatusCode> cuando se cumplan los siguientes criterios:

  • Tipo de mensaje: Respuesta

<Verb> (secundario de <Set>)

Establece el verbo HTTP en la solicitud. Este elemento no tiene efecto en una respuesta.

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

El elemento <Verb> usa 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 configura 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 considera una plantilla de mensaje. Esto significa que un nombre de variable entre llaves se reemplazará en el entorno de ejecución por el valor de la variable a la que se hace referencia.

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

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

Solo puedes usar <Verb> cuando se cumplan los siguientes criterios:

  • Tipo de mensaje: solicitud

<Version> (secundario de <Set>)

Establece la versión HTTP en una solicitud. Este elemento no tiene efecto en una respuesta.

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

El elemento <Version> usa 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 establece el número de versión en 1.1:

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

Ejemplo 2

El siguiente comando usa una variable entre llaves para establecer 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 considera una plantilla de mensaje. Esto significa que un nombre de variable entre llaves se reemplazará en el entorno de ejecución por el valor de la variable a la que se hace referencia.

Solo puedes usar <Version> cuando se cumplan los siguientes criterios:

  • Tipo de mensaje: solicitud

Crea mensajes de solicitud personalizados

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

  • Accede a sus variables en otras políticas
  • Pásalo a un servicio externo

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

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

Según la configuración predeterminada, Apigee no hace nada con el mensaje de solicitud personalizado. Después de crearla, Apigee pasará a través del flujo con la solicitud original. Para usar la solicitud personalizada, agrega una política que use el mensaje de solicitud y haga referencia explícita al mensaje de solicitud recién creado en la configuración de esa política. Esto te permitirá pasar la solicitud personalizada a un extremo 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>

En este ejemplo, se dan las siguientes situaciones:

  • Crea un nuevo objeto de mensaje de solicitud llamado MyCustomRequest.
  • En MyCustomRequest, esta política:
    • Configura el parámetro de búsqueda address en el mensaje personalizado con el valor del parámetro de búsqueda addy de la solicitud entrante.
    • Establece el verbo HTTP como GET.
  • Establece <IgnoreUnresolvedVariables> en false. 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 ingresará un estado de falla en el flujo de la API.

Ejemplo 2

A continuación, se muestra otro ejemplo que muestra 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 nueva llamada partner.request. Luego, configura <Verb> en la solicitud nueva.

Puedes acceder a las diversas propiedades de un mensaje personalizado en otra política de 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 en el 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 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 Cómo solucionar 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
entities.UnresolvedVariable 500 Variable de plantilla de mensaje sin definir o fuera del alcance.
steps.httpmodifier.InvalidStatusCode 500 El valor resuelto del código de estado no es válido. Consulta la cadena del error para obtener más información.

Errores en la implementación

Estos errores pueden generarse cuando implementas un proxy que contiene esta política.

Nombre del error Causa Corregir
InvalidIndex Si el índice especificado en los elementos <Remove> de la política de HTTPModifier es 0 o un número negativo, la implementación del proxy de API falla.

Variables con fallas

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

Variables Donde Ejemplo
httpmodifier.POLICY_NAME.failed POLICY_NAME es el nombre especificado por el usuario de la política que generó la falla. 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"
   }
}

Ejemplo de regla de falla

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

Esquemas

Un esquema XML (.xsd) define cada tipo de política. Como referencia, los esquemas de políticas están disponibles en GitHub.