Esta página se aplica a Apigee y Apigee Hybrid.
Consulta la documentación de
Apigee Edge.
Como desarrollador que trabaja con Apigee, tus actividades de desarrollo principales consisten en configurar proxies de API que funcionen como proxies de APIs o servicios de backend. Este documento es una referencia de todos los elementos de configuración que puede usar al crear proxies de APIs.
Si estás aprendiendo a crear proxies de APIs, te recomendamos que empieces por el tema Desarrollar un proxy de APIs sencillo.
Edita la configuración del proxy de API con uno de los siguientes métodos:
- Usa la interfaz de usuario o la API de Apigee.
- Descarga el paquete de configuración del proxy de API, edítalo manualmente y sube la nueva configuración a Apigee, tal como se describe en Descargar y subir un paquete de configuración de proxy de API.
Estructura de directorios de configuración de proxies de APIs
La estructura del directorio de configuración del proxy de API se muestra a continuación:
Una configuración de proxy de API consta de los siguientes elementos:
Configuración base | Ajustes de configuración principales de un proxy de API. |
ProxyEndpoint | Ajustes de la conexión HTTP entrante (de las aplicaciones que envían solicitudes a Apigee), los flujos de solicitud y respuesta, y las asociaciones de políticas. |
TargetEndpoint | Ajustes de la conexión HTTP saliente (de Apigee al servicio de backend), flujos de solicitud y respuesta, y archivos adjuntos de políticas. |
Flows | Pipelines de solicitud y respuesta de ProxyEndpoint y TargetEndpoint a los que se pueden adjuntar políticas. |
Políticas | Archivos de configuración con formato XML que cumplen los esquemas de políticas de Apigee. |
Resources | Secuencias de comandos, archivos JAR y archivos XSLT a los que hacen referencia las políticas para ejecutar lógica personalizada. |
Configuración base
/apiproxy/weatherapi.xml
La configuración base de un proxy de API, que define el nombre del proxy de API. El nombre debe ser único en una organización.
Ejemplo de configuración:
<APIProxy name="weatherapi"> </APIProxy>
Elementos de configuración base
Nombre | Descripción | Predeterminado | ¿Es obligatorio? |
---|---|---|---|
APIProxy |
|||
name |
El nombre del proxy de API, que debe ser único en una organización. Los caracteres que puedes usar en el nombre son los siguientes:
A-Za-z0-9_- |
N/A | Sí |
revision |
Número de revisión de la configuración del proxy de API. No es necesario que definas explícitamente el número de revisión, ya que Apigee hace un seguimiento automático de la revisión actual del proxy de API. | N/A | No |
ConfigurationVersion |
Versión del esquema de configuración del proxy de API al que se ajusta este proxy de API. Actualmente, los únicos valores admitidos son majorVersion 4 y minorVersion 0. Este ajuste se puede usar en el futuro para habilitar la evolución del formato de proxy de API. | 4.0 | No |
Description |
Descripción textual del proxy de API. Si se proporciona, la descripción se mostrará en la interfaz de usuario de Apigee. | N/A | No |
DisplayName |
Nombre descriptivo que puede ser diferente del atributo name de la configuración del proxy de API. |
N/A | No |
Policies |
Lista de políticas del directorio /policies de este proxy de API. Normalmente, solo verás este elemento cuando el proxy de API se haya creado con la interfaz de usuario de Apigee.
Se trata de un simple ajuste del manifiesto, diseñado para proporcionar visibilidad sobre el contenido del proxy de la API. |
N/A | No |
ProxyEndpoints |
Lista de puntos finales de proxy en el directorio /proxies de este proxy de API. Normalmente, solo verás este elemento cuando el proxy de API se haya creado con la interfaz de usuario de Apigee. Se trata de un ajuste del manifiesto diseñado para proporcionar visibilidad sobre el contenido del proxy de la API. |
N/A | No |
Resources |
Lista de recursos (JavaScript, Python, Java y XSLT) del directorio /resources
de este proxy de API. Normalmente, solo verás este elemento cuando el proxy de API se haya creado con la interfaz de usuario de Apigee. Se trata de un simple ajuste del manifiesto diseñado para
proporcionar visibilidad sobre el contenido del proxy de la API. |
N/A | No |
Spec |
Identifica la especificación de OpenAPI asociada al proxy de API. El valor
se asigna a una URL o a una ruta de la tienda de especificaciones. |
N/A | No |
TargetServers |
Lista de servidores de destino a los que se hace referencia en los puntos de conexión de destino de este proxy de API. Normalmente, solo verá este elemento cuando el proxy de API se haya creado con Apigee. Se trata de un simple ajuste del manifiesto, diseñado para proporcionar visibilidad sobre el contenido del proxy de la API. | N/A | No |
TargetEndpoints |
Lista de puntos de conexión de destino del directorio /targets de este proxy de API. Normalmente, solo verás este elemento cuando el proxy de API se haya creado con la interfaz de usuario de Apigee. Se trata de un ajuste del manifiesto diseñado para proporcionar visibilidad sobre el contenido del proxy de la API. |
N/A | No |
ProxyEndpoint
En la siguiente imagen se muestra el flujo de solicitudes y respuestas:
/apiproxy/proxies/default.xml
La configuración de ProxyEndpoint define la interfaz de entrada (de cara al cliente) de un proxy de API. Cuando configuras un endpoint de proxy, estás configurando una red que define cómo deben invocar las aplicaciones cliente (aplicaciones) a la API proxy.
La siguiente configuración de ProxyEndpoint de ejemplo se almacenaría en
/apiproxy/proxies
:
<ProxyEndpoint name="default"> <PreFlow/> <Flows/> <PostFlow/> <HTTPProxyConnection> <BasePath>/weather</BasePath> <Properties/> </HTTPProxyConnection> <FaultRules/> <DefaultFaultRule/> <RouteRule name="default"> <TargetEndpoint>default</TargetEndpoint> </RouteRule> </ProxyEndpoint>
Los elementos de configuración obligatorios de un endpoint de proxy básico son los siguientes:
Elementos de configuración de ProxyEndpoint
Nombre | Descripción | Predeterminado | ¿Es obligatorio? | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ProxyEndpoint |
||||||||||||||||||
name |
Nombre del endpoint proxy. Debe ser único en la configuración del proxy de API cuando (en casos excepcionales) se definan varios ProxyEndpoints. Los caracteres que puedes usar en el nombre son los siguientes: A-Za-z0-9._\-$ % . |
N/A | Sí | |||||||||||||||
PreFlow |
Define las políticas del flujo PreFlow de una solicitud o una respuesta. | N/A | Sí | |||||||||||||||
Flows |
Define las políticas de los flujos condicionales de una solicitud o una respuesta.
|
N/A | Sí | |||||||||||||||
PostFlow |
Define las políticas del flujo PostFlow de una solicitud o una respuesta.
|
N/A | Sí | |||||||||||||||
HTTPProxyConnection |
Define la dirección de red y la ruta URI asociadas al proxy de API. | |||||||||||||||||
BasePath |
Cadena obligatoria que identifica de forma única la ruta de URI que usa Apigee para enrutar los mensajes entrantes al proxy de API adecuado. BasePath es un fragmento de URI (por ejemplo, Usar un comodín en las rutas base Puedes usar uno o varios comodines "*" en las rutas base de los proxies de API. Por ejemplo, una ruta base Importante: Apigee NO admite el uso de un comodín "*" como primer elemento de una ruta base. Por ejemplo, NO se admite lo siguiente: |
/ | Sí | |||||||||||||||
Properties |
Se puede definir un conjunto de ajustes de configuración HTTP opcionales como propiedades de un <ProxyEndpoint> . Entre las propiedades disponibles se incluyen las siguientes:
|
N/A | No | |||||||||||||||
FaultRules |
Define cómo reacciona el endpoint del proxy ante un error. Una regla de error especifica dos elementos:
Consulta Gestionar fallos. |
N/A | No | |||||||||||||||
DefaultFaultRule |
Gestiona los errores (del sistema, de transporte, de mensajería o de política) que no se gestionan explícitamente con otra regla de error. Consulta Gestionar fallos. |
N/A | No | |||||||||||||||
RouteRule |
Define el destino de los mensajes de solicitud entrantes después de que los procese la canalización de solicitudes de ProxyEndpoint. Normalmente, RouteRule apunta a un endpoint de destino con nombre, un IntegrationEndpoint o una URL. | |||||||||||||||||
Name |
Atributo obligatorio que proporciona un nombre para RouteRule. Los caracteres que puedes usar en el nombre son los siguientes: A-Za-z0-9._\-$ % . Por ejemplo, Cat2 %_ es un nombre válido. |
N/A | Sí | |||||||||||||||
Condition |
Instrucción condicional opcional que se usa para el enrutamiento dinámico en el tiempo de ejecución. Las RouteRules condicionales son útiles, por ejemplo, para habilitar el enrutamiento basado en contenido y admitir el control de versiones del backend. | N/A | No | |||||||||||||||
TargetEndpoint |
Cadena opcional que identifica una configuración de TargetEndpoint con nombre. Un punto de conexión de destino con nombre es cualquier punto de conexión de destino definido en el mismo proxy de API en el directorio Al asignar un nombre a un endpoint de destino, indicas dónde se deben reenviar los mensajes de solicitud después de que la canalización de solicitudes de ProxyEndpoint los haya procesado. Ten en cuenta que este ajuste es opcional. Un endpoint proxy puede llamar a una URL directamente. Por ejemplo, un recurso de JavaScript o Java, que funciona como cliente HTTP, puede realizar la tarea básica de un endpoint de destino, que consiste en reenviar solicitudes a un servicio de backend. |
N/A | No | |||||||||||||||
URL |
Cadena opcional que define una dirección de red saliente a la que llama el endpoint proxy, lo que evita cualquier configuración de TargetEndpoint que pueda estar almacenada en /targets . |
N/A | No |
Cómo configurar RouteRules
Un endpoint de destino con nombre hace referencia a un archivo de configuración de /apiproxy/targets
al que RouteRule reenvía una solicitud después de que el endpoint de proxy la haya procesado.
Por ejemplo, la siguiente RouteRule hace referencia a la configuración /apiproxy/targets/myTarget.xml
:
<RouteRule name="default"> <TargetEndpoint>myTarget</TargetEndpoint> </RouteRule>
Invocación directa de URL
Un endpoint proxy también puede invocar directamente un servicio de backend. La invocación directa de la URL omite cualquier configuración de TargetEndpoint con nombre en /apiproxy/targets
. Por este motivo, TargetEndpoint es una configuración de proxy de API opcional, aunque, en la práctica, no se recomienda la invocación directa desde el endpoint del proxy.
Por ejemplo, la siguiente RouteRule hace una llamada HTTP a http://api.mycompany.com/v2
.
<RouteRule name="default"> <URL>http://api.mycompany.com/v2</URL> </RouteRule>
Rutas condicionales
Las RouteRules se pueden encadenar para admitir el enrutamiento dinámico en el tiempo de ejecución. Las solicitudes entrantes se pueden enrutar a configuraciones de TargetEndpoint con nombre, directamente a URLs o a una combinación de ambas, en función de los encabezados HTTP, el contenido del mensaje, los parámetros de consulta o la información contextual, como la hora del día o la configuración regional.
Las RouteRules condicionales funcionan como otras instrucciones condicionales en Apigee. Consulta la referencia de condiciones y la referencia de variables de flujo.
Por ejemplo, la siguiente combinación de RouteRule evalúa primero la solicitud entrante para verificar el valor de un encabezado HTTP. Si el encabezado HTTP routeTo
tiene el valor TargetEndpoint1
, la solicitud se reenvía al endpoint de destino llamado TargetEndpoint1
. Si no es así, la solicitud entrante se reenvía a http://api.mycompany.com/v2
.
<RouteRule name="MyRoute"> <Condition>request.header.routeTo = "TargetEndpoint1"</Condition> <TargetEndpoint>TargetEndpoint1</TargetEndpoint> </RouteRule> <RouteRule name="default"> <URL>http://api.mycompany.com/v2</URL> </RouteRule>
Rutas nulas
Se puede definir un RouteRule nulo para admitir situaciones en las que no sea necesario reenviar el mensaje de solicitud al endpoint de destino. Esto resulta útil cuando el endpoint del proxy realiza todo el procesamiento necesario, por ejemplo, usando JavaScript para llamar a un servicio externo o recuperar datos de una búsqueda en el almacén de clave/valor de Apigee.
Por ejemplo, en el código siguiente se define una ruta nula:
<RouteRule name="GoNowhere"/>
Las rutas nulas condicionales pueden ser útiles. En el siguiente ejemplo, se configura una ruta nula para que se ejecute cuando una cabecera HTTP request.header.X-DoNothing
tenga un valor distinto de null
.
<RouteRule name="DoNothingOnDemand"> <Condition>request.header.X-DoNothing != null</Condition> </RouteRule>
Recuerda que las RouteRules se pueden encadenar, por lo que una ruta nula condicional suele ser un componente de un conjunto de RouteRules diseñado para admitir el enrutamiento condicional.
Un uso práctico de una ruta nula condicional sería para admitir el almacenamiento en caché. Si usas el valor de la variable definida por la política de caché, puedes configurar un proxy de API para que ejecute la ruta nula cuando se sirva una entrada desde la caché.
<RouteRule name="DoNothingUnlessTheCacheIsStale"> <Condition>lookupcache.LookupCache-1.cachehit is true</Condition> </RouteRule>
TargetEndpoint
Un punto final de destino es el equivalente de salida de un punto final de proxy. Un endpoint de destino funciona como cliente de un servicio o una API de backend: envía solicitudes y recibe respuestas.
Un proxy de API no tiene por qué tener ningún endpoint de destino. Los endpoints proxy se pueden configurar para llamar a URLs directamente. Un proxy de API sin endpoints de destino suele contener un endpoint de proxy que llama directamente a un servicio de backend o que está configurado para llamar a un servicio mediante Java o JavaScript.
Configuración de TargetEndpoint
/targets/default.xml
El endpoint de destino define la conexión saliente de Apigee a otro servicio o recurso.
A continuación, se muestra un ejemplo de configuración de TargetEndpoint:
<TargetEndpoint name="default"> <PreFlow/> <Flows/> <PostFlow/> <EventFlow/> <HTTPTargetConnection> <URL>http://mocktarget.apigee.net</URL> <SSLInfo/> <Authentication/> </HTTPTargetConnection> <FaultRules/> <DefaultFaultRule/> <ScriptTarget/> <LocalTargetConnection/> </TargetEndpoint>
Elementos de configuración de TargetEndpoint
Un endpoint de destino puede llamar a un destino de una de las siguientes formas:
- HTTPTargetConnection para llamadas HTTP o HTTPS
- LocalTargetConnection para la cadena de proxy a proxy local
Configure solo uno de ellos en un endpoint de destino.
Nombre | Descripción | Predeterminado | ¿Es obligatorio? |
---|---|---|---|
TargetEndpoint |
|||
name |
El nombre del punto de conexión de destino, que debe ser único en la configuración del proxy de API. El nombre del endpoint de destino se usa en la RouteRule de ProxyEndpoint para dirigir las solicitudes de procesamiento salientes. Los caracteres que puedes usar en el nombre
se limitan a los siguientes: A-Za-z0-9._\-$ % . |
N/A | Sí |
PreFlow |
Define las políticas del flujo PreFlow de una solicitud o una respuesta. | N/A | Sí |
Flows |
Define las políticas de los flujos condicionales de una solicitud o una respuesta.
|
N/A | Sí |
PostFlow |
Define las políticas del flujo PostFlow de una solicitud o una respuesta.
|
N/A | Sí |
EventFlow |
Define las políticas del flujo EventFlow de una respuesta. EventFlow se usa para transmitir eventos enviados por el servidor. Para obtener más información, consulta Eventos enviados por el servidor de streaming.
|
N/A | No |
HTTPTargetConnection |
Junto con sus elementos secundarios, especifica un recurso de backend al que se accede mediante HTTP. Si usas HTTPTargetConnection, no configures otros tipos de conexiones de destino (ScriptTarget o LocalTargetConnection).
Puedes usar el elemento secundario |
||
URL |
Define la dirección de red del servicio de backend al que reenvía los mensajes de solicitud el endpoint de destino. | N/A | No |
LoadBalancer |
Define una o varias configuraciones de TargetServer con nombre. Las configuraciones de TargetServer con nombre se pueden usar para el balanceo de carga, que define dos o más conexiones de configuración de endpoints. También puedes usar servidores de destino para desacoplar las configuraciones de proxy de API de las URLs de los endpoints de servicios backend concretos. |
N/A | No |
Properties |
Se puede definir un conjunto de ajustes de configuración HTTP opcionales como propiedades de un <TargetEndpoint> .
Usa la propiedad Por ejemplo: <Properties> <Property name="response.payload.parse.limit">15M</Property> </Properties> El límite mínimo configurable es de 10 M y el máximo es de 30 M. Si no se define la propiedad, el límite predeterminado es de 10 M. Para obtener más información, consulta Tamaño de la carga útil de los mensajes. |
N/A | No |
SSLInfo |
También puedes definir los ajustes de TLS/SSL en un endpoint de destino para controlar la conexión TLS/SSL entre el proxy de API y el servicio de destino. Consulta Configuración de TargetEndpoint de TLS/SSL. | N/A | No |
LocalTargetConnection |
Junto con sus elementos secundarios, especifica un recurso al que se puede acceder de forma local, sin tener en cuenta las características de la red, como el balanceo de carga y los procesadores de mensajes.
Para especificar el recurso de destino, incluya el elemento secundario APIProxy (con el elemento ProxyEndpoint) o el elemento secundario Path. Para obtener más información, consulta Crear cadenas entre proxies de APIs. Si usas LocalTargetConnection, no configures otros tipos de conexiones de destino (HTTPTargetConnection o ScriptTarget). |
||
APIProxy |
Especifica el nombre de un proxy de API que se va a usar como destino de las solicitudes. El proxy de destino debe estar en la misma organización y entorno que el proxy que envía las solicitudes. Esta es una alternativa al uso del elemento Path. | N/A | No |
ProxyEndpoint |
Se usa con APIProxy para especificar el nombre del endpoint proxy del proxy de destino. | N/A | No |
Path |
Especifica la ruta del punto de conexión de un proxy de API que se va a usar como destino de las solicitudes. El proxy de destino debe estar en la misma organización y entorno que el proxy que envía las solicitudes. Esta opción es una alternativa a usar APIProxy. | N/A | No |
FaultRules |
Define cómo reacciona el endpoint de destino ante un error. Una regla de error especifica dos elementos:
Consulta Gestionar fallos. |
N/A | No |
DefaultFaultRule |
Gestiona los errores (del sistema, de transporte, de mensajería o de política) que no se gestionan explícitamente mediante otra FaultRule. Consulta Gestionar fallos. |
N/A | No |
Uso del elemento <Authentication>
El uso del elemento <Authentication>
en <TargetEndpoint>
es idéntico al uso del elemento <Authentication>
en la política ServiceCallout. En <TargetEndpoint>
y ServiceCallout, <Authentication>
es un subelemento de <HttpTargetConnection>
. Para obtener más información, consulta el elemento Authentication
en la referencia de la política ServiceCallout.
Referencia de error del elemento <Authentication>
Si utilizas el elemento <Authentication>
, puedes consultar los posibles mensajes de error y los consejos para solucionar problemas de implementación y de tiempo de ejecución en la sección Errores de la documentación de la política ServiceCallout.
Ejemplos de elementos <Authentication>
En el siguiente ejemplo se muestra cómo llamar a un servicio implementado en Cloud Run como destino mediante el elemento Authentication
para generar un token de OpenID Connect necesario para autenticar la llamada:
<TargetEndpoint name="TargetEndpoint-1"> <HTTPTargetConnection> <Properties/> <URL>https://cloudrun-hostname.a.run.app/test</URL> <Authentication> <GoogleIDToken> <Audience>https://cloudrun-hostname.a.run.app/test</Audience> </GoogleIDToken> </Authentication> </HTTPTargetConnection> </TargetEndpoint>
En el siguiente ejemplo se muestra cómo llamar a un TargetService que apunta a Cloud Run mediante el elemento Authentication
para generar un token de OpenID Connect necesario para autenticar la llamada. El elemento HeaderName
añade el token de portador generado a un encabezado llamado
X-Serverless-Authorization
que se envía al sistema de destino. El encabezado Authorization
, si está presente, no se modifica y también se envía en la solicitud.
<TargetEndpoint name="TargetEndpoint-1"> <HTTPTargetConnection> <Authentication> <HeaderName>X-Serverless-Authorization</HeaderName> <GoogleIDToken> <Audience ref="flow.variable.audience">https://cloudrun-hostname.a.run.app</Audience> </GoogleIDToken> </Authentication> <LoadBalancer> <Server name="cloud-run-target" /> </LoadBalancer> </HTTPTargetConnection> </TargetEndpoint>
En el siguiente ejemplo se muestra cómo llamar a un TargetService que apunta al servicio Secret Manager de Google. En este ejemplo, el elemento GoogleAccessToken se configura para generar un token de autenticación de Google que autentique la solicitud de destino:
<HTTPTargetConnection> <Authentication> <GoogleAccessToken> <Scopes> <Scope>https://www.googleapis.com/auth/cloud-platform</Scope> </Scopes> </GoogleAccessToken> </Authentication> <URL> https://secretmanager.googleapis.com/v1/projects/project-id/secrets/secret-id </URL> </HTTPTargetConnection>
En el siguiente ejemplo se muestra cómo definir automáticamente la audiencia de GoogleIDToken. Si useTargetUrl
es true
y la variable a la que se hace referencia no se resuelve en una variable válida, se usa la URL del destino (sin incluir los parámetros de consulta) como audiencia.
Supongamos que la ruta de solicitud es /foobar
y la URL del servidor de destino es https://xyz.com
. En ese caso, la audiencia de GoogleIDToken se definirá automáticamente como https://xyz.com/foobar
.
<TargetEndpoint name="TargetEndpoint-1"> <HTTPTargetConnection> <Authentication> <GoogleIDToken> <Audience ref='myvariable' useTargetUrl="true"/> </GoogleIDToken> </Authentication> <LoadBalancer> <Server name="TS" /> </LoadBalancer> </HTTPTargetConnection> </TargetEndpoint>
Configuración de TargetEndpoint de TLS/SSL
Los endpoints de destino suelen tener que gestionar conexiones HTTPS con una infraestructura de backend heterogénea. Por este motivo, se admiten varios ajustes de configuración de TLS/SSL.
TLS/SSL Elementos de configuración de TargetEndpoint
Nombre | Descripción | Predeterminado | ¿Es obligatorio? |
---|---|---|---|
SSLInfo |
El bloque |
||
Enabled |
Si se define como
Sin embargo, si el bloque
Por el contrario, si hay un elemento |
falso | No |
Enforce |
Aplica un SSL estricto entre Apigee y el backend de destino. Si se le asigna el valor Si no se define o se define como Puede anular el campo |
false |
No |
TrustStore |
Un almacén de claves que contiene certificados de servidor raíz de confianza. Apigee tratará al peer remoto como de confianza si la cadena de certificados que envía termina en un certificado que se encuentra en este almacén de claves. |
N/A | No |
ClientAuthEnabled |
Si se define como Para habilitar TLS bidireccional, normalmente tienes que configurar un almacén de confianza y un almacén de claves en Apigee. |
false |
No |
KeyStore |
Un almacén de claves que contiene claves privadas usadas para la autenticación de clientes salientes | N/A | Sí (si ClientAuthEnabled es true) |
KeyAlias |
El alias de la clave privada que se usa para la autenticación de clientes saliente | N/A | Sí (si ClientAuthEnabled es true) |
IgnoreValidationErrors |
Indica si se ignoran los errores de validación. Si el sistema backend usa SNI y devuelve un certificado con un nombre distinguido (DN) de asunto que no coincide con el nombre de host, no hay forma de ignorar el error y la conexión falla. Nota: Si |
false |
No |
Ciphers |
Cifrados admitidos para TLS/SSL saliente. Si no se especifica ninguna, se permitirán todas las disponibles para la JVM. Para restringir las cifrados, añade los siguientes elementos con la lista de cifrados admitidos: <Ciphers> <Cipher>TLS_RSA_WITH_3DES_EDE_CBC_SHA</Cipher> <Cipher>TLS_RSA_WITH_DES_CBC_SHA</Cipher> </Ciphers> |
N/A | No |
Protocols |
Protocolos admitidos para TLS/SSL saliente. Si no se especifica ningún protocolo, se permitirán todos los protocolos disponibles para la JVM. Para restringir protocolos, especifícalos explícitamente. Por ejemplo, para permitir solo TLS v1.2 o TLS v1.3, haz lo siguiente: <Protocols> <Protocol>TLSv1.2</Protocol> <Protocol>TLSv1.3</Protocol> </Protocols> |
N/A | No |
CommonName |
Apigee compara el valor con el nombre común o los nombres alternativos del sujeto del certificado del peer remoto. |
N/A | No |
Especificar la aplicación de SSL a nivel de entorno
Si SSLInfo.Enforce
se define como true
o false
, el valor especificado anula cualquier opción de aplicación granular especificada en los bloques <SSLInfo>
de las configuraciones de TargetEndpoint o TargetServer.
Si SSLInfo.Enforce
no se ha definido, la aplicación de SSL se determina mediante los valores especificados con el elemento <Enforce>
en bloques <SSLInfo>
individuales. Para obtener más información, consulta la sección TLS/SSL
TargetEndpoint configuration (Configuración de TargetEndpoint de TLS/SSL).
En el siguiente ejemplo, SSLInfo.Enforce
se ha definido como true
. En el resultado, puede ver que se ha aplicado SSL en el entorno especificado.
VALUE=true
curl -Ss -v -X PUT \ "https://apigee.googleapis.com/v1/organizations/MYORG/environments/MYENV" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer TOKEN" \ -d '{ "name": "MYENV", "properties": { "property": [{ "name": "features.SSLInfo.Enforce", "value": "'"$VALUE"'" }] } }'
Resultado:
{ ... "properties": { "property": [ { "name": "features.SSLInfo.Enforce", "value": "true" } ] }, ... }
Endpoint de destino de ejemplo con la autenticación de cliente saliente habilitada
<TargetEndpoint name="default"> <HttpTargetConnection> <URL>https://myservice.com</URL> <SSLInfo> <Enabled>true</Enabled> <Enforce>true</Enforce> <ClientAuthEnabled>true</ClientAuthEnabled> <KeyStore>myKeystore</KeyStore> <KeyAlias>myKey</KeyAlias> <TrustStore>myTruststore</TrustStore> </SSLInfo> </HttpTargetConnection> </TargetEndpoint>
Para obtener instrucciones detalladas, consulta Opciones para configurar TLS.
Usar variables de flujo para definir valores de TLS/SSL de forma dinámica
También puedes definir dinámicamente los detalles de TLS/SSL para admitir requisitos de tiempo de ejecución flexibles. Por ejemplo, si tu proxy se conecta a dos destinos potencialmente diferentes (un destino de prueba y un destino de producción), puedes hacer que tu proxy de API detecte mediante programación a qué entorno está llamando y que defina dinámicamente las referencias al almacén de claves y al almacén de confianza adecuados. En el artículo de la comunidad de Apigee Dynamic SSLInfo for TargetEndpoint using variable reference se explica este caso práctico con más detalle y se proporcionan ejemplos de proxies de API que se pueden implementar.
En el siguiente ejemplo de cómo se definiría la etiqueta <SSLInfo>
en una configuración de TargetEndpoint, los valores se pueden proporcionar en tiempo de ejecución, por ejemplo, mediante una llamada Java, una política de JavaScript o una política AssignMessage. Usa las variables de mensaje que contengan los valores que quieras definir.
Las variables solo se pueden usar en los siguientes elementos.
<SSLInfo> <Enabled>{myvars.ssl.enabled}</Enabled> <ClientAuthEnabled>{myvars.ssl.client.auth.enabled}</ClientAuthEnabled> <KeyStore>{myvars.ssl.keystore}</KeyStore> <KeyAlias>{myvars.ssl.keyAlias}</KeyAlias> <TrustStore>{myvars.ssl.trustStore}</TrustStore> </SSLInfo>
Usar referencias para definir valores de TLS/SSL de forma dinámica
Al configurar un endpoint de destino que usa HTTPS, debes tener en cuenta el caso en el que caduque el certificado TLS/SSL o en el que un cambio en la configuración del sistema requiera que actualices el certificado.
Para obtener más información, consulta Gestionar certificados caducados.
Sin embargo, puede configurar el endpoint de destino para que use una referencia al almacén de claves o al almacén de confianza. La ventaja de usar una referencia es que puedes actualizarla para que apunte a otro almacén de claves o de confianza y, de esta forma, actualizar el certificado TLS/SSL sin tener que reiniciar los procesadores de mensajes.
Por ejemplo, a continuación se muestra un endpoint de destino que usa una referencia al almacén de claves:
<SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>false</ClientAuthEnabled> <KeyStore>ref://keystoreref</KeyStore> <KeyAlias>myKeyAlias</KeyAlias> </SSLInfo>
Usa la siguiente llamada a la API POST para crear la referencia llamada keystoreref
:
curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{env}/references" \ -X POST \ -H "Authorization: Bearer $TOKEN" \ -d '<ResourceReference name="keystoreref"> <Refers>myTestKeystore</Refers> <ResourceType>KeyStore</ResourceType> </ResourceReference>'
Donde $TOKEN
es tu token de acceso OAuth 2.0, tal como se describe en Obtener un token de acceso OAuth 2.0. Para obtener información sobre las opciones de curl
que se usan en este ejemplo, consulta Usar curl. Para ver una descripción de las variables de entorno que puedes usar, consulta Definir variables de entorno para solicitudes a la API de Apigee.
La referencia especifica el nombre del almacén de claves y su tipo.
Usa la siguiente llamada a la API GET para ver la referencia:
curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{env}/references/keystoreref" \ -H "Authorization: Bearer $TOKEN"
Donde $TOKEN
es tu token de acceso OAuth 2.0, tal como se describe en Obtener un token de acceso OAuth 2.0. Para obtener información sobre las opciones de curl
que se usan en este ejemplo, consulta Usar curl. Para ver una descripción de las variables de entorno que puedes usar, consulta Definir variables de entorno para solicitudes a la API de Apigee.
curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{env}/references/keystoreref" \ -H "Authorization: Bearer $TOKEN"
Donde $TOKEN
es tu token de acceso OAuth 2.0, tal como se describe en Obtener un token de acceso OAuth 2.0. Para obtener información sobre las opciones de curl
que se usan en este ejemplo, consulta Usar curl. Para ver una descripción de las variables de entorno que puedes usar, consulta Definir variables de entorno para solicitudes a la API de Apigee.
Para cambiar más adelante la referencia de forma que apunte a otro almacén de claves, asegúrate de que el alias tenga el mismo nombre y usa la siguiente llamada PUT:
curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{env}/references/keystoreref" \ -X PUT \ -H "Authorization: Bearer $TOKEN" \ -d '<ResourceReference name="keystoreref"> <Refers>myNewKeystore</Refers> <ResourceType>KeyStore</ResourceType> </ResourceReference>'
Donde $TOKEN
es tu token de acceso OAuth 2.0, tal como se describe en Obtener un token de acceso OAuth 2.0. Para obtener información sobre las opciones de curl
que se usan en este ejemplo, consulta Usar curl. Para ver una descripción de las variables de entorno que puedes usar, consulta Definir variables de entorno para solicitudes a la API de Apigee.
TargetEndpoint con balanceo de carga de destino
Los endpoints de destino admiten el balanceo de carga en varios servidores de destino con nombre mediante tres algoritmos de balanceo de carga.
Para obtener instrucciones detalladas, consulta el artículo sobre el balanceo de carga en servidores de backend.
IntegrationEndpoint
Un IntegrationEndpoint es un endpoint de destino que ejecuta específicamente integraciones de Apigee. Si has configurado un IntegrationEndpoint, Apigee envía el objeto request a la plataforma de integración de Apigee para que se ejecute. Para ejecutar la integración, además de configurar el IntegrationEndpoint, también debes añadir la política SetIntegrationRequest al flujo de tu proxy.
Puede configurar su integración para que se ejecute de forma síncrona o asíncrona
definiendo el elemento <AsyncExecution>
en la configuración de IntegrationEndpoint. Para obtener más información, consulta Ejecución síncrona y asíncrona.
Después de ejecutar la integración, Apigee guarda la respuesta en el mensaje de respuesta.
Configurar IntegrationEndpoint
Para configurar un endpoint de integración como endpoint de destino, añade el elemento IntegrationEndpoint a la configuración de ProxyEndpoint. A continuación, se muestra un ejemplo de configuración de ProxyEndpoint:
<ProxyEndpoint name="default"> <Description/> <FaultRules/> <PreFlow name="PreFlow"> <Request> <Step> <Name>my-set-integration-request-policy</Name> </Step> </Request> </PreFlow> <Flows/> <PostFlow name="PostFlow"/> <HTTPProxyConnection> <BasePath>/integration-endpoint-test</BasePath> <Properties/> </HTTPProxyConnection> <RouteRule name="default"> <IntegrationEndpoint>my-int-endpoint</IntegrationEndpoint> </RouteRule> </ProxyEndpoint>
En la configuración de ProxyEndpoint de ejemplo, Apigee realiza las siguientes tareas:
- En PreFlow, ejecuta la política llamada
my-set-integration-request-policy
, que define el objeto de solicitud de integración y las variables de flujo de integración. - Usa
my-int-endpoint
como endpoint de destino, tal como se especifica enRouteRule
. - Lee el objeto de solicitud de integración creado por
my-set-integration-request-policy
. - Envía la solicitud a la plataforma de integración de Apigee mediante el objeto de solicitud y las variables de flujo definidas por la política SetIntegrationRequest.
- Guarda la respuesta de la integración en el mensaje de respuesta.
El archivo XML que contiene la declaración <IntegrationEndpoint>
estará disponible en el directorio APIGEE_BUNDLE_DIRECTORY/apiproxy/integration-endpoints/
. Si creas tu proxy de API
con la opción Develop > API Proxies > CREATE NEW > Integration target
, Apigee
almacena la declaración en el archivo /apiproxy/integration-endpoints/default.xml
. Si creas el archivo XML del endpoint de integración desde la interfaz de usuario, puedes darle un nombre personalizado.
En el siguiente ejemplo se muestra la declaración del elemento <IntegrationEndpoint>
en el archivo XML:
<IntegrationEndpoint name="my-int-endpoint"> <AsyncExecution>false</AsyncExecution> </IntegrationEndpoint>
Elementos de configuración de IntegrationEndpoint
Nombre | Descripción | Predeterminado | ¿Es obligatorio? |
---|---|---|---|
IntegrationEndpoint |
|||
name |
Nombre del IntegrationEndpoint. Los caracteres que puedes usar en el nombre son los siguientes:
A-Za-z0-9._\-$ % |
N/A | Sí |
AsyncExecution |
Valor booleano que especifica si la integración debe ejecutarse en modo síncrono o asíncrono. Para obtener más información, consulta Ejecución síncrona y asíncrona. | falso | No |
Ejecución síncrona y asíncrona
Puedes configurar la integración para que se ejecute en modo síncrono o asíncrono. Para entender la diferencia entre los modos de ejecución síncrono y asíncrono, consulta <AsyncExecution>.
Usa el elemento <AsyncExecution>
dentro de </IntegrationEndpoint>
para especificar la ejecución síncrona o asíncrona. Si asignas el valor true
a <AsyncExecution>
, la integración se ejecuta de forma asíncrona. Si lo configuras como false
, la integración se ejecuta de forma síncrona.
En el siguiente ejemplo se asigna el valor true
a AsyncExecution
:
<IntegrationEndpoint name="my-int-endpoint"> <AsyncExecution>true</AsyncExecution> </IntegrationEndpoint>
Políticas
El directorio /policies
de un proxy de API contiene todas las políticas que se pueden adjuntar a los flujos del proxy de API.
Elementos de configuración de políticas
Nombre | Descripción | Predeterminado | ¿Es obligatorio? |
---|---|---|---|
Policy |
|||
name |
El nombre interno de la política. Los caracteres que puedes usar en el nombre son: También puedes usar el elemento |
N/A | Sí |
enabled |
Asigna el valor Selecciona |
true |
No |
continueOnError |
Asigna el valor Asigna el valor |
false |
No |
async |
Si se le asigna el valor Para usar el comportamiento asíncrono en los proxies de API, consulte Modelo de objetos de JavaScript. |
false |
No |
Adjunto de política
En la siguiente imagen se muestra la secuencia de ejecución de los flujos de proxy de API:
Como se muestra arriba:
Las políticas se adjuntan como pasos de procesamiento a los flujos de trabajo. El nombre de la política se usa para hacer referencia a la política que se va a aplicar como paso de procesamiento. El formato de un archivo adjunto de una política es el siguiente:
<Step><Name>MyPolicy</Name></Step>
Las políticas se aplican en el orden en el que se adjuntan a un flujo. Por ejemplo:
<Step><Name>FirstPolicy</Name></Step> <Step><Name>SecondPolicy</Name></Step>
Elementos de configuración de archivos adjuntos de políticas
Nombre | Descripción | Predeterminado | ¿Es obligatorio? |
---|---|---|---|
Step |
|||
Name |
Nombre de la política que debe ejecutar esta definición de paso. | N/A | Sí |
Condition |
Una instrucción condicional que determina si se aplica la política o no. Si una política tiene una condición asociada, solo se ejecuta si la instrucción condicional se evalúa como verdadera. | N/A | No |
Flows
ProxyEndpoint y TargetEndpoint definen un flujo de procesamiento de mensajes de solicitud y respuesta. Una canalización de procesamiento consta de un flujo de solicitudes y un flujo de respuestas. Cada flujo de solicitud y cada flujo de respuesta se dividen en un PreFlow, uno o varios flujos condicionales o con nombre opcionales y un PostFlow.
- PreFlow: siempre se ejecuta. Se ejecuta antes de cualquier flujo condicional.
- PostFlow: siempre se ejecuta. Se ejecuta después de cualquier flujo condicional.
Además, puedes añadir un PostClientFlow al endpoint del proxy, que se ejecuta después de que se devuelva la respuesta a la aplicación cliente que ha enviado la solicitud. Solo se puede adjuntar la política MessageLogging a este flujo. PostClientFlow reduce la latencia del proxy de API y hace que la información esté disponible para el registro, que no se calcula hasta que se devuelve la respuesta al cliente, como client.sent.start.timestamp
y client.sent.end.timestamp
.El flujo se usa principalmente para medir el intervalo de tiempo entre las marcas de tiempo de inicio y fin del mensaje de respuesta.
A continuación, se muestra un ejemplo de PostClientFlow con una política de registro de mensajes adjunta.
... <PostFlow name="PostFlow"> <Request/> <Response/> </PostFlow> <PostClientFlow> <Request/> <Response> <Step> <Name>Message-Logging-1</Name> </Step> </Response> </PostClientFlow> ...
El flujo de procesamiento del proxy de API ejecuta los flujos en la siguiente secuencia:
Request Pipeline:
- PreFlow de solicitud de proxy
- Flujos condicionales de solicitudes de proxy (opcional)
- Proxy Request PostFlow
- Target Request PreFlow
- Flujos condicionales de solicitudes de destino (opcional)
- Target Request PostFlow
Flujo de procesamiento de respuestas:
- Target Response PreFlow
- Flujos condicionales de respuesta objetivo (opcional)
- Target Response PostFlow
- PreFlow de respuesta de proxy
- Flujos condicionales de respuesta de proxy (opcional)
- Proxy Response PostFlow
- Respuesta de PostClientFlow (opcional)
Solo los flujos con políticas adjuntas deben configurarse en las configuraciones de ProxyEndpoint o TargetEndpoint. PreFlow y PostFlow solo deben especificarse en una configuración de ProxyEndpoint o TargetEndpoint cuando se deba aplicar una política durante el procesamiento de PreFlow o PostFlow.
A diferencia de los flujos condicionales, el orden de los elementos PreFlow y PostFlow no es importante. El proxy de API siempre ejecutará cada uno en el punto adecuado de la canalización, independientemente de dónde aparezcan en la configuración de Endpoint.
Flujos condicionales
Los endpoints de proxy y los endpoints de destino admiten un número ilimitado de flujos condicionales (también conocidos como flujos con nombre).
El proxy de API comprueba la condición especificada en el flujo condicional y, si se cumple, el proxy de API ejecuta los pasos de procesamiento del flujo condicional. Si no se cumple la condición, se omiten los pasos de procesamiento del flujo condicional. Los flujos condicionales se evalúan en el orden definido en el proxy de API y se ejecuta el primero cuya condición se cumpla.
Al definir flujos condicionales, puedes aplicar pasos de procesamiento en un proxy de API en función de lo siguiente:
- URI de solicitud
- Verbo HTTP (
GET
/PUT
/POST
/DELETE
) - Valor de un parámetro de consulta, un encabezado y un parámetro de formulario
- Muchos otros tipos de condiciones
Por ejemplo, el siguiente flujo condicional especifica que se ejecuta solo cuando la ruta del recurso de la solicitud es /accesstoken
. Cualquier solicitud entrante con la ruta /accesstoken
provoca que se ejecute este flujo, junto con las políticas que estén asociadas al flujo. Si la ruta de la solicitud no incluye el sufijo
/accesstoken
, el flujo no se ejecuta (aunque podría hacerlo otro flujo condicional).
<Flows> <Flow name="TokenEndpoint"> <Condition>proxy.pathsuffix MatchesPath "/accesstoken"</Condition> <Request> <Step> <Name>GenerateAccessToken</Name> </Step> </Request> </Flow> </Flows>
Elementos de configuración de flujo
Nombre | Descripción | Predeterminado | ¿Es obligatorio? |
---|---|---|---|
Flow |
Una canalización de procesamiento de solicitudes o respuestas definida por un endpoint de proxy o un endpoint de destino | ||
Name |
Nombre único del flujo. | N/A | Sí |
Condition |
Una instrucción condicional que evalúa una o varias variables para determinar si el resultado es verdadero o falso. Todos los flujos, excepto los tipos PreFlow y PostFlow predefinidos, deben definir una condición para su ejecución. Sin embargo, si incluyes un solo flujo sin una condición al final de una secuencia de flujos, actuará como la instrucción "Else" al final de la secuencia de flujos. | N/A | Sí |
Request |
La canalización asociada al procesamiento del mensaje de solicitud | N/A | No |
Response |
La canalización asociada al procesamiento de mensajes de respuesta | N/A | No |
Procesamiento de pasos
Apigee aplica el orden secuencial de los flujos condicionales. Los flujos condicionales
se ejecutan de arriba abajo. Se ejecuta el primer flujo condicional cuya condición se evalúa como true
y solo se ejecuta un flujo condicional.
Por ejemplo, en la siguiente configuración de flujo, cualquier solicitud entrante que no incluya el sufijo de ruta /first
o /second
hará que se ejecute ThirdFlow
, lo que aplicará la política llamada Return404
.
<Flows> <Flow name="FirstFlow"> <Condition>proxy.pathsuffix MatchesPath "/first"</Condition> <Request> <Step><Name>FirstPolicy</Name></Step> </Request> </Flow> <Flow name="SecondFlow"> <Condition>proxy.pathsuffix MatchesPath "/second"</Condition> <Request> <Step><Name>FirstPolicy</Name></Step> <Step><Name>SecondPolicy</Name></Step> </Request> </Flow> <Flow name="ThirdFlow"> <Request> <Step><Name>Return404</Name></Step> </Request> </Flow> </Flows>
Recursos
Los "recursos" (archivos de recursos que se usan en proxies de API) son secuencias de comandos, código y transformaciones XSL que se pueden adjuntar a flujos mediante políticas. Aparecen en la sección Secuencias de comandos del editor de proxy de la API en la interfaz de Apigee.
Consulta los tipos de recursos admitidos en el artículo sobre gestión de recursos.
Los recursos se pueden almacenar en un proxy de API, un entorno o una organización. En cada caso, se hace referencia a un recurso por su nombre en una política. Apigee resuelve el nombre pasando del proxy de API al entorno y, por último, al nivel de organización.
Se puede hacer referencia a un recurso almacenado a nivel de organización desde las políticas de cualquier entorno. Las políticas de un entorno pueden hacer referencia a los recursos almacenados en ese entorno. Un recurso almacenado a nivel de proxy de API solo puede hacer referencia a las políticas de ese proxy de API.