Referência de configuração de proxy de API,Referência de configuração de proxy de API

Esta página se aplica ao Apigee e ao Apigee híbrido .

Veja a documentação do Apigee Edge .

Como desenvolvedor que trabalha com a Apigee, suas principais atividades de desenvolvimento envolvem a configuração de proxies de API que funcionam como proxies para APIs ou serviços de back-end. Este documento é uma referência de todos os elementos de configuração disponíveis para você ao criar proxies de API.

Se você estiver aprendendo a criar proxies de API, é recomendável começar com o tópico Criando um proxy de API simples .

Edite sua configuração de proxy de API usando um dos seguintes métodos:

Estrutura de diretório de configuração do proxy da API

A estrutura do diretório de configuração do proxy da API é mostrada abaixo:

Exibe a estrutura de diretórios na qual apiproxy é a raiz. Diretamente abaixo do diretório apiproxy estão os diretórios de políticas, proxies, recursos e destinos, bem como o arquivo weatherapi.xml.

Uma configuração de proxy de API consiste no seguinte conteúdo:

Configuração base Definições de configuração primárias para um proxy de API.
Ponto de extremidade do proxy Configurações para a conexão HTTP de entrada (dos aplicativos solicitados para a Apigee), fluxos de solicitação e resposta e anexos de políticas.
Ponto final de destino Configurações para a conexão HTTP de saída (da Apigee para o serviço de backend), fluxos de solicitação e resposta e anexos de políticas.
Fluxos Pipelines de solicitação e resposta ProxyEndpoint e TargetEndpoint aos quais políticas podem ser anexadas.
Políticas Arquivos de configuração em formato XML que estão em conformidade com os esquemas de política da Apigee.
Recursos Scripts, arquivos JAR e arquivos XSLT referenciados por políticas para executar lógica personalizada.

Configuração base

/apiproxy/weatherapi.xml

A configuração básica para um proxy de API, que define o nome do proxy de API. O nome deve ser exclusivo dentro de uma organização.

Configuração de exemplo:

<APIProxy name="weatherapi">
</APIProxy>

Elementos de configuração básica

Nome Descrição Padrão Obrigatório?
APIProxy
name O nome do proxy da API, que deve ser exclusivo dentro de uma organização. Os caracteres que você pode usar no nome são restritos aos seguintes: A-Za-z0-9_- N / D Sim
revision O número de revisão da configuração do proxy da API. Não é necessário definir explicitamente o número de revisão, pois a Apigee rastreia automaticamente a revisão atual do proxy da API. N / D Não
ConfigurationVersion A versão do esquema de configuração do proxy da API à qual este proxy da API está em conformidade. Os únicos valores suportados atualmente são majorVersion 4 e minorVersion 0. Esta configuração poderá ser usada no futuro para permitir a evolução do formato do proxy da API. 4.0 Não
Description Uma descrição textual do proxy da API. Se fornecida, a descrição será exibida na interface do usuário da Apigee. N / D Não
DisplayName Um nome amigável que pode ser diferente do atributo name da configuração do proxy da API. N / D Não
Policies Uma lista de políticas no diretório /policies deste proxy de API. Normalmente, você só verá este elemento quando o proxy de API tiver sido criado usando a interface de usuário da Apigee. Esta é simplesmente uma configuração de manifesto , projetada para fornecer visibilidade ao conteúdo do proxy de API. N / D Não
ProxyEndpoints Uma lista de endpoints de proxy no diretório /proxies deste proxy de API. Normalmente, você só verá este elemento quando o proxy de API tiver sido criado usando a interface de usuário da Apigee. Esta é simplesmente uma configuração de manifesto , projetada para fornecer visibilidade ao conteúdo do proxy de API. N / D Não
Resources Uma lista de recursos (JavaScript, Python, Java, XSLT) no diretório /resources deste proxy de API. Normalmente, você só verá este elemento quando o proxy de API tiver sido criado usando a interface de usuário da Apigee. Esta é simplesmente uma configuração de manifesto , projetada para fornecer visibilidade ao conteúdo do proxy de API. N / D Não
Spec Identifica a especificação OpenAPI associada ao proxy da API. O valor é definido como uma URL ou um caminho no repositório de especificações.
N / D Não
TargetServers Uma lista de servidores de destino referenciados em quaisquer endpoints de destino deste proxy de API. Normalmente, você só verá este elemento quando o proxy de API tiver sido criado usando a Apigee. Esta é simplesmente uma configuração de manifesto , projetada para fornecer visibilidade ao conteúdo do proxy de API. N / D Não
TargetEndpoints Uma lista de endpoints de destino no diretório /targets deste proxy de API. Normalmente, você só verá este elemento quando o proxy de API tiver sido criado usando a interface de usuário da Apigee. Esta é simplesmente uma configuração de manifesto , projetada para fornecer visibilidade ao conteúdo do proxy de API. N / D Não

Ponto de extremidade do proxy

A imagem a seguir mostra o fluxo de solicitação/resposta:

Mostra um cliente chamando um serviço HTTP . A solicitação passa pelo endpoint do proxy e, em seguida, pelo endpoint de destino antes de ser processada pelo serviço HTTP. A resposta passa pelo endpoint de destino e, em seguida, pelo endpoint do proxy antes de ser retornada ao cliente.

/apiproxy/proxies/default.xml

A configuração ProxyEndpoint define a interface de entrada (voltada para o cliente) para um proxy de API. Ao configurar um endpoint de proxy, você está definindo uma configuração de rede que define como os aplicativos cliente ( apps ) devem invocar a API com proxy.

A seguinte configuração de exemplo do ProxyEndpoint seria armazenada em /apiproxy/proxies :

<ProxyEndpoint name="default">
  <PreFlow/>
  <Flows/>
  <PostFlow/>
  <HTTPProxyConnection>
    <BasePath>/weather</BasePath>
    <Properties/>
  </HTTPProxyConnection>
  <FaultRules/>
  <DefaultFaultRule/>
  <RouteRule name="default">
    <TargetEndpoint>default</TargetEndpoint>
  </RouteRule>
</ProxyEndpoint>

Os elementos de configuração necessários em um ponto de extremidade proxy básico são:

Elementos de configuração do ProxyEndpoint

Nome Descrição Padrão Obrigatório?
ProxyEndpoint
name O nome do ponto de extremidade do proxy. Deve ser exclusivo na configuração do proxy da API, quando (em casos raros) vários pontos de extremidade do proxy forem definidos. Os caracteres que você pode usar no nome são restritos aos seguintes: A-Za-z0-9._\-$ % . N / D Sim
PreFlow Define as políticas no fluxo PreFlow de uma solicitação ou resposta. N / D Sim
Flows
Define as políticas nos fluxos condicionais de uma solicitação ou resposta.
N / D Sim
PostFlow
Define as políticas no fluxo PostFlow de uma solicitação ou resposta.
N / D Sim
HTTPProxyConnection Define o endereço de rede e o caminho URI associado ao proxy da API.
BasePath

Uma string necessária que identifica exclusivamente o caminho do URI usado pelo Apigee para rotear mensagens recebidas para o proxy de API adequado.

O BasePath é um fragmento de URI (por exemplo /weather ) anexado à URL base de um proxy de API (por exemplo, http://apifactory-test.apigee.net ). O BasePath deve ser único dentro de um ambiente. A exclusividade é validada quando um proxy de API é gerado ou importado.

Usando um curinga em caminhos base

Você pode usar um ou mais curingas "*" nos caminhos base do proxy de API. Por exemplo, um caminho base /team/*/members permite que os clientes chamem https://[host]/team/ blue /members e https://[host]/team/ green /members sem que você precise criar novos proxies de API para oferecer suporte a novas equipes. Observe que /**/ não é suportado.

Importante: A Apigee NÃO oferece suporte ao uso do curinga "*" como o primeiro elemento de um caminho base. Por exemplo, NÃO há suporte para: /*/search . Iniciar o caminho base com "*" pode levar a erros inesperados devido à maneira como a Apigee identifica caminhos válidos.

/ Sim
Properties Um conjunto de configurações HTTP opcionais pode ser definido como propriedades de um <ProxyEndpoint> . As propriedades disponíveis incluem o seguinte:
  • request.queryparams.ignore.content.type.charset

    Use a propriedade request.queryparams.ignore.content.type.charset para informar ao proxy para ignorar o parâmetro charset do cabeçalho Content-Type ao processar a URL da solicitação. Por exemplo:

    <Properties>
      <Property name="request.queryparams.ignore.content.type.charset">true</Property>
    </Properties>

    A tabela a seguir mostra um exemplo de saída dependendo da configuração da propriedade charset e da presença do parâmetro charset do cabeçalho Content-Type .

    Configuração da propriedade Valor do cabeçalho Exemplo de saída
    charset=false charset não definido [email protected]
    charset=false charset=utf-8 john.doe [email protected]
    charset=true e nenhum parâmetro charset no cabeçalho. charset não definido [email protected]
    charset=true charset=utf-8 [email protected]
  • request.payload.parse.limit

    Use a propriedade request.payload.parse.limit para definir o tamanho máximo do payload que pode ser processado no fluxo de solicitação, em megabytes (M).

    Por exemplo:

    <Properties>
      <Property name="request.payload.parse.limit">30M</Property>
    </Properties>

    O limite mínimo configurável é 10 M e o máximo é 30 M. Se a propriedade não estiver definida, o limite padrão será 10 M.

    Para obter mais informações, consulte Tamanho da carga útil da mensagem .

N / D Não
FaultRules
Define como o ponto de extremidade do proxy reage a um erro. Uma regra de falha especifica dois itens:
  • Uma condição que especifica a falha a ser tratada com base na categoria, subcategoria ou nome predefinido da falha
  • Uma ou mais políticas que definem o comportamento da regra de falha para a Condição correspondente

Veja Lidando com falhas .

N / D Não
DefaultFaultRule

Lida com quaisquer erros (sistema, transporte, mensagens ou política) que não são explicitamente tratados por outra regra de falha.

Veja Lidando com falhas .

N / D Não
RouteRule Define o destino das mensagens de solicitação de entrada após o processamento pelo pipeline de solicitação ProxyEndpoint. Normalmente, a RouteRule aponta para um endpoint de destino nomeado, um IntegrationEndpoint ou uma URL.
Name Atributo obrigatório, que fornece um nome para a RouteRule. Os caracteres que você pode usar no nome são restritos aos seguintes: A-Za-z0-9._\-$ % . Por exemplo, Cat2 %_ é um nome válido. N / D Sim
Condition Uma instrução condicional opcional usada para roteamento dinâmico em tempo de execução. Regras de Rota Condicionais são úteis, por exemplo, para habilitar o roteamento baseado em conteúdo para oferecer suporte ao controle de versão de back-end. N / D Não
TargetEndpoint

Uma string opcional que identifica uma configuração TargetEndpoint nomeada. Um endpoint de destino nomeado é qualquer endpoint de destino definido no mesmo proxy de API no diretório /targets .

Ao nomear um endpoint de destino, você indica para onde as mensagens de solicitação devem ser encaminhadas após o processamento pelo pipeline de solicitações ProxyEndpoint. Observe que esta é uma configuração opcional.

Um endpoint proxy pode chamar uma URL diretamente. Por exemplo, um recurso JavaScript ou Java, atuando como um cliente HTTP, pode executar a função básica de um endpoint de destino, que é encaminhar solicitações para um serviço de backend.

N / D Não
URL Uma string opcional que define um endereço de rede de saída chamado pelo ponto de extremidade do proxy, ignorando quaisquer configurações do TargetEndpoint que possam estar armazenadas em /targets N / D Não

Como configurar RouteRules

Um ponto de extremidade de destino nomeado refere-se a um arquivo de configuração em /apiproxy/targets para o qual o RouteRule encaminha uma solicitação após o processamento pelo ponto de extremidade do proxy.

Por exemplo, a seguinte RouteRule se refere à configuração /apiproxy/targets/myTarget.xml :

<RouteRule name="default">
  <TargetEndpoint>myTarget</TargetEndpoint>
</RouteRule>

Invocação direta de URL

Um ponto de extremidade proxy também pode invocar diretamente um serviço de backend. A invocação direta de URL ignora qualquer configuração TargetEndpoint nomeada em /apiproxy/targets . Por esse motivo, TargetEndpoint é uma configuração de proxy de API opcional, embora, na prática, a invocação direta do ponto de extremidade proxy não seja recomendada.

Por exemplo, a seguinte RouteRule faz uma chamada HTTP para http://api.mycompany.com/v2 .

<RouteRule name="default">
  <URL>http://api.mycompany.com/v2</URL> 
</RouteRule>

Rotas condicionais

RouteRules podem ser encadeadas para oferecer suporte ao roteamento dinâmico em tempo de execução. Requisições de entrada podem ser roteadas para configurações de TargetEndpoint nomeadas, diretamente para URLs ou para uma combinação dos dois, com base em cabeçalhos HTTP, conteúdo da mensagem, parâmetros de consulta ou informações contextuais, como hora do dia, localidade, etc.

As RouteRules condicionais funcionam como outras instruções condicionais na Apigee. Consulte a referência de Condições e a referência de Variáveis ​​de fluxo .

Por exemplo, a seguinte combinação de RouteRule avalia primeiro a solicitação de entrada para verificar o valor de um cabeçalho HTTP. Se o cabeçalho HTTP routeTo tiver o valor TargetEndpoint1 , a solicitação será encaminhada para o endpoint de destino denominado TargetEndpoint1 . Caso contrário, a solicitação de entrada será encaminhada para 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>

Rotas nulas

Uma RouteRule nula pode ser definida para oferecer suporte a cenários em que a mensagem de solicitação não precisa ser encaminhada ao endpoint de destino. Isso é útil quando o endpoint do proxy realiza todo o processamento necessário, por exemplo, usando JavaScript para chamar um serviço externo ou recuperando dados de uma consulta para o repositório de chaves/valores da Apigee.

Por exemplo, o seguinte define uma Rota nula:

<RouteRule name="GoNowhere"/>

Rotas nulas condicionais podem ser úteis. No exemplo a seguir, uma rota nula é configurada para ser executada quando um cabeçalho HTTP request.header.X-DoNothing tem um valor diferente de null .

<RouteRule name="DoNothingOnDemand">
  <Condition>request.header.X-DoNothing != null</Condition>
</RouteRule>

Lembre-se de que RouteRules podem ser encadeadas, portanto, uma Route nula condicional normalmente seria um componente de um conjunto de RouteRules projetadas para oferecer suporte ao roteamento condicional.

Um uso prático de uma Rota nula condicional seria o suporte ao cache. Usando o valor da variável definida pela política de cache, você pode configurar um proxy de API para executar a Rota nula quando uma entrada for fornecida pelo cache.

<RouteRule name="DoNothingUnlessTheCacheIsStale">
  <Condition>lookupcache.LookupCache-1.cachehit is true</Condition>
</RouteRule>

Ponto final de destino

Mostra um cliente chamando um serviço HTTP . A solicitação passa pelo endpoint do proxy e, em seguida, pelo endpoint de destino antes de ser processada pelo serviço HTTP. A resposta passa pelo endpoint de destino e, em seguida, pelo endpoint do proxy antes de ser retornada ao cliente.

Um endpoint de destino é o equivalente de saída de um endpoint proxy. Um endpoint de destino funciona como cliente para um serviço de backend ou API — ele envia solicitações e recebe respostas.

Um proxy de API não precisa ter endpoints de destino. Os endpoints de proxy podem ser configurados para chamar URLs diretamente. Um proxy de API sem endpoints de destino geralmente contém um endpoint de proxy que chama diretamente um serviço de backend ou que está configurado para chamar um serviço usando Java ou JavaScript.

Configuração do TargetEndpoint

/targets/default.xml

O ponto de extremidade de destino define a conexão de saída do Apigee para outro serviço ou recurso.

Aqui está um exemplo de configuração do TargetEndpoint:

<TargetEndpoint name="default">
  <PreFlow/>
  <Flows/>
  <PostFlow/>
  <HTTPTargetConnection>
    <URL>http://mocktarget.apigee.net</URL>
    <SSLInfo/>
    <Authentication/>
  </HTTPTargetConnection>
  <FaultRules/>
  <DefaultFaultRule/>
  <ScriptTarget/>
  <LocalTargetConnection/>
</TargetEndpoint>

Elementos de configuração do TargetEndpoint

Um ponto de extremidade de destino pode chamar um destino de uma das seguintes maneiras:

  • HTTPTargetConnection para chamadas HTTP ou HTTPS
  • LocalTargetConnection para encadeamento de proxy para proxy local

Configure apenas um deles em um ponto de extremidade de destino.

Nome Descrição Padrão Obrigatório?
TargetEndpoint
name O nome do endpoint de destino, que deve ser exclusivo na configuração do proxy da API. O nome do endpoint de destino é usado na RouteRule do ProxyEndpoint para direcionar solicitações para processamento de saída. Os caracteres que você tem permissão para usar no nome são restritos aos seguintes: A-Za-z0-9._\-$ % . N / D Sim
PreFlow Define as políticas no fluxo PreFlow de uma solicitação ou resposta. N / D Sim
Flows
Define as políticas nos fluxos condicionais de uma solicitação ou resposta.
N / D Sim
PostFlow
Define as políticas no fluxo PostFlow de uma solicitação ou resposta.
N / D Sim
HTTPTargetConnection

Com seus elementos filhos, especifica um recurso de backend acessado via HTTP.

Se você usar HTTPTargetConnection, não configure outros tipos de conexões de destino (ScriptTarget ou LocalTargetConnection).

Você pode usar o elemento filho <Authentication> para fazer chamadas autenticadas para serviços do Google ou serviços personalizados em execução em determinados produtos do Google Cloud, como Cloud Functions e Cloud Run . O uso do elemento <Authentication> requer etapas de configuração e implantação descritas em Usando a autenticação do Google . Com a configuração correta, a política cria um token de autenticação para você e o adiciona à solicitação de serviço. Consulte também Uso do elemento <Authentication> .

URL Define o endereço de rede do serviço de backend para o qual o endpoint de destino encaminha mensagens de solicitação. N / D Não
LoadBalancer

Define uma ou mais configurações de TargetServer nomeadas. Configurações de TargetServer nomeadas podem ser usadas para balanceamento de carga, definindo duas ou mais conexões de configuração de endpoint.

Você também pode usar servidores de destino para desacoplar configurações de proxy de API de URLs de pontos de extremidade de serviço de backend concretos.

N / D Não
Properties Um conjunto de configurações HTTP opcionais pode ser definido como propriedades de um <TargetEndpoint> .

Use a propriedade response.payload.parse.limit para definir o tamanho máximo do payload que pode ser processado no fluxo de resposta, em megabytes (M).

Por exemplo:

<Properties>
  <Property name="response.payload.parse.limit">15M</Property>
</Properties>

O limite mínimo configurável é 10 M e o máximo é 30 M. Se a propriedade não estiver definida, o limite padrão será 10 M.

Para obter mais informações, consulte Tamanho da carga útil da mensagem .

N / D Não
SSLInfo Opcionalmente, defina as configurações de TLS/SSL em um endpoint de destino para controlar a conexão TLS/SSL entre o proxy da API e o serviço de destino. Consulte Configuração de TLS/SSL no TargetEndpoint . N / D Não
LocalTargetConnection Com seus elementos filhos, especifica um recurso a ser alcançado localmente, ignorando características de rede, como balanceamento de carga e processadores de mensagens.

Para especificar o recurso de destino, inclua o elemento filho APIProxy (com o elemento ProxyEndpoint) ou o elemento filho Path.

Para obter mais informações, consulte Encadeando proxies de API .

Se você usar LocalTargetConnection, não configure outros tipos de conexões de destino (HTTPTargetConnection ou ScriptTarget).

APIProxy Especifica o nome de um proxy de API a ser usado como destino para solicitações. O proxy de destino deve estar na mesma organização e ambiente que o proxy que envia as solicitações. Esta é uma alternativa ao uso do elemento Path. N / D Não
ProxyEndpoint Usado com APIProxy para especificar o nome do ponto de extremidade do proxy de destino. N / D Não
Path Especifica o caminho do endpoint de um proxy de API a ser usado como destino para solicitações. O proxy de destino deve estar na mesma organização e ambiente que o proxy que envia as solicitações. Esta é uma alternativa ao uso do APIProxy. N / D Não
FaultRules
Define como o endpoint de destino reage a um erro. Uma regra de falha especifica dois itens:
  • Uma condição que especifica a falha a ser tratada com base na categoria, subcategoria ou nome predefinido da falha
  • Uma ou mais políticas que definem o comportamento da regra de falha para a Condição correspondente

Veja Lidando com falhas .

N / D Não
DefaultFaultRule

Lida com quaisquer erros (sistema, transporte, mensagens ou política) que não são explicitamente tratados por outra FaultRule.

Veja Lidando com falhas .

N / D Não

Uso do elemento <Authentication>

O uso do elemento <Authentication> em <TargetEndpoint> é idêntico ao uso do elemento <Authentication> na política ServiceCallout. Tanto em <TargetEndpoint> quanto em ServiceCallout, <Authentication> é um subelemento de <HttpTargetConnection> . Para obter detalhes, consulte o elemento Authentication no Referência de política do ServiceCallout.

Referência de erro do elemento <Authentication>

Se estiver usando o elemento <Authentication> , você poderá encontrar possíveis mensagens de erro e dicas de solução de problemas para erros de implantação e tempo de execução na seção Erros da documentação da política ServiceCallout.

Exemplos de elementos <Authentication>

O exemplo a seguir mostra como chamar um serviço implantado no Cloud Run como destino usando o elemento Authentication para gerar um token OpenID Connect necessário para autenticar a chamada:

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

O exemplo a seguir mostra como chamar um TargetService que aponta para o Cloud Run usando o elemento Authentication para gerar um token OpenID Connect necessário para autenticar a chamada. O elemento HeaderName adiciona o token de portador gerado a um cabeçalho denominado X-Serverless-Authorization , que é enviado ao sistema de destino. O cabeçalho Authorization , se presente, permanece inalterado e também é enviado na solicitação.

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

O exemplo a seguir mostra como chamar um TargetService que aponta para o serviço Gerenciador de Segredos do Google. Neste exemplo, o elemento GoogleAccessToken é configurado para gerar um Token de Autenticação do Google para autenticar a solicitação 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>

O exemplo a seguir mostra como definir automaticamente o público do GoogleIDToken. Quando useTargetUrl for true e a variável referenciada não for resolvida para uma variável válida, a URL do destino (excluindo parâmetros de consulta) será usada como público. Suponha que o caminho da solicitação seja /foobar e a URL do servidor de destino seja https://xyz.com , o público do GoogleIDToken será automaticamente definido 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>

Configuração do TargetEndpoint TLS/SSL

Os endpoints de destino geralmente precisam gerenciar conexões HTTPS com infraestrutura de backend heterogênea. Por esse motivo, diversas definições de configuração TLS/SSL são suportadas.

Elementos de configuração do TLS/SSL TargetEndpoint

Nome Descrição Padrão Obrigatório?
SSLInfo

O bloco <SSLInfo> pode ser usado para TLS/SSL unidirecional e bidirecional.

Enabled

Quando definido como true , especifica que a conexão de destino deve usar o protocolo SSL de acordo com quaisquer outros parâmetros especificados neste bloco <SSLInfo> . Quando definido como false , especifica que a conexão de destino não deve usar SSL.

No entanto, se o bloco <HTTPTargetConnection> contiver um elemento <URL> que seja avaliado como uma string que comece com https:// , o protocolo SSL será usado mesmo que <Enabled> seja falso. Nesse caso, todo o bloco <SSLInfo> será ignorado.

Por outro lado, se houver um elemento <URL> que comece com http:// , o protocolo SSL não será usado mesmo que <Enabled> seja verdadeiro.

falso Não
Enforce

Aplica SSL estrito entre a Apigee e o backend de destino.

Se definido como true , as conexões falharão para destinos com certificados inválidos, certificados expirados, certificados autoassinados, certificados com incompatibilidade de nome de host e certificados com raiz não confiável. Um código de falha 4xx ou 5xx é retornado.

Se não definido ou definido como false , o resultado das conexões com backends de destino com certificados problemáticos dependerá da configuração de <IgnoreValidationErrors> (veja abaixo). Uma resposta de sucesso ( 2xx ) pode ocorrer sob certas condições, se <IgnoreValidationErrors> for definido como true .

Você pode substituir o campo Enforce no nível do ambiente pelo sinalizador de recurso SSLInfo.Enforce . Consulte Especificando a aplicação de SSL no nível do ambiente .

false Não
TrustStore

Um keystore contendo certificados confiáveis ​​do servidor raiz. A Apigee tratará o peer remoto como confiável se a cadeia de certificados enviada terminar em um certificado contido neste keystore.

N / D Não
ClientAuthEnabled

Se definido como true , habilita o TLS bidirecional (também conhecido como TLS mútuo ou mTLS) entre a Apigee e o peer remoto - o cliente da API ou o backend de destino.

Habilitar o TLS bidirecional normalmente requer que você configure um truststore e um keystore no Apigee.

false Não
KeyStore Um keystore contendo chaves privadas usadas para autenticação de cliente de saída N / D Sim (se ClientAuthEnabled for verdadeiro)
KeyAlias O alias da chave privada usada para autenticação de cliente de saída N / D Sim (se ClientAuthEnabled for verdadeiro)
IgnoreValidationErrors

Indica se erros de validação são ignorados. Se o sistema de backend usar SNI e retornar um certificado com um Nome Distinto (DN) de assunto que não corresponde ao nome do host, não há como ignorar o erro e a conexão falha.

Nota : Se <Enforce> for definido como true , o valor de <IgnoreValidationErrors> será ignorado.

false Não
Ciphers

Cifras suportadas para TLS/SSL de saída. Se nenhuma cifra for especificada, todas as cifras disponíveis para a JVM serão permitidas.

Para restringir cifras, adicione os seguintes elementos listando as cifras suportadas:

<Ciphers>
 <Cipher>TLS_RSA_WITH_3DES_EDE_CBC_SHA</Cipher>    
 <Cipher>TLS_RSA_WITH_DES_CBC_SHA</Cipher>
</Ciphers>
N / D Não
Protocols

Protocolos suportados para TLS/SSL de saída. Se nenhum protocolo for especificado, todos os protocolos disponíveis para a JVM serão permitidos.

Para restringir protocolos, especifique-os explicitamente. Por exemplo, para permitir apenas TLS v1.2 ou TLS v1.3:

<Protocols>
 <Protocol>TLSv1.2</Protocol>
 <Protocol>TLSv1.3</Protocol>
</Protocols>
N / D Não
CommonName

A Apigee verifica o valor aqui em relação ao CN (Nome Comum) ou SANs (Nomes Alternativos de Assunto) no certificado do peer remoto.

N / D Não

Especificando a aplicação de SSL no nível do ambiente

Se SSLInfo.Enforce for definido como true ou false , o valor especificado substituirá quaisquer opções de aplicação granular especificadas nos blocos <SSLInfo> nas configurações TargetEndpoint ou TargetServer.

Se SSLInfo.Enforce não estiver definido, a aplicação do SSL será determinada por quaisquer valores especificados usando o elemento <Enforce> dentro de blocos <SSLInfo> individuais. Para obter mais informações, consulte a configuração do TargetEndpoint TLS/SSL.

No exemplo a seguir, SSLInfo.Enforce está definido como true . Na saída resultante, você pode ver que o SSL é aplicado no ambiente 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"'"
            }]
        }
    }'
  

Saída:

{
  ...
  "properties": {
    "property": [
      {
        "name": "features.SSLInfo.Enforce",
        "value": "true"
      }
    ]
  },
  ...
}

Exemplo de ponto de extremidade de destino com autenticação de cliente de saída 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 obter instruções detalhadas, consulte Opções para configurar TLS .

Usando variáveis ​​de fluxo para definir valores TLS/SSL dinamicamente

Você também pode definir dinamicamente os detalhes de TLS/SSL para atender a requisitos de tempo de execução flexíveis. Por exemplo, se o seu proxy se conectar a dois destinos potencialmente diferentes (um destino de teste e um destino de produção), você poderá fazer com que o proxy de API detecte programaticamente qual ambiente está chamando e defina dinamicamente as referências ao keystore e ao truststore apropriados. O artigo da Comunidade Apigee "Dynamic SSLInfo for TargetEndpoint using variable reference" explica esse cenário com mais detalhes e fornece exemplos de proxy de API implantáveis.

No exemplo a seguir de como a tag <SSLInfo> seria definida em uma configuração TargetEndpoint, os valores podem ser fornecidos em tempo de execução, por exemplo, por uma chamada Java, uma política JavaScript ou uma política AssignMessage . Use as variáveis ​​de mensagem que contêm os valores que você deseja definir.

Variáveis ​​são permitidas somente nos seguintes 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>

Usando referências para definir valores TLS/SSL dinamicamente

Ao configurar um ponto de extremidade de destino que usa HTTPS, você deve considerar o caso em que o certificado TLS/SSL expira ou uma alteração na configuração do sistema exige que você atualize o certificado.

Para obter mais informações, consulte Manipulando certificados expirados .

No entanto, você pode, opcionalmente, configurar o endpoint de destino para usar uma referência ao keystore ou truststore. A vantagem de usar uma referência é que você pode atualizá-la para apontar para um keystore ou truststore diferente e atualizar o certificado TLS/SSL sem precisar reiniciar os Processadores de Mensagens.

Por exemplo, abaixo é mostrado um ponto de extremidade de destino que usa uma referência ao keystore:

<SSLInfo>
  <Enabled>true</Enabled>
  <ClientAuthEnabled>false</ClientAuthEnabled>
  <KeyStore>ref://keystoreref</KeyStore>
  <KeyAlias>myKeyAlias</KeyAlias>
</SSLInfo>

Use a seguinte chamada de API POST para criar a referência chamada keystoreref :

curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{org}/references" \
  -X POST \
  -H "Authorization: Bearer $TOKEN" \
  -d '<ResourceReference name="keystoreref">
    <Refers>myTestKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
</ResourceReference>'

Onde $TOKEN é definido como seu token de acesso OAuth 2.0, conforme descrito em Como obter um token de acesso OAuth 2.0 . Para obter informações sobre as opções curl usadas neste exemplo, consulte Usando curl . Para obter uma descrição das variáveis ​​de ambiente usadas, consulte Definindo variáveis ​​de ambiente para solicitações da API da Apigee .

A referência especifica o nome do keystore e seu tipo.

Use a seguinte chamada de API GET para visualizar a referência:

curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{org}/references/keystoreref" \
  -H "Authorization: Bearer $TOKEN"

Onde $TOKEN é definido como seu token de acesso OAuth 2.0, conforme descrito em Como obter um token de acesso OAuth 2.0 . Para obter informações sobre as opções curl usadas neste exemplo, consulte Usando curl . Para obter uma descrição das variáveis ​​de ambiente usadas, consulte Definindo variáveis ​​de ambiente para solicitações da API da Apigee .

curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{org}/references/keystoreref" \
  -H "Authorization: Bearer $TOKEN"

Onde $TOKEN é definido como seu token de acesso OAuth 2.0, conforme descrito em Como obter um token de acesso OAuth 2.0 . Para obter informações sobre as opções curl usadas neste exemplo, consulte Usando curl . Para obter uma descrição das variáveis ​​de ambiente usadas, consulte Definindo variáveis ​​de ambiente para solicitações da API da Apigee .

Para alterar posteriormente a referência para apontar para um keystore diferente, garantindo que o alias tenha o mesmo nome, use a seguinte chamada PUT:

curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{org}/references/keystoreref" \
  -X PUT \
  -H "Authorization: Bearer $TOKEN" \
  -d '<ResourceReference name="keystoreref">
    <Refers>myNewKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
  </ResourceReference>'

Onde $TOKEN é definido como seu token de acesso OAuth 2.0, conforme descrito em Como obter um token de acesso OAuth 2.0 . Para obter informações sobre as opções curl usadas neste exemplo, consulte Usando curl . Para obter uma descrição das variáveis ​​de ambiente usadas, consulte Definindo variáveis ​​de ambiente para solicitações da API da Apigee .

TargetEndpoint com balanceamento de carga de destino

Os endpoints de destino oferecem suporte ao balanceamento de carga entre vários servidores de destino nomeados usando três algoritmos de balanceamento de carga.

Para obter instruções detalhadas, consulte Balanceamento de carga entre servidores de backend .

Ponto de extremidade de integração

Um IntegrationEndpoint é um endpoint de destino que executa especificamente integrações da Apigee . Se você configurou um IntegrationEndpoint, a Apigee envia o objeto de solicitação para a Plataforma de Integração da Apigee para execução. Para executar sua integração, além de configurar o IntegrationEndpoint, você também precisa adicionar a política SetIntegrationRequest ao seu fluxo de proxy.

Você pode configurar sua integração para ser executada de forma síncrona ou assíncrona definindo o elemento <AsyncExecution> na configuração IntegrationEndpoint. Para obter mais informações, consulte Execução síncrona vs. assíncrona . Após executar a integração, a Apigee salva a resposta na mensagem de resposta .

Configurando o IntegrationEndpoint

Para configurar um endpoint de integração como seu endpoint de destino, adicione o elemento IntegrationEndpoint à sua configuração ProxyEndpoint. A seguir, um exemplo de configuração 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>

Na configuração de exemplo do ProxyEndpoint, a Apigee executa as seguintes tarefas:

  1. No PreFlow, executa a política chamada my-set-integration-request-policy , que define o objeto de solicitação de integração e as variáveis ​​de fluxo de integração.
  2. Usa my-int-endpoint como o ponto de extremidade de destino, conforme especificado em RouteRule .
  3. Lê o objeto de solicitação de integração criado por my-set-integration-request-policy .
  4. Envia a solicitação para a plataforma de integração da Apigee usando o objeto de solicitação e as variáveis ​​de fluxo definidas pela política SetIntegrationRequest.
  5. Salva a resposta da integração na mensagem de resposta.

O arquivo XML contendo a declaração <IntegrationEndpoint> estará disponível no diretório APIGEE_BUNDLE_DIRECTORY /apiproxy/integration-endpoints/ . Se você criar seu proxy de API usando a opção Develop > API Proxies > CREATE NEW > Integration target , a Apigee armazenará a declaração no arquivo /apiproxy/integration-endpoints/default.xml . Se você criar o XML do endpoint de integração a partir da interface do usuário, poderá fornecer um nome personalizado para o arquivo XML.

O exemplo a seguir mostra a declaração do elemento <IntegrationEndpoint> no arquivo XML:

<IntegrationEndpoint name="my-int-endpoint">
    <AsyncExecution>false</AsyncExecution>
</IntegrationEndpoint>

Elementos de configuração do IntegrationEndpoint

Nome Descrição Padrão Obrigatório?
IntegrationEndpoint
name O nome do IntegrationEndpoint. Os caracteres que você pode usar no nome são restritos a: A-Za-z0-9._\-$ % N / D Sim
AsyncExecution Um valor booleano que especifica se a integração deve ser executada em modo síncrono ou assíncrono. Para obter mais informações, consulte Execução síncrona vs. assíncrona . falso Não

Execução síncrona vs. assíncrona

Você pode configurar a integração para ser executada no modo síncrono ou assíncrono. Para entender a diferença entre os modos de execução síncrono e assíncrono, consulte <AsyncExecution> .

Use o elemento <AsyncExecution> dentro de </IntegrationEndpoint> para especificar a execução síncrona ou assíncrona. Se você definir <AsyncExecution> como true , a integração será executada de forma assíncrona. E se você definir como false , a integração será executada de forma síncrona.

O exemplo a seguir define AsyncExecution como true :

<IntegrationEndpoint name="my-int-endpoint">
    <AsyncExecution>true</AsyncExecution>
</IntegrationEndpoint>

Políticas

O diretório /policies em um proxy de API contém todas as políticas disponíveis para serem anexadas aos fluxos no proxy de API.

Elementos de configuração de política

Nome Descrição Padrão Obrigatório?
Policy
name

O nome interno da política. Os caracteres que você pode usar no nome são restritos a: A-Za-z0-9._\-$ % . No entanto, a interface do usuário da Apigee impõe restrições adicionais, como a remoção automática de caracteres que não sejam alfanuméricos.

Opcionalmente, use o elemento <DisplayName> para rotular a política no editor de proxy da IU do Apigee com um nome diferente em linguagem natural.

N / D Sim
enabled

Defina como true para aplicar a política.

Defina como false para desativar a política. A política não será aplicada mesmo se permanecer vinculada a um fluxo.

true Não
continueOnError

Defina como false para retornar um erro quando uma política falhar. Este é o comportamento esperado para a maioria das políticas.

Defina como true para que a execução do fluxo continue mesmo após uma política falhar.

false Não
async

Quando definido como true , a execução da política é transferida para uma thread diferente, deixando a thread principal livre para lidar com solicitações adicionais. Quando o processamento offline é concluído, a thread principal retorna e finaliza o processamento do fluxo de mensagens. Em alguns casos, definir async como true melhora o desempenho do proxy da API. No entanto, o uso excessivo de async pode prejudicar o desempenho com muitas trocas de threads.

Para usar o comportamento assíncrono nos proxies da API, consulte o modelo de objeto JavaScript .

false Não

Anexo de políticas

A imagem a seguir mostra a sequência de execução dos fluxos de proxy da API:

Mostra um cliente chamando um serviço HTTP. A solicitação encontra o   O terminal de proxy e o ponto final do destino, que contêm etapas que acionam políticas. Depois do   Serviço HTTP retorna a resposta, a resposta é processada pelo ponto final de destino e depois o   Proxyendpoing antes de ser devolvido ao cliente. Como no pedido, a resposta é processada   por políticas dentro de etapas.

Conforme mostrado acima:

As políticas são anexadas como etapas de processamento para os fluxos . O nome da política é usado para fazer referência à política a ser aplicada como uma etapa de processamento. O formato de um anexo político é o seguinte:

<Step><Name>MyPolicy</Name></Step>

As políticas são aplicadas na ordem em que são anexadas a um fluxo. Por exemplo:

<Step><Name>FirstPolicy</Name></Step>
<Step><Name>SecondPolicy</Name></Step>

Elementos de configuração de anexo de políticas

Nome Descrição Padrão Obrigatório?
Step
Name O nome da política a ser executada por esta definição de etapa. N / D Sim
Condition Uma declaração condicional que determina se a política é aplicada ou não. Se uma política tiver uma condição associada, a política será executada apenas se a declaração condicional avaliar como TRUE. N / D Não

Fluxos

ProxyendPoint e TargetEndPoint definem um pipeline para processamento de mensagens de solicitação e resposta. Um pipeline de processamento consiste em um fluxo de solicitação e um fluxo de resposta. Cada fluxo de solicitação e fluxo de resposta são subdivididos em um pré -fluxo, um ou mais fluxos condicionais ou nomeados opcionais e um pós -fluxo.

  • Preflow: sempre é executado. Executa antes de qualquer fluxo condicional.
  • Pós -fluxo: sempre é executado. Executa após qualquer fluxo condicional.

Além disso, você pode adicionar um fluxo pós -client ao endpoint proxy, que é executado após o retorno da resposta ao aplicativo do cliente solicitante. Somente a política do Messagelogging pode ser anexada a esse fluxo. O Post -ClientFlow reduz a latência do proxy da API e disponibiliza informações para registro que não são calculadas até que a resposta seja devolvida ao cliente, como o client.sent.start.timestamp e client.sent.end.timestamp . O fluxo é usado principalmente para medir o intervalo de tempo entre os timestamps iniciais e finais para a mensagem de resposta.

Aqui está um exemplo de um fluxo pós -client com uma política de registro de mensagens anexada.

...
  <PostFlow name="PostFlow">
      <Request/>
      <Response/>
  </PostFlow>
  <PostClientFlow>
      <Request/>
      <Response>
          <Step>
              <Name>Message-Logging-1</Name>
          </Step>
      </Response>
  </PostClientFlow>
  ...

O pipeline de processamento de proxy da API executa os fluxos na seguinte sequência:

Solicitar pipeline:

  1. Solicitação de proxy pré -fluxo
  2. Solicitação de proxy Fluxos condicionais (opcional)
  3. Solicitação de proxy PostFlow
  4. Solicitação de destino Pré -fluxo
  5. Solicitação de destino Fluxos condicionais (opcional)
  6. Solicitação de destino pós -fluxo

Oleoduto de resposta:

  1. Atenda de resposta do alvo
  2. Resposta do alvo Fluxos condicionais (opcional)
  3. RESPOSTA DE TARGENS Pós -fluxo
  4. Resposta de proxy pré -fluxo
  5. Resposta de proxy Fluxos condicionais (opcional)
  6. Resposta de proxy Pós -fluxo
  7. Resposta pós -clientflow (opcional)

Somente os fluxos com anexos de políticas precisam ser configurados nas configurações do ProxyendPoint ou TargetEndPoint. O pré -fluxo e o pós -fluxo precisam ser especificados apenas em uma configuração de proxyendpoint ou TargetEndPoint quando uma política precisa ser aplicada durante o processamento de pré -fluxo ou pós -fluxo.

Em contraste com os fluxos condicionais, a ordem dos elementos de pré-fluxo e pós-fluxo não é importante-o proxy da API sempre será executado cada um no ponto apropriado da tubulação, independentemente de onde eles aparecem na configuração do endpoint.

Fluxos condicionais

Os pontos de extremidade de proxy e pontos de extremidade de destino suportam um número ilimitado de fluxos condicionais (também conhecidos como fluxos nomeados ).

Os testes de proxy da API para a condição especificada no fluxo condicional e, se a condição for atendida, as etapas de processamento no fluxo condicional serão executadas pelo proxy da API. Se a condição não for atendida, as etapas de processamento no fluxo condicional serão ignoradas. Os fluxos condicionais são avaliados na ordem definida no proxy da API e a primeira cuja condição é atendida é executada.

Ao definir os fluxos condicionais, você ganha a capacidade de aplicar etapas de processamento em um proxy da API com base em:

  • URI de solicitação
  • Verbo http ( GET / PUT / POST / DELETE )
  • Valor de um parâmetro de consulta, cabeçalho e param
  • Muitos outros tipos de condições

Por exemplo, o seguinte fluxo condicional especifica que ele é executado apenas quando o caminho do recurso de solicitação é /accesstoken . Qualquer solicitação de entrada com o caminho /accesstoken faz com que esse fluxo seja executado, juntamente com quaisquer políticas anexadas ao fluxo. Se o caminho de solicitação não incluir o sufixo /accesstoken , o fluxo não será executado (embora outro fluxo condicional possa).

<Flows>
  <Flow name="TokenEndpoint">
    <Condition>proxy.pathsuffix MatchesPath "/accesstoken"</Condition>
    <Request>
      <Step>
        <Name>GenerateAccessToken</Name>
      </Step>
    </Request> 
  </Flow>
</Flows>   

Elementos de configuração de fluxo

Nome Descrição Padrão Obrigatório?
Flow Um pipeline de processamento de solicitação ou resposta definido por um terminal de proxy ou terminal de destino
Name O nome único do fluxo. N / D Sim
Condition Uma declaração condicional que avalia uma ou mais variáveis ​​para avaliar como verdadeira ou falsa. Todos os fluxos além dos tipos de pré -fluxo e pós -fluxo predefinidos devem definir uma condição para sua execução. No entanto, se você incluir um único fluxo sem uma condição no final de uma sequência de fluxos, ela atuará como a declaração "else" no final da sequência dos fluxos. N / D Sim
Request O oleoduto associado ao processamento de mensagens de solicitação N / D Não
Response O oleoduto associado ao processamento de mensagens de resposta N / D Não

Processamento de etapas

A ordem seqüencial dos fluxos condicionais é aplicada pelo Apigee. Os fluxos condicionais são executados de cima para baixo. O primeiro fluxo condicional cuja condição é avaliada como true é executada e apenas um fluxo condicional é executado.

Por exemplo, na seguinte configuração de fluxo, qualquer solicitação de entrada que não inclua o sufixo do caminho /first ou /second fará com que o ThirdFlow seja executado, aplicando a política chamada 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

"Recursos" (arquivos de recursos para uso em proxies de API) são scripts, codificados e transformações XSL que podem ser anexadas aos fluxos usando políticas. Eles aparecem na seção Scripts do editor de proxy da API na interface do usuário da Apigee.

Consulte o gerenciamento de recursos para os tipos de recursos suportados.

Os recursos podem ser armazenados em um proxy da API, um ambiente ou uma organização. Em cada caso, um recurso é referenciado pelo nome em uma política. O APIGEE resolve o nome, passando do proxy da API, para o meio ambiente, para o nível da organização.

Um recurso armazenado no nível da organização pode ser referenciado por políticas em qualquer ambiente. Um recurso armazenado no nível do ambiente pode ser referenciado por políticas nesse ambiente. Um recurso armazenado no nível de proxy da API pode ser referenciado apenas por políticas nesse proxy da API.

,

Esta página se aplica ao Apigee e ao Apigee híbrido .

Veja a documentação do Apigee Edge .

Como desenvolvedor que trabalha com o Apigee, suas principais atividades de desenvolvimento envolvem a configuração de proxies de API que funcionam como proxies para APIs ou serviços de back -end. Este documento é uma referência de todos os elementos de configuração disponíveis ao criar proxies da API.

Se você está aprendendo a criar proxies de API, é recomendável que você comece com a criação de um proxy de API simples .

Edite sua configuração de proxy da API usando um dos seguintes métodos:

Estrutura de diretório de configuração de proxy da API

A estrutura do diretório de configuração de proxy da API é mostrada abaixo:

Mostra a estrutura do diretório na qual a apiproxi é a raiz. Diretamente sob o     Diretório de apiproxia são as políticas, proxies, recursos e direcionados diretórios, bem como o     Arquivo WeatherApi.xml.

Uma configuração de proxy da API consiste no seguinte conteúdo:

Configuração base Configurações primárias de configuração para um proxy da API.
ProxyendPoint Configurações para a conexão HTTP de entrada (da solicitação de aplicativos ao APIGEE), fluxos de solicitação e resposta e anexos de políticas.
TargetEndPoint Configurações para a conexão HTTP de saída (do APIGEE ao serviço de back -end), fluxos de solicitação e resposta e anexos de políticas.
Fluxos ProxyendPoint e TargetEndPoint Solicle e pipelines de resposta a quais políticas podem ser anexadas.
Políticas Arquivos de configuração formatados por XML que estão em conformidade com os esquemas de política da Apigee.
Recursos Scripts, arquivos JAR e arquivos XSLT referenciados por políticas para executar a lógica personalizada.

Configuração base

/apiproxy/weatherapi.xml

A configuração base para um proxy da API, que define o nome do proxy da API. O nome deve ser único em uma organização.

Configuração de amostra:

<APIProxy name="weatherapi">
</APIProxy>

Elementos de configuração base

Nome Descrição Padrão Obrigatório?
APIProxy
name O nome do proxy da API, que deve ser único em uma organização. Os caracteres que você tem permissão para usar no nome estão restritos ao seguinte: A-Za-z0-9_- N / D Sim
revision O número de revisão da configuração de proxy da API. Você não precisa definir explicitamente o número de revisão, pois o Apigee rastreia automaticamente a revisão atual do proxy da API. N / D Não
ConfigurationVersion A versão do esquema de configuração de proxy da API, ao qual esse proxy da API se conforma. O único valor suportado atualmente é o majorversion 4 e o minorversion 0. Essa configuração pode ser usada no futuro para permitir a evolução do formato de proxy da API. 4.0 Não
Description Uma descrição textual do proxy da API. Se fornecido, a descrição será exibida na interface do usuário da Apigee. N / D Não
DisplayName Um nome amigável que pode ser diferente do atributo name da configuração de proxy da API. N / D Não
Policies Uma lista de políticas no diretório /policies desse proxy da API. Você normalmente verá apenas esse elemento quando o proxy da API foi criado usando a interface do usuário do Apigee. Esta é simplesmente uma configuração de manifesto , projetada para fornecer visibilidade do conteúdo do proxy da API. N / D Não
ProxyEndpoints Uma lista de pontos de extremidade proxy no diretório /proxies desse proxy da API. Você normalmente verá apenas esse elemento quando o proxy da API foi criado usando a interface do usuário do Apigee. Esta é simplesmente uma configuração de manifesto , projetada para fornecer visibilidade do conteúdo do proxy da API. N / D Não
Resources Uma lista de recursos (JavaScript, Python, Java, XSLT) no diretório /resources desse proxy da API. Você normalmente verá apenas esse elemento quando o proxy da API foi criado usando a interface do usuário do Apigee. Esta é simplesmente uma configuração de manifesto , projetada para fornecer visibilidade do conteúdo do proxy da API. N / D Não
Spec Identifica a especificação OpenAPI associada ao proxy da API. O valor é definido como um URL ou um caminho no armazenamento de especificações.
N / D Não
TargetServers Uma lista de servidores de destino referenciados em quaisquer pontos de extremidade de destino desse proxy da API. Você normalmente verá apenas esse elemento quando o proxy da API foi criado usando o Apigee. Esta é simplesmente uma configuração de manifesto , projetada para fornecer visibilidade do conteúdo do proxy da API. N / D Não
TargetEndpoints Uma lista de pontos de extremidade de destino no diretório /targets desse proxy da API. Você normalmente verá apenas esse elemento quando o proxy da API foi criado usando a interface do usuário do Apigee. Esta é simplesmente uma configuração de manifesto , projetada para fornecer visibilidade do conteúdo do proxy da API. N / D Não

ProxyendPoint

A imagem a seguir mostra o fluxo de solicitação/resposta:

Mostra um cliente chamando um http   serviço. A solicitação passa pelo terminal de procuração e depois pelo ponto final de destino antes de ser   processado pelo serviço HTTP. A resposta passa pelo alvo encerrar e depois o   endpoint de proxy antes de ser devolvido ao cliente.

/apiproxy/proxies/default.xml

A configuração do ProxyendPoint define a interface de entrada (voltada para o cliente) para um proxy da API. Quando você configura um ponto de extremidade de proxy, está configurando uma configuração de rede que define como os aplicativos do cliente ( APPS ) devem invocar a API proxiada.

A seguinte configuração de proxyendpoint de amostra seria armazenada em /apiproxy/proxies :

<ProxyEndpoint name="default">
  <PreFlow/>
  <Flows/>
  <PostFlow/>
  <HTTPProxyConnection>
    <BasePath>/weather</BasePath>
    <Properties/>
  </HTTPProxyConnection>
  <FaultRules/>
  <DefaultFaultRule/>
  <RouteRule name="default">
    <TargetEndpoint>default</TargetEndpoint>
  </RouteRule>
</ProxyEndpoint>

Os elementos de configuração necessários em um endpoint básico de proxy são:

Elementos de configuração do proxyendpoint

Nome Descrição Padrão Obrigatório?
ProxyEndpoint
name O nome do terminal proxy. Deve ser único na configuração de proxy da API, quando (em casos raros) vários pontos de extremidade proxy são definidos. Os caracteres que você tem permissão para usar no nome são restritos ao seguinte: A-Za-z0-9._\-$ % . N / D Sim
PreFlow Define as políticas no fluxo de pré -fluxo de uma solicitação ou resposta. N / D Sim
Flows
Define as políticas nos fluxos condicionais de uma solicitação ou resposta.
N / D Sim
PostFlow
Define as políticas no fluxo pós -fluxo de uma solicitação ou resposta.
N / D Sim
HTTPProxyConnection Define o endereço de rede e o caminho URI associado ao proxy da API.
BasePath

Uma string necessária que identifica exclusivamente o caminho URI usado pelo Apigee para rotear mensagens recebidas para o proxy adequado da API.

O Basepath é um fragmento de URI (por exemplo /weather ) anexado ao URL base de um proxy da API (por exemplo, http://apifactory-test.apigee.net ). Basepath deve ser único em um ambiente. A singularidade é validada quando um proxy da API é gerado ou importado.

Usando um curinga em caminhos base

Você pode usar um ou mais curingas "*" em caminhos básicos de proxy da API. Por exemplo, um caminho base de /team/*/members permite que os clientes ligue https://[host]/team/ blue /members e https://[host]/team/ green /members sem que você precise criar novos proxies de API para apoiar novas equipes. Observe que / ** / não é suportado.

Importante: o Apigee não suporta o uso de um curinga "*" como o primeiro elemento de um caminho base. Por exemplo, isso não é suportado: /*/search . Iniciar o caminho base com um "*" pode levar a erros inesperados devido à maneira como o Apigee identifica caminhos válidos.

/ Sim
Properties Um conjunto de configurações opcionais de configuração HTTP pode ser definido como propriedades de um <ProxyEndpoint> . As propriedades disponíveis incluem o seguinte:
  • request.queryparams.ignore.content.type.charset

    Use o Property request.queryparams.ignore.content.type.charset para dizer ao proxy para ignorar o parâmetro charset do cabeçalho do Content-Type ao processar o URL da solicitação. Por exemplo:

    <Properties>
      <Property name="request.queryparams.ignore.content.type.charset">true</Property>
    </Properties>

    A tabela a seguir mostra a saída de exemplo, dependendo da configuração da propriedade charset e da presença do parâmetro charset do cabeçalho Content-Type .

    Configuração da propriedade Valor do cabeçalho Exemplo de saída
    charset=false param charset não definido [email protected]
    charset=false charset=utf-8 john.doe [email protected]
    charset=true e nenhum param charset no cabeçalho. param charset não definido [email protected]
    charset=true charset=utf-8 param set [email protected]
  • request.payload.parse.limit

    Use o Property request.payload.parse.limit para definir o tamanho máximo da carga útil que pode ser processado no fluxo de solicitação, em megabytes (M).

    Por exemplo:

    <Properties>
      <Property name="request.payload.parse.limit">30M</Property>
    </Properties>

    O limite mínimo configurável é de 10m e o limite máximo configurável é de 30m. Se a propriedade não estiver definida, o limite padrão será de 10m.

    Para mais informações, consulte o tamanho da carga útil da mensagem .

N / D Não
FaultRules
Define como o ponto final do proxy reage a um erro. Uma regra de falha especifica dois itens:
  • Uma condição que especifica a falha a ser tratada com base na categoria, subcategoria ou nome predefinido
  • Uma ou mais políticas que definem o comportamento da regra de falha para a condição correspondente

Consulte o manuseio de falhas .

N / D Não
DefaultFaultRule

Lida com quaisquer erros (sistema, transporte, mensagens ou políticas) que não são tratados explicitamente por outra regra de falha.

Consulte o manuseio de falhas .

N / D Não
RouteRule Define o destino das mensagens de solicitação de entrada após o processamento pelo ProxyendPoint Soliclepine. Geralmente, o roteterule aponta para um endpoint de destino nomeado, um integração e um URL.
Name Atributo necessário, que fornece um nome para o roteterule. Os caracteres que você tem permissão para usar no nome são restritos ao seguinte: A-Za-z0-9._\-$ % . Por exemplo, Cat2 %_ é um nome legal. N / D Sim
Condition Uma instrução condicional opcional usada para roteamento dinâmico em tempo de execução. Routerules condicionais são úteis, por exemplo, para ativar o roteamento baseado em conteúdo para oferecer suporte ao versão de back-end. N / D Não
TargetEndpoint

Uma sequência opcional que identifica uma configuração de TargetEndPoint nomeada. Um endpoint de destino nomeado é qualquer ponto de extremidade de destino definido no mesmo proxy da API no diretório /targets ).

Ao nomear um terminal de destino, você indica onde as mensagens de solicitação devem ser encaminhadas após o processamento pelo ProxyendPoint Solicy Pipeline. Observe que esta é uma configuração opcional.

Um terminal de proxy pode chamar um URL diretamente. Por exemplo, um recurso JavaScript ou Java, funcionando na função de um cliente HTTP, pode executar o dever básico de um terminal de destino, que deve encaminhar solicitações para um serviço de back -end.

N / D Não
URL Uma sequência opcional que define um endereço de rede de saída chamado pelo endpoint proxy, ignorando qualquer configuração do TargetEndPoint que possa ser armazenada em /targets N / D Não

Como configurar roteadores

Um terminal de destino nomeado refere -se a um arquivo de configuração em /apiproxy/targets aos quais o roteterule encaminha uma solicitação após o processamento pelo endpoint de procuração.

Por exemplo, o seguinte routerule refere -se à configuração /apiproxy/targets/myTarget.xml :

<RouteRule name="default">
  <TargetEndpoint>myTarget</TargetEndpoint>
</RouteRule>

Invocação direta de URL

Um terminal de proxy também pode chamar diretamente um serviço de back -end. A Invocation Direct URL ignora qualquer configuração de TargetEndPoint nomeada em /apiproxy/targets ). Por esse motivo, o TargetEndPoint é uma configuração opcional de proxy da API, embora, na prática, a invocação direta do endpoint proxy não seja recomendada.

Por exemplo, o roteterule a seguir faz uma chamada http para http://api.mycompany.com/v2 .

<RouteRule name="default">
  <URL>http://api.mycompany.com/v2</URL> 
</RouteRule>

Rotas condicionais

Os roteadores podem ser acorrentados para apoiar o roteamento dinâmico em tempo de execução. As solicitações de entrada podem ser roteadas para configurações de TargetEndPoint nomeadas, diretamente para URLs ou para uma combinação dos dois, com base em cabeçalhos HTTP, conteúdo de mensagens, parâmetros de consulta ou informações contextuais, tal hora do dia, localidade, etc.

Os routerules condicionais funcionam como outras declarações condicionais no Apigee. Consulte Referência de Referência e Variáveis ​​de Fluxo .

Por exemplo, a combinação de roteterule a seguir avalia primeiro a solicitação de entrada para verificar o valor de um cabeçalho HTTP. Se o cabeçalho HTTP routeTo tiver o Value TargetEndpoint1 , a solicitação será encaminhada para o terminal de destino denominado TargetEndpoint1 . Caso contrário, a solicitação de entrada é encaminhada para 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>

Rotas nulas

Um roteterule nulo pode ser definido para apoiar cenários nos quais a mensagem de solicitação não precisa ser encaminhada para o terminal de destino. Isso é útil quando o endpoint proxy executa todo o processamento necessário, por exemplo, usando o JavaScript para chamar um serviço externo ou recuperar dados de uma pesquisa para o armazenamento de chave/valor do Apigee.

Por exemplo, o seguinte define uma rota nula:

<RouteRule name="GoNowhere"/>

Rotas nulas condicionais podem ser úteis. No exemplo a seguir, uma rota nula é configurada para executar quando uma request.header.X-DoNothing tem um valor diferente de null .

<RouteRule name="DoNothingOnDemand">
  <Condition>request.header.X-DoNothing != null</Condition>
</RouteRule>

Lembre -se de que os roteadores podem ser encadeados; portanto, uma rota nula condicional normalmente seria um componente de um conjunto de roteterules projetadas para suportar o roteamento condicional.

O uso prático de uma rota nula condicional seria apoiar o cache. Usando o valor da variável definida pela política de cache, você pode configurar um proxy da API para executar a rota nula quando uma entrada é servida no cache.

<RouteRule name="DoNothingUnlessTheCacheIsStale">
  <Condition>lookupcache.LookupCache-1.cachehit is true</Condition>
</RouteRule>

TargetEndPoint

Mostra um cliente chamando um http   serviço. A solicitação passa pelo terminal de procuração e depois pelo ponto final de destino antes de ser   processado pelo serviço HTTP. A resposta passa pelo alvo encerrar e depois o   endpoint de proxy antes de ser devolvido ao cliente.

Um ponto de extremidade de destino é o equivalente de saída de um terminal de procuração. Um terminal de destino funciona como cliente para um serviço de back -end ou API - envia solicitações e recebe respostas.

Um proxy da API não precisa ter nenhum ponto de extremidade de destino. Os terminais de proxy podem ser configurados para ligar diretamente para URLs. Um proxy da API sem pontos de extremidade de destino geralmente contém um terminal de proxy que chama diretamente um serviço de back -end ou que está configurado para chamar um serviço usando Java ou JavaScript.

Configuração do TargetEndPoint

/targets/default.xml

O terminal de destino define a conexão de saída do Apigee para outro serviço ou recurso.

Aqui está uma amostra de configuração do TargetEndPoint:

<TargetEndpoint name="default">
  <PreFlow/>
  <Flows/>
  <PostFlow/>
  <HTTPTargetConnection>
    <URL>http://mocktarget.apigee.net</URL>
    <SSLInfo/>
    <Authentication/>
  </HTTPTargetConnection>
  <FaultRules/>
  <DefaultFaultRule/>
  <ScriptTarget/>
  <LocalTargetConnection/>
</TargetEndpoint>

Elementos de configuração do TargetEndPoint

Um endpoint alvo pode chamar um alvo de uma das seguintes maneiras:

  • HttptargetConnection para chamadas http ou https
  • LocalTargetConnection para encadeamento local de proxy-proxy

Configure apenas um desses em um terminal de destino.

Nome Descrição Padrão Obrigatório?
TargetEndpoint
name O nome do terminal de destino, que deve ser exclusivo na configuração de proxy da API. O nome do endpoint de destino é usado no Routerule ProxyendPoint para direcionar solicitações de processamento de saída. Os caracteres que você tem permissão para usar no nome são restritos ao seguinte: A-Za-z0-9._\-$ % . N / D Sim
PreFlow Define as políticas no fluxo de pré -fluxo de uma solicitação ou resposta. N / D Sim
Flows
Define as políticas nos fluxos condicionais de uma solicitação ou resposta.
N / D Sim
PostFlow
Define as políticas no fluxo pós -fluxo de uma solicitação ou resposta.
N / D Sim
HTTPTargetConnection

Com seus elementos filhos, especifica um recurso de back -end alcançado via HTTP.

Se você usar o HTTPTarGetConnection, não configure outros tipos de conexões de destino (ScriptTarget ou LocalTargetConnection).

Você pode usar o elemento filho <Authentication> para fazer chamadas autenticadas para serviços do Google ou serviços personalizados em execução em determinados produtos do Google Cloud, como funções em nuvem e execução em nuvem . O uso do elemento <Authentication> requer etapas de configuração e implantação descritas no uso do Google Authentication . Com a configuração adequada, a política cria um token de autenticação para você e a adiciona à solicitação de serviço. Veja também o uso de elementos <Authentication> .

URL Define o endereço de rede do serviço de back -end ao qual o ponto de extremidade de destino encaminha as mensagens de solicitação. N / D Não
LoadBalancer

Define uma ou mais configurações de TargetServer nomeadas. As configurações de TargetServer nomeadas podem ser usadas para balanceamento de carga Definindo 2 ou mais conexões de configuração do terminal.

Você também pode usar servidores de destino para desacoplar as configurações de proxy da API dos URLs de terminais de serviço de back -end de concreto.

N / D Não
Properties Um conjunto de configurações opcionais de configuração HTTP pode ser definido como propriedades de um <TargetEndpoint> .

Use o Property response.payload.parse.limit para definir o tamanho máximo da carga útil que pode ser processado no fluxo de resposta, nos megabytes (M).

Por exemplo:

<Properties>
  <Property name="response.payload.parse.limit">15M</Property>
</Properties>

O limite mínimo configurável é de 10m e o limite máximo configurável é de 30m. Se a propriedade não estiver definida, o limite padrão será de 10m.

Para mais informações, consulte o tamanho da carga útil da mensagem .

N / D Não
SSLInfo Opcionalmente, defina as configurações TLS/SSL em um terminal de destino para controlar a conexão TLS/SSL entre o proxy da API e o serviço de destino. Consulte Configuração TLS/SSL TargetEndPoint . N / D Não
LocalTargetConnection Com seus elementos filhos, especifica um recurso a ser alcançado localmente, ignorando as características da rede, como o balanceamento de carga e os processadores de mensagens.

Para especificar o recurso de destino, inclua o elemento filho apiproxi (com o elemento proxyendpoint) ou o elemento filho do caminho.

Para mais informações, consulte a encadeamento de proxies da API juntos .

Se você usar o LocalTargetConnection, não configure outros tipos de conexões de destino (httptargetConnection ou scriptTarget).

APIProxy Especifica o nome de um proxy da API a ser usado como destino para solicitações. O proxy de destino deve estar na mesma organização e ambiente que as solicitações de envio de proxy. Esta é uma alternativa para usar o elemento do caminho. N / D Não
ProxyEndpoint Usado com apiproxi para especificar o nome do endpoint de proxy do proxy do proxy de destino. N / D Não
Path Especifica o caminho do terminal de um proxy da API a ser usado como um destino para solicitações. O proxy de destino deve estar na mesma organização e ambiente que as solicitações de envio de proxy. Esta é uma alternativa ao uso de apiproxi. N / D Não
FaultRules
Define como o ponto final do destino reage a um erro. Uma regra de falha especifica dois itens:
  • Uma condição que especifica a falha a ser tratada com base na categoria, subcategoria ou nome predefinido
  • Uma ou mais políticas que definem o comportamento da regra de falha para a condição correspondente

Consulte o manuseio de falhas .

N / D Não
DefaultFaultRule

Lida com quaisquer erros (sistema, transporte, mensagens ou políticas) que não são tratados explicitamente por outra fAultrule.

Consulte o manuseio de falhas .

N / D Não

<Authentication> Uso do elemento

O uso do elemento <Authentication> no <TargetEndpoint> é idêntico ao uso do elemento <Authentication> na política do ServiceCallout. Em ambos <TargetEndpoint> e o ServiceCallout, <Authentication> é um subelemento de <HttpTargetConnection> . Para detalhes, consulte o elemento de autenticação no Referência da política do ServiceCallout.

Referência de erro do elemento <Authentication>

Se você estiver usando o elemento <Authentication> , poderá encontrar possíveis mensagens de erro e dicas para solucionar problemas para implantação e erros de tempo de execução na seção Erros da documentação da política do ServiceCallout.

Exemplos de elementos <Authentication>

O exemplo a seguir mostra como chamar um serviço implantado no Cloud Run como o destino usando o elemento Authentication para gerar um token de conexão OpenID necessário para autenticar a chamada:

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

O exemplo a seguir mostra como chamar um serviço de destino que aponta para a nuvem Run usando o elemento Authentication para gerar um token de conexão OpenID necessário para autenticar a chamada. O elemento HeaderName adiciona o token do portador gerado a um cabeçalho chamado X-Serverless-Authorization que é enviado ao sistema de destino. O cabeçalho Authorization , se presente, é deixado não modificado e também enviado na solicitação.

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

O exemplo a seguir mostra como chamar um serviço de destino que aponta para o Serviço do Google Secret Manager . Neste exemplo, o elemento GoogleaccessToken está configurado para gerar um token de autenticação do Google para autenticar a solicitação 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>

O exemplo a seguir mostra como definir automaticamente o público do GoogleidToken. Quando useTargetUrl é true e a variável referenciada não resolve para uma variável válida, o URL do destino (excluindo parâmetros de consulta) é usado como público. Suponha que o caminho da solicitação seja /foobar e o URL do servidor de destino seja https://xyz.com , o público do GoogleidToken será automaticamente definido 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>

Configuração do TargetEndPoint TLS/SSL

Os pontos de extremidade de destino geralmente precisam gerenciar conexões HTTPS com infraestrutura de back -end heterogênea. Por esse motivo, várias definições de configuração TLS/SSL são suportadas.

TLS/SSL TargetEndPoint Configuração Elementos

Nome Descrição Padrão Obrigatório?
SSLInfo

O bloco <SSLInfo> pode ser usado para TLS/SSL de mão única e bidirecional.

Enabled

Quando definido como true , especifica que a conexão de destino deve usar o protocolo SSL de acordo com quaisquer outros parâmetros especificados neste bloco <SSLInfo> . Quando definido como false , especifica que a conexão de destino não deve usar o SSL.

No entanto, se o bloqueio do bloqueio <HTTPTargetConnection> contiver um elemento <URL> que avaliará uma sequência que começa com https:// , o protocolo SSL será usado mesmo que <Enabled> seja falso. Nesse caso, todo o bloco <SSLInfo> é ignorado.

Por outro lado, se houver um elemento <URL> que comece com http:// , o protocolo SSL não será usado, mesmo que <Enabled> seja verdadeiro.

falso Não
Enforce

Aplica o SSL rigoroso entre o Apigee e o back -end de destino.

Se definido como true , as conexões falharão para alvos com certificados inválidos, certificados expirados, certificados autoassinados, certificados com uma incompatibilidade de nome de host e certificados com uma raiz não confiável. Um código de falha de 4xx ou 5xx é retornado.

Se não for definido, ou definido como false , o resultado de conexões para segmentar back -end com certificados problemáticos depende da configuração de <IgnoreValidationErrors> (veja abaixo). Uma resposta de sucesso ( 2xx ) pode ocorrer sob certas condições, se <IgnoreValidationErrors> estiver definido como true .

Você pode substituir o campo Enforce no nível do ambiente com o sinalizador de recursos SSLInfo.Enforce . Consulte Especificando a aplicação do SSL no nível do ambiente .

false Não
TrustStore

Uma keystore contendo certificados de servidor raiz confiáveis. O Apigee tratará o par de remoto como confiável se a cadeia de certificados enviar termina em um certificado contido nessa tecla.

N / D Não
ClientAuthEnabled

Se definido como true , permita o TLS bidirecional (também conhecido como TLS ou MTLs mútuos) entre o Apigee e o par remoto - o cliente da API ou o back -end de destino.

A habilitação de TLS bidirecional normalmente exige que você configure um TrustStore e um Keystore no Apigee.

false Não
KeyStore Uma tecla contendo teclas privadas usadas para autenticação de cliente de saída N / D Sim (se ClientAuthenabled é verdadeiro)
KeyAlias O alias -chave da chave privada usada para autenticação de cliente de saída N / D Sim (se ClientAuthenabled é verdadeiro)
IgnoreValidationErrors

Indica se os erros de validação são ignorados. Se o sistema de back -end usar o SNI e retornar um certificado com um nome distinto (DN) que não corresponde ao nome do host, não há como ignorar o erro e a conexão falhar.

NOTA : Se <Enforce> estiver definido como true , o valor de <IgnoreValidationErrors> será ignorado.

false Não
Ciphers

Cifras suportadas para tls/ssl de saída. Se nenhuma cifra for especificada, todas as cifras disponíveis para a JVM serão permitidas.

Para restringir as cifras, adicione os seguintes elementos listando as cifras suportadas:

<Ciphers>
 <Cipher>TLS_RSA_WITH_3DES_EDE_CBC_SHA</Cipher>    
 <Cipher>TLS_RSA_WITH_DES_CBC_SHA</Cipher>
</Ciphers>
N / D Não
Protocols

Protocolos suportados para TLS/SSL de saída. Se nenhum protocolo for especificado, todos os protocolos disponíveis para a JVM serão permitidos.

Para restringir os protocolos, especifique -os explicitamente. Por exemplo, para permitir apenas TLS v1.2 ou TLS v1.3:

<Protocols>
 <Protocol>TLSv1.2</Protocol>
 <Protocol>TLSv1.3</Protocol>
</Protocols>
N / D Não
CommonName

O Apigee verifica o valor aqui em relação ao CN (nome comum) ou sem (nomes alternativos de sujeito) no certificado de pares remotos.

N / D Não

Especificando a aplicação do SSL no nível do meio ambiente

Se SSLInfo.Enforce for definido como true ou false , o valor especificado substitui quaisquer opções de aplicação granular especificadas nos blocos <SSLInfo> nas configurações do TargetEndPoint ou TargetServer.

Se SSLInfo.Enforce não for definido, a aplicação do SSL será determinada por quaisquer valores especificados usando o elemento <Enforce> dentro de blocos individuais <SSLInfo> . Para obter mais informações, consulte Configuração TLS/SSL TargetEndPoint.

No exemplo a seguir, SSLInfo.Enforce está definido como true . Na saída resultante, você pode ver que o SSL é aplicado no ambiente 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"'"
            }]
        }
    }'
  

Saída:

{
  ...
  "properties": {
    "property": [
      {
        "name": "features.SSLInfo.Enforce",
        "value": "true"
      }
    ]
  },
  ...
}

Exemplo de terminal de destino com autenticação de cliente de saída ativada

<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 instruções detalhadas, consulte as opções para configurar o TLS .

Usando variáveis ​​de fluxo para definir valores de TLS/SSL dinamicamente

Você também pode definir dinamicamente os detalhes TLS/SSL para suportar requisitos flexíveis de tempo de execução. Por exemplo, se o seu proxy se conectar a dois alvos potencialmente diferentes (um alvo de teste e um alvo de produção), você poderá detectar programaticamente o seu ambiente que está chamando e definir referências dinamicamente para a Keystore e TrustStore apropriados. O dinâmico artigo da Comunidade Apigee de referência da variável Apigee explica esse cenário com mais detalhes e fornece exemplos implantáveis ​​de proxy da API.

No exemplo a seguir de como a tag <SSLInfo> seria definida em uma configuração do TargetEndPoint, os valores podem ser fornecidos em tempo de execução, por exemplo, por uma chamada de Java, uma política de JavaScript ou uma política de atribuições . Use as variáveis ​​de mensagem que contêm os valores que você deseja definir.

Variáveis ​​são permitidas apenas nos seguintes 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>

Usando referências para definir valores TLS/SSL dinamicamente

Ao configurar um terminal de destino que usa HTTPS, você deve considerar o caso quando o certificado TLS/SSL expirar ou uma alteração na configuração do sistema exige que você atualize o cert.

Para mais informações, consulte o manuseio de certificados expirados .

However, you can optionally configure the target endpoint to use a reference to the keystore or truststore instead. The advantage to using a reference is that you can update the reference to point to a different keystore or truststore to update the TLS/SSL cert without having to restart Message Processors.

For example, shown below is a target endpoint that uses a reference to the keystore:

<SSLInfo>
  <Enabled>true</Enabled>
  <ClientAuthEnabled>false</ClientAuthEnabled>
  <KeyStore>ref://keystoreref</KeyStore>
  <KeyAlias>myKeyAlias</KeyAlias>
</SSLInfo>

Use the following POST API call to create the reference named keystoreref :

curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{org}/references" \
  -X POST \
  -H "Authorization: Bearer $TOKEN" \
  -d '<ResourceReference name="keystoreref">
    <Refers>myTestKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
</ResourceReference>'

Onde $TOKEN é definido como seu token de acesso OAuth 2.0, conforme descrito em Como obter um token de acesso OAuth 2.0 . Para obter informações sobre as opções curl usadas neste exemplo, consulte Usando curl . Para obter uma descrição das variáveis ​​de ambiente usadas, consulte Definindo variáveis ​​de ambiente para solicitações da API da Apigee .

The reference specifies the name of the keystore and its type.

Use the following GET API call to view the reference:

curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{org}/references/keystoreref" \
  -H "Authorization: Bearer $TOKEN"

Onde $TOKEN é definido como seu token de acesso OAuth 2.0, conforme descrito em Como obter um token de acesso OAuth 2.0 . Para obter informações sobre as opções curl usadas neste exemplo, consulte Usando curl . Para obter uma descrição das variáveis ​​de ambiente usadas, consulte Definindo variáveis ​​de ambiente para solicitações da API da Apigee .

curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{org}/references/keystoreref" \
  -H "Authorization: Bearer $TOKEN"

Onde $TOKEN é definido como seu token de acesso OAuth 2.0, conforme descrito em Como obter um token de acesso OAuth 2.0 . Para obter informações sobre as opções curl usadas neste exemplo, consulte Usando curl . Para obter uma descrição das variáveis ​​de ambiente usadas, consulte Definindo variáveis ​​de ambiente para solicitações da API da Apigee .

To later change the reference to point to a different keystore, ensuring that the alias has the same name, use the following PUT call:

curl "https://apigee.googleapis.com/v1/organizations/{org}/environments/{org}/references/keystoreref" \
  -X PUT \
  -H "Authorization: Bearer $TOKEN" \
  -d '<ResourceReference name="keystoreref">
    <Refers>myNewKeystore</Refers>
    <ResourceType>KeyStore</ResourceType>
  </ResourceReference>'

Onde $TOKEN é definido como seu token de acesso OAuth 2.0, conforme descrito em Como obter um token de acesso OAuth 2.0 . Para obter informações sobre as opções curl usadas neste exemplo, consulte Usando curl . Para obter uma descrição das variáveis ​​de ambiente usadas, consulte Definindo variáveis ​​de ambiente para solicitações da API da Apigee .

TargetEndpoint with target load balancing

Target endpoints support load balancing across multiple named target servers using three load balancing algorithms.

For detailed instructions, refer to Load balancing across backend servers .

IntegrationEndpoint

An IntegrationEndpoint is a target endpoint that specifically runs Apigee integrations . If you have configured an IntegrationEndpoint, Apigee sends the request object to Apigee's Integration Platform for execution. To run your integration, in addition to configuring the IntegrationEndpoint, you must also add the SetIntegrationRequest policy in your proxy flow.

You can configure your integration to execute either synchronously or asynchronously by setting the <AsyncExecution> element in the IntegrationEndpoint configuration. For more information, see Synchronous vs Asynchronous execution . After running the integration, Apigee saves the response in the response message .

Configuring IntegrationEndpoint

To configure an integration endpoint as your target endpoint, add the IntegrationEndpoint element to your ProxyEndpoint configuration. The following is a sample ProxyEndpoint configuration:

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

In the sample ProxyEndpoint configuration, Apigee performs the following tasks:

  1. In the PreFlow, executes the policy named my-set-integration-request-policy , which sets the integration request object and integration flow variables.
  2. Uses my-int-endpoint as the target endpoint, as specified in the RouteRule .
  3. Reads the integration request object created by the my-set-integration-request-policy .
  4. Sends the request to Apigee's Integration Platform using the request object and flow variables set by the SetIntegrationRequest policy.
  5. Saves the response of the integration in the response message.

The XML file containing the <IntegrationEndpoint> declaration will be available in the APIGEE_BUNDLE_DIRECTORY /apiproxy/integration-endpoints/ directory. If you create your API proxy using the Develop > API Proxies > CREATE NEW > Integration target option, Apigee stores the declaration in the /apiproxy/integration-endpoints/default.xml file. If you create the integration endpoint XML from the UI, you can provide a custom name for the XML file.

The following example shows the declaration of the <IntegrationEndpoint> element in the XML file:

<IntegrationEndpoint name="my-int-endpoint">
    <AsyncExecution>false</AsyncExecution>
</IntegrationEndpoint>

IntegrationEndpoint configuration elements

Nome Descrição Padrão Obrigatório?
IntegrationEndpoint
name The name of the IntegrationEndpoint. The characters you can use in the name are restricted to: A-Za-z0-9._\-$ % N / D Sim
AsyncExecution A Boolean value that specifies if the integration should run in synchronous or asynchronous mode. For more information, see Synchronous vs Asynchronous execution . falso Não

Synchronous vs Asynchronous execution

You can configure the integration to run in either synchronous or asynchronous mode. To understand the difference between synchronous and asynchronous execution modes, see <AsyncExecution> .

Use the <AsyncExecution> element within the </IntegrationEndpoint> to specify synchronous or asynchronous execution. If you set <AsyncExecution> to true , the integration runs asynchronously. And if you set it to false , the integration runs synchronously.

The following example sets the AsyncExecution to true :

<IntegrationEndpoint name="my-int-endpoint">
    <AsyncExecution>true</AsyncExecution>
</IntegrationEndpoint>

Políticas

The /policies directory in an API proxy contains all policies available to be attached to Flows in the API proxy.

Policy configuration elements

Nome Descrição Padrão Obrigatório?
Policy
name

The internal name of the policy. Characters you can use in the name are restricted to: A-Za-z0-9._\-$ % . However, the Apigee UI enforces additional restrictions, such as automatically removing characters that are not alphanumeric.

Optionally, use the <DisplayName> element to label the policy in the Apigee UI proxy editor with a different, natural-language name.

N / D Sim
enabled

Set to true to enforce the policy.

Set to false to turn off the policy. The policy will not be enforced even if it remains attached to a flow.

true Não
continueOnError

Set to false to return an error when a policy fails. This is expected behavior for most policies.

Set to true to have flow execution continue even after a policy fails.

false Não
async

When set to true , policy execution is offloaded to a different thread, leaving the main thread free to handle additional requests. When the offline processing is complete, the main thread comes back and finishes handling the message flow. In some cases, setting async to true improves API proxy performance. However, overusing async can hurt performance with too much thread switching.

To use asynchronous behavior in API proxies, see JavaScript object model .

false Não

Policy attachment

The following image shows the API proxy flows execution sequence:

shows a client calling an HTTP service. The request encounters the
  proxy endpoint and target endpoint, which each contain steps that trigger policies. After the
  HTTP service returns the response, the response is processed by the target endpoint and then the
  ProxyEndpoing before being returned to the client. As with the request, the response is processed
  by policies within steps.

Conforme mostrado acima:

Policies are attached as processing steps to Flows . The policy's name is used to reference the policy to be enforced as a processing Step. The format of a policy attachment is the following:

<Step><Name>MyPolicy</Name></Step>

<Step><Name>FirstPolicy</Name></Step>
<Step><Name>SecondPolicy</Name></Step>

Policy attachment configuration elements

Nome Descrição Padrão Obrigatório?
Step
Name The name of the policy to be executed by this Step definition. N / D Sim
Condition A conditional statement that determines whether the policy is enforced or not. If a policy has an associated condition, then the policy only executes if the conditional statement evaluates to true. N / D Não

Fluxos

ProxyEndpoint and TargetEndpoint define a pipeline for request and response message processing. A processing pipeline consists of a request flow and a response flow. Each request flow and response flow is subdivided into a PreFlow, one or more optional conditional or named flows, and a PostFlow.

  • PreFlow: Always executes. Executes before any conditional Flows.
  • PostFlow: Always executes. Executes after any conditional Flows.

Additionally, you can add a PostClientFlow to the proxy endpoint, which executes after the response is returned to the requesting client app. Only the MessageLogging policy can be attached to this flow. PostClientFlow reduces API proxy latency and makes information available for logging that is not calculated until after the response is returned to the client, such as the client.sent.start.timestamp and client.sent.end.timestamp .The flow is used primarily for measuring the time interval between the start and end timestamps for the response message.

Here's an example of a PostClientFlow with a message logging policy attached.

...
  <PostFlow name="PostFlow">
      <Request/>
      <Response/>
  </PostFlow>
  <PostClientFlow>
      <Request/>
      <Response>
          <Step>
              <Name>Message-Logging-1</Name>
          </Step>
      </Response>
  </PostClientFlow>
  ...

The API proxy processing pipeline executes Flows in the following sequence:

Request Pipeline:

  1. Proxy Request PreFlow
  2. Proxy Request Conditional Flows (Optional)
  3. Proxy Request PostFlow
  4. Target Request PreFlow
  5. Target Request Conditional Flows (Optional)
  6. Target Request PostFlow

Response Pipeline:

  1. Target Response PreFlow
  2. Target Response Conditional Flows (Optional)
  3. Target Response PostFlow
  4. Proxy Response PreFlow
  5. Proxy Response Conditional Flows (Optional)
  6. Proxy Response PostFlow
  7. PostClientFlow Response (Optional)

Only those Flows with policy attachments need to be configured in ProxyEndpoint or TargetEndpoint configurations. PreFlow and PostFlow need only be specified in a ProxyEndpoint or TargetEndpoint configuration when a policy needs to be enforced during PreFlow or PostFlow processing.

In contrast to conditional flows, the ordering of PreFlow and PostFlow elements is not important--the API proxy will always execute each at the appropriate point in the pipeline, regardless of where they appear in the Endpoint configuration.

Fluxos condicionais

Proxy endpoints and target endpoints support an unlimited number of conditional flows (also known as named flows ).

The API proxy tests for the condition specified in the conditional flow and, if the condition is met, the processing steps in the conditional flow are executed by the API proxy. If the condition is not met, then the processing steps in the conditional flow are bypassed. Conditional flows are evaluated in the order defined in the API proxy and the first one whose condition is met is executed.

By defining conditional flows, you gain the ability to apply processing steps in an API proxy based on:

  • URI de solicitação
  • HTTP verb ( GET / PUT / POST / DELETE )
  • Value of a query param, header, and form param
  • Many other types of conditions

For example, the following conditional flow specifies that it is executed only when the request resource path is /accesstoken . Any inbound request with the path /accesstoken causes this flow to be executed, along with any policies that are attached to the flow. If the request path does not include the suffix /accesstoken , then the flow does not execute (although another conditional flow might).

<Flows>
  <Flow name="TokenEndpoint">
    <Condition>proxy.pathsuffix MatchesPath "/accesstoken"</Condition>
    <Request>
      <Step>
        <Name>GenerateAccessToken</Name>
      </Step>
    </Request> 
  </Flow>
</Flows>   

Flow configuration elements

Nome Descrição Padrão Obrigatório?
Flow A request or response processing pipeline defined by a proxy endpoint or target endpoint
Name The unique name of the Flow. N / D Sim
Condition A conditional statement that evaluates one or more variables to evaluate to true or false. All Flows other than the predefined PreFlow and PostFlow types must define a condition for their execution. However, if you include a single flow without a condition at the end of a sequence of flows, it will act as the "Else" statement at the end of the sequence of flows. N / D Sim
Request The pipeline associated with Request message processing N / D Não
Response The pipeline associated with Response message processing N / D Não

Step processing

The sequential ordering of conditional Flows is enforced by Apigee. Conditional Flows execute from top to bottom. The first conditional Flow whose condition evaluates to true is executed, and only one conditional Flow is executed.

For example, in the following Flow configuration, any inbound request that does not include the path suffix /first or /second will cause the ThirdFlow to execute, enforcing the policy called 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

"Resources" (resource files for use in API proxies) are scripts, code, and XSL transformations that can be attached to Flows using policies. These appear in the Scripts section of the API proxy editor in the Apigee UI.

See Managing resources for the supported resource types.

Resources can be stored in an API proxy, an environment, or an organization. In each case, a resource is referenced by name in a Policy. Apigee resolves the name by moving from the API proxy, to environment, to organization level.

A resource stored at the organization level can be referenced by Policies in any environment. A resource stored at the environment level can be referenced by Policies in that environment. A resource stored at the API proxy level can be referenced only by Policies in that API proxy.