Esta página se aplica à Apigee e à Apigee híbrida.
Confira a documentação da
Apigee Edge.
O que
A política ServiceCallout permite chamar outro serviço a partir do fluxo de proxy da API. É possível fazer chamadas para um serviço externo, como um endpoint de serviço RESTful externo, ou para serviços internos, como um proxy de API na mesma organização e ambiente.
Esta é uma política extensível. O uso dela pode ter implicações no custo ou na utilização, dependendo da sua licença da Apigee. Para informações sobre tipos de política e implicações de uso, consulte Tipos de política.
- Em um caso de uso externo, você faz uma chamada para uma API de terceiros externa ao seu proxy. A resposta da API de terceiros é analisada e inserida na mensagem de resposta da sua API, enriquecendo e mascarando os dados dos usuários finais do app. Também é possível fazer uma solicitação usando a política ServiceCallout no fluxo de solicitação e passar as informações na resposta para o TargetEndpoint do proxy de API.
- Em outro caso de uso, chame um proxy que esteja na mesma organização e ambiente do qual você está chamando. Isso pode ser útil, por exemplo, quando você tem um proxy que oferece alguma funcionalidade discreta de baixo nível que um ou mais proxies consumirão. Por exemplo, um proxy que expõe operações de criação/leitura/atualização/exclusão com um armazenamento de dados de back-end pode ser o proxy de destino para vários outros proxies que expõem os dados aos clientes.
A política aceita solicitações por HTTP e HTTPS.
Amostras
Chamada local para um proxy interno
<LocalTargetConnection> <APIProxy>data-manager</APIProxy> <ProxyEndpoint>default</ProxyEndpoint> </LocalTargetConnection>
Neste exemplo, é criada uma chamada para um proxy de API local (ou seja, na mesma organização e ambiente) denominada data-manager
, especificando o endpoint do proxy com o nome default
.
URL como uma variável
<HTTPTargetConnection> <URL>http://example.com/{request.myResourcePath}</URL> </HTTPTargetConnection>
Este exemplo usa uma variável no URL para preencher dinamicamente o URL do destino. A parte de protocolo do URL, http://
, não pode ser especificada por uma variável. Além disso, use variáveis separadas para a parte do domínio do URL e para o restante
do URL.
Solicitação de geocodificação/definição do Google
<ServiceCallout name="ServiceCallout-GeocodingRequest1"> <DisplayName>Inline request message</DisplayName> <Request variable="authenticationRequest"> <Set> <QueryParams> <QueryParam name="address">{request.queryparam.postalcode}</QueryParam> <QueryParam name="region">{request.queryparam.country}</QueryParam> <QueryParam name="sensor">false</QueryParam> </QueryParams> </Set> </Request> <Response>GeocodingResponse</Response> <Timeout>30000</Timeout> <HTTPTargetConnection> <URL>https://maps.googleapis.com/maps/api/geocode/json</URL> </HTTPTargetConnection> </ServiceCallout>
Em vez de usar uma política, como a política AssignMessage, para criar o objeto da solicitação, você pode defini-la diretamente na política ServiceCalling. Neste exemplo, a política ServiceCallout define os valores de três parâmetros de consulta passados para o serviço externo. É possível criar uma mensagem de solicitação inteira na política ServiceCallout que especifica um payload, um tipo de codificação, como application/xml
, cabeçalhos, parâmetros de formulário etc.
Veja outro exemplo em que a solicitação é formada antes de alcançar a política de ServiceCallout.
<ServiceCallout name="ServiceCallout-GeocodingRequest2"> <Request clearPayload="false" variable="GeocodingRequest"/> <Response>GeocodingResponse</Response> <Timeout>30000</Timeout> <HTTPTargetConnection> <URL>https://maps.googleapis.com/maps/api/geocode/json</URL> </HTTPTargetConnection> </ServiceCallout>
O conteúdo da mensagem de solicitação é extraído de uma variável chamada GeocodingRequest
, que pode ser preenchida, por exemplo, por uma política "AssignMessage". A mensagem de resposta é atribuída à variável chamada GeocodingResponse
, em que fica disponível para ser analisada por uma política de ExtractVariables ou por código personalizado escrito em JavaScript ou Java. A política aguarda 30 segundos para a resposta da API Google Geocoding antes de expirar.
Chamar servidores de destino
<ServiceCallout async="false" continueOnError="false" enabled="true" name="service-callout"> <DisplayName>service-callout</DisplayName> <Properties/> <Request clearPayload="true" variable="myRequest"> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </Request> <Response>myResponse</Response> <HTTPTargetConnection> <LoadBalancer> <Algorithm>RoundRobin</Algorithm> <Server name="httpbin"/> <Server name="yahoo"/> </LoadBalancer> <Path>/get</Path> </HTTPTargetConnection> </ServiceCallout>
Esta política usa o atributo LoadBalancer para chamar os servidores de destino e fazer o balanceamento de carga entre eles. Neste exemplo, a carga é distribuída em dois servidores de destino chamados httpbin
e yahoo
. Consulte Balanceamento de carga entre servidores de back-end para mais informações sobre como configurar servidores de destino para o proxy e como configurar o balanceamento de carga.
Sobre a política de ServiceCallout
Há muitos cenários em que é possível usar uma política de ServiceCallout no proxy de API. Por exemplo, você pode configurar um proxy de API para fazer chamadas a um serviço externo para fornecer dados de geolocalização, avaliações de clientes, itens do catálogo de varejo de um parceiro e assim por diante.
Geralmente, uma chamada é usada com duas outras políticas: AssignMessage e ExtractVariables.
- Solicitação: a opção AssignMessage preenche a mensagem de solicitação enviada ao serviço remoto.
-
Resposta: ExtractVariables analisa a resposta e extrai o conteúdo específico.
A composição comum da política de ServiceCallout envolve:
- Política AssignMessage: cria uma mensagem de solicitação, preenche os cabeçalhos HTTP, os parâmetros de consulta, define o verbo HTTP etc.
-
Política ServiceCallout: refere-se a uma mensagem criada pela política AssignMessage, define um URL de destino para a chamada externa e define um nome para o objeto de resposta retornado pelo serviço de destino.
Para melhorar o desempenho, você também pode armazenar em cache as respostas do ServiceCallout, conforme descrito em Como posso armazenar os resultados da política ServiceCalling no cache? e, mais tarde, recuperá-los do cache?
- Política de ExtractVariables: normalmente, define uma expressão JSONPath ou XPath que analisa a mensagem gerada pela ServiceCallout. Em seguida, a política define as variáveis que contêm os valores analisados da resposta da ServiceCallout.
Como resolver erros personalizados
Referência de elemento
Veja a seguir elementos e atributos que podem ser configurados com esta política:
<ServiceCallout async="false" continueOnError="false" enabled="true" name="Service-Callout-1"> <DisplayName>Custom label used in UI</DisplayName> <Request clearPayload="true" variable="myRequest"> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <Remove> <StatusCode/> <Path/> <Version/> <Verb/> </Remove> <Copy> <StatusCode/> <Path/> <Version/> <Verb/> </Copy> <Add> <Headers/> <QueryParams/> <FormParams/> </Add> <Set> <Headers/> <QueryParams/> <FormParams/> <Payload/> <StatusCode/> <Path/> <Version/> <Verb/> </Set> </Request> <Response>calloutResponse</Response> <Timeout>30000</Timeout> <HTTPTargetConnection> <URL>http://example.com</URL> <LoadBalancer/> <SSLInfo/> <Properties/> <Authentication> <HeaderName ref="{variable}">STRING</HeaderName> <GoogleAccessToken> <Scopes> <Scope>https://www.googleapis.com/auth/cloud-platform</Scope> </Scopes> <LifetimeInSeconds ref="{variable}">3600</LifetimeInSeconds> </GoogleAccessToken> </Authentication> <Authentication> <HeaderName ref="{variable}">STRING</HeaderName> <GoogleIDToken> <Audience ref="{variable}" useTargetUrl="BOOLEAN">{hostname}</Audience> <IncludeEmail ref="{variable}">true</IncludeEmail> </GoogleIDToken> </Authentication> </HTTPTargetConnection> <LocalTargetConnection> <APIProxy/> <ProxyEndpoint/> <Path/> </LocalTargetConnection> </ServiceCallout>
Atributos <ServiceCallout>
<ServiceCallout async="false" continueOnError="false" enabled="true" name="Service-Callout-1">
A tabela a seguir descreve atributos comuns a todos os elementos pai de políticas:
Atributo | Descrição | Padrão | Presença |
---|---|---|---|
name |
O nome interno da política. O valor do atributo Opcionalmente, use o elemento |
N/A | Obrigatório |
continueOnError |
Defina como Defina como |
falso | Opcional |
enabled |
Defina como Defina como |
verdadeiro | Opcional |
async |
Esse atributo está obsoleto. |
falso | Descontinuado |
Elemento <DisplayName>
Use em conjunto com o atributo name
para rotular a política no
editor de proxy da IU de gerenciamento com um nome de linguagem natural diferente.
<DisplayName>Policy Display Name</DisplayName>
Padrão |
N/A Se você omitir esse elemento, será usado o valor do atributo |
---|---|
Presença | Opcional |
Tipo | String |
Elemento <Request>
Especifica a variável que contém a mensagem de solicitação enviada do proxy de API para o outro serviço. A variável pode ser criada por uma política anterior no fluxo, ou você pode criá-la inline na política de ServiceCallout.
<Request clearPayload="true" variable="myRequest"> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <Remove> <StatusCode/> <Path/> <Version/> <Verb/> </Remove> <Copy> <StatusCode/> <Path/> <Version/> <Verb/> </Copy> <Add> <Headers/> <QueryParams/> <FormParams/> </Add> <Set> <Headers/> <QueryParams/> <FormParams/> <Payload/> <StatusCode/> <Path/> <Version/> <Verb/> </Set> </Request>
A sintaxe das tags <Remove>, <Copy>, <Add> e <Set> é a mesma que a da política AssignMessage.
A política retornará um erro se a mensagem de solicitação não puder ser resolvida ou for de um tipo de mensagem de solicitação inválido.
No exemplo mais simples, você transmite uma variável contendo a mensagem de solicitação que foi preenchida anteriormente no fluxo do proxy de API:
<Request clearPayload="true" variable="myRequest"/>
Também é possível preencher a mensagem de solicitação enviada ao serviço externo na própria política de ServiceCallout:
<Request> <Set> <Headers> <Header name="Accept">application/json</Header> </Headers> <Verb>POST</Verb> <Payload contentType="application/json">{"message":"my test message"}</Payload> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </Request>
Padrão | Se você omitir o elemento Request ou qualquer um dos atributos dele, a Apigee atribuirá os seguintes valores padrão: <Request clearPayload="true" variable="servicecallout.request"/> Vejamos o que esses valores padrão significam. Primeiro,
É importante saber sobre esse nome padrão se você estiver usando mascaramento de dados. Se você omitir o nome da variável, será necessário adicionar |
Presença | Opcional. |
Tipo | N/A |
Atributos
Atributo | Descrição | Padrão | Presença |
---|---|---|---|
variável |
Nome da variável que conterá a mensagem de solicitação. |
servicecallout.request |
Opcional |
clearPayload |
Se Defina a opção clearPayload como "false" somente se a mensagem de solicitação for necessária depois que a ServiceCallout for executada. |
verdadeiro | Opcional |
Elemento <Request>/<IgnoreUnresolvedVariables>
Quando definido como true, a política ignora qualquer erro de variável não resolvido na solicitação.
<Request clearPayload="true" variable="myRequest"> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </Request>
Padrão | falso |
Presença | Opcional |
Tipo | Booleano |
Elemento <Response>
Inclua esse elemento quando a lógica do proxy de API requer a resposta da chamada remota para processamento adicional.
Quando esse elemento está presente, ele especifica o nome da variável que conterá a mensagem de resposta recebida do serviço externo. A resposta do destino é atribuída à variável somente quando a resposta inteira é lida pela política. Se a chamada remota falhar por qualquer motivo, a política retornará um erro.
Se esse elemento for omitido, o proxy de API não aguardará a resposta. A execução do fluxo do proxy de API continua com todas as etapas subsequentes do fluxo. Além disso, para declarar o óbvio, sem um elemento Response
, a resposta do destino não está disponível para processamento nas etapas subsequentes e não há como o fluxo de proxy detectar uma falha na chamada remota.
Um uso comum para omitir o elemento Response
ao usar ServiceCallout é registrar as mensagens em um sistema externo.
<Response>calloutResponse</Response>
Padrão | NA |
Presença | Opcional |
Tipo | String |
Elemento <Timeout>
O tempo em milésimos de segundo em que a política de ServiceCallout aguardará uma resposta do destino. Não é possível definir esse valor dinamicamente no ambiente de execução. Se a ServiceCallout atingir um tempo limite, um HTTP 500 será retornado, a política falhará e o proxy de API entrará em um estado de erro, conforme descrito em Como solucionar falhas.
<Timeout>30000</Timeout>
Padrão | 55.000 milissegundos (55 segundos), a configuração de tempo limite HTTP padrão da Apigee |
Presença | Opcional |
Tipo | Número inteiro |
Elemento <HTTPTargetConnection>
Fornece detalhes de transporte, como propriedades URL, TLS/SSL e HTTP. Consulte a referência de configuração do <TargetEndpoint>
.
<HTTPTargetConnection> <URL>http://example.com</URL> <LoadBalancer/> <SSLInfo/> <Properties/> </HTTPTargetConnection>
Padrão | N/A |
Presença | Obrigatório |
Tipo | N/A |
<HTTPTargetConnection>/<Authentication> element
Gera tokens do Google OAuth 2.0 ou do OpenID Connect emitidos pelo Google para fazer chamadas autenticadas para serviços do Google e serviços personalizados em execução em determinados produtos do Google Cloud. , como Cloud Functions e Cloud Run. O uso desse elemento requer etapas de configuração e implantação descritas em Como usar a autenticação do Google. Com a configuração adequada, a política cria um token de autenticação para você e o adiciona à solicitação de serviço.
Os elementos filhos, GoogleAccessToken
e GoogleIDToken
, permitem
configurar a política para gerar tokens do Google OAuth ou do OpenID Connect. Você precisa escolher um desses elementos filhos, dependendo do tipo de serviço que quer chamar.
A política ServiceCallout é compatível apenas com a chamada de serviços baseados em HTTP.
Padrão | N/A |
Obrigatório? | Opcional. |
Tipo | Tipo complexo |
Elemento pai | <HTTPTargetConnection> |
Elemento filho | <HeaderName> <GoogleAccessToken> <GoogleIDToken>
|
O elemento Authentication
usa a seguinte sintaxe:
Sintaxe
<ServiceCallout> ... <HTTPTargetConnection> <Authentication> <HeaderName ref="FLOW_VARIABLE">STRING</HeaderName> <GoogleAccessToken> <Scopes> <Scope>SCOPE</Scope> ... </Scopes> <!-- NOTE: The default value for LifetimeInSeconds is 3600. Change the default only if you want to limit the risk of leaked access tokens or improve performance. --> <LifetimeInSeconds ref="{variable}">INTEGER</LifetimeInSeconds> </GoogleAccessToken> --OR-- <HeaderName ref="FLOW_VARIABLE">STRING</HeaderName> <GoogleIDToken> <Audience ref="{variable}" useTargetUrl="BOOLEAN">STRING</Audience> <IncludeEmail ref="{variable}">BOOLEAN</IncludeEmail> </GoogleIDToken> </Authentication> </HTTPTargetConnection> </ServiceCallout>
Como usar o GoogleAccessToken
O exemplo a seguir mostra o elemento GoogleAccessToken
:
<Authentication> <GoogleAccessToken> <Scopes> <Scope>https://www.googleapis.com/auth/cloud-platform</Scope> </Scopes> </GoogleAccessToken> </Authentication>
Como usar o GoogleIDToken
O exemplo a seguir mostra o elemento GoogleIDToken
:
<Authentication> <GoogleIDToken> <Audience>https://httpserver0-bar.run.app</Audience> <IncludeEmail>false</IncludeEmail> </GoogleIDToken> </Authentication>
Usando HeaderName
O exemplo a seguir mostra o elemento HeaderName
:
<Authentication> <HeaderName>X-Serverless-Authorization</HeaderName> <GoogleAccessToken> <Scopes> <Scope>"https://www.googleapis.com/auth/cloud-platform"</Scope> </Scopes> </GoogleAccessToken> </Authentication>
Como usar LifeInSeconds
O exemplo a seguir mostra o elemento HeaderName
:
<Authentication> <GoogleAccessToken> <Scopes> <Scope>"https://www.googleapis.com/auth/cloud-platform"</Scope> </Scopes> <LifetimeInSeconds ref="variable">3600</LifetimeInSeconds> </GoogleAccessToken> </Authentication>
Atributos
Nenhuma.
Elemento filho HeaderName
Por padrão, quando uma configuração de autenticação está presente, a Apigee gera um token do portador
e o injeta no cabeçalho Authorization
na mensagem enviada ao sistema de destino.
O elemento HeaderName
permite especificar o nome de um cabeçalho diferente para armazenar o token do portador. Esse recurso é particularmente útil quando o destino é um serviço do Cloud Run que usa o cabeçalho X-Serverless-Authorization
. O cabeçalho Authorization
,
se presente, não é modificado e também é enviado na solicitação.
Padrão | N/A |
Obrigatório? | Não |
Tipo | String |
Elemento pai | <Authentication> |
Elemento filho | Nenhum |
O elemento HeaderName
usa a seguinte sintaxe:
Sintaxe
<ServiceCallout> ... <Authentication> <HeaderName ref="FLOW_VARIABLE">STRING</HeaderName> <GoogleAccessToken> ... </GoogleAccessToken> </Authentication> ... </ServiceCallout>
Com string estática
Neste exemplo, o token do portador gerado é adicionado, por padrão, a um cabeçalho chamado X-Serverless-Authorization
, que é enviado ao sistema de destino. O cabeçalho Authorization
,
se presente, não é modificado e também é enviado na solicitação.
<Authentication> <HeaderName>X-Serverless-Authorization</HeaderName> <GoogleAccessToken> <Scopes> <Scope>https://www.googleapis.com/auth/cloud-platform</Scope> </Scopes> </GoogleAccessToken> </Authentication>
Com referência de variável
Neste exemplo, o token do portador gerado é adicionado, por padrão, a um cabeçalho chamado X-Serverless-Authorization
, que é enviado ao sistema de destino. Se my-variable
tiver um valor, esse valor será usado no lugar da string padrão. O cabeçalho Authorization
,
se presente, não é modificado e também é enviado na solicitação.
<Authentication> <HeaderName ref='my-variable'>X-Serverless-Authorization</HeaderName> <GoogleAccessToken> <Scopes> <Scope>https://www.googleapis.com/auth/cloud-platform</Scope> </Scopes> </GoogleAccessToken> </Authentication>
Elemento filho GoogleAccessToken
gera tokens Google OAuth 2.0 (em inglês) para fazer chamadas autenticadas aos serviços do Google. Os tokens OAuth do Google podem ser usados para chamar muitos tipos de serviços do Google, como Cloud Logging e Gerenciador de secrets.
Padrão | N/A |
Obrigatório? | O elemento filho GoogleAccessToken ou GoogleIDToken precisa estar presente. |
Tipo | String |
Elemento pai | <Authentication> |
Elemento filho | <Scopes> <LifetimeInSeconds> |
O elemento GoogleAccessToken
usa a seguinte sintaxe:
Sintaxe
<ServiceCallout> ... <Authentication> <GoogleAccessToken> <Scopes> <Scope>SCOPE_1</Scope> ... </Scopes> <!-- NOTE: The default value for LifetimeInSeconds is 3600. We do not recommend changing the default unless you want to limit the risk of leaked access tokens or improve performance. --> <LifetimeInSeconds ref="FLOW_VARIABLE">INTEGER</LifetimeInSeconds> </GoogleAccessToken> </Authentication> ... </ServiceCallout>
Exemplo 1
O exemplo a seguir mostra o elemento GoogleAccessToken
:
<Authentication> <GoogleAccessToken> <Scopes> <Scope>https://www.googleapis.com/auth/cloud-platform</Scope> </Scopes> </GoogleAccessToken> </Authentication>
Exemplo 2
O exemplo a seguir mostra como se conectar ao gerenciador de secrets para recuperar um secret usando a política ServiceCallout.
<ServiceCallout name="ServiceCallout-sm"> <Response>SecretManagerResponse</Response> <Timeout>30000</Timeout> <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> </ServiceCallout>
Exemplo 3
O exemplo a seguir mostra como fazer uma chamada para o Cloud pela política ServiceCallout.
<ServiceCallout name="ServiceCallout-CloudRun"> <Response>CloudRunResponse</Response> <Timeout>30000</Timeout> <HTTPTargetConnection> <Authentication> <GoogleIDToken> <Audience>https://cloudrun-hostname.a.run.app/test</Audience> </GoogleIDToken> </Authentication> <URL>https://cloudrun-hostname.a.run.app/test</URL> </HTTPTargetConnection> </ServiceCallout>
Elemento filho Scopes
Identifica os escopos a serem incluídos no token de acesso do OAuth 2.0. Para mais informações, consulte
Escopos do OAuth 2.0 para APIs do Google. É possível adicionar um ou mais elementos filhos <Scope>
nesse elemento.
Padrão | N/A |
Obrigatório? | Obrigatório |
Tipo | String |
Elemento pai | <GoogleAccessToken> |
Elemento filho | <Scope> |
Elemento filho Scope
Especifica um escopo válido de API do Google. Para mais informações, consulte Escopos do OAuth 2.0 para APIs do Google.
Padrão | N/A |
Obrigatório? | Ao menos um valor é obrigatório. |
Tipo | String |
Elemento pai | <Scopes> |
Elemento filho | Nenhuma. |
Elemento filho LifetimeInSeconds
Especifica a duração do token de acesso em segundos.
Padrão | 3600 |
Obrigatório? | Opcional |
Tipo | Número inteiro |
Elemento pai | <GoogleAccessToken> |
Elemento filho | Nenhuma. |
Elemento filho GoogleIDToken
gera tokens OpenID Connect emitidos pelo Google para fazer chamadas autenticadas aos serviços do Google;
Padrão | N/A |
Obrigatório? | O elemento filho GoogleAccessToken ou GoogleIDToken precisa estar presente. |
Tipo | String |
Elemento pai | <Authentication> |
Elemento filho | <Audience> <IncludeEmail> |
O elemento GoogleIDToken
usa a seguinte sintaxe:
Sintaxe
<ServiceCallout> ... <Authentication> <GoogleIDToken> <Audience ref="{variable}" useTargetUrl="BOOLEAN">STRING</Audience> <IncludeEmail ref="{variable}">BOOLEAN</IncludeEmail> </GoogleIDToken> </Authentication> </ServiceCallout>
Exemplo 1
O exemplo a seguir mostra o elemento GoogleIDToken
:
<Authentication> <GoogleIDToken> <Audience>https://httpserver0-bar.run.app</Audience> <IncludeEmail>true</IncludeEmail> </GoogleIDToken> </Authentication>
Elemento filho Audience
O público-alvo do token de autenticação gerado, como a API ou a conta à qual o token concede acesso.
Se o valor de Audience
estiver vazio ou a variável ref
não for resolvida como um valor válido e useTargetUrl
for true
, o URL de destino (excluindo qualquer parâmetro de consulta) é usado como público-alvo. Por padrão, useTargetUrl
é false
.
<Audience>explicit-audience-value-here</Audience> or: <Audience ref='variable-name-here'/> or: <Audience ref='variable-name-here' useTargetUrl='true'/> or: <Audience useTargetUrl='true'/>
Padrão | N/A |
Obrigatório? | Obrigatório |
Tipo | String |
Elemento pai | <GoogleIDToken> |
Elemento filho | Nenhuma. |
Elemento filho IncludeEmail
Se definido como true
, o token de autenticação gerado conterá as declarações email
e email_verified
da conta de serviço.
Padrão | falso |
Obrigatório? | Opcional |
Tipo | Booleano |
Elemento pai | <GoogleIDToken> |
Elemento filho | Nenhuma. |
Elemento <HTTPTargetConnection>/<URL>
O URL do serviço que está sendo chamado:
<HTTPTargetConnection> <URL>http://example.com</URL> </HTTPTargetConnection>
Você pode fornecer parte do URL dinamicamente com uma variável. No entanto, a parte de protocolo do URL, http:// abaixo, não pode ser especificada por uma variável. No próximo exemplo, você usa uma variável para especificar o valor de um parâmetro de consulta:
<URL>http://example.com/forecastrss?w=${request.header.woeid}</URL>
Se preferir, defina uma parte do caminho do URL com uma variável:
<URL>http://example.com/{request.resourcePath}?w=${request.header.woeid}</URL>
Se você quiser usar uma variável para especificar o domínio e a porta do URL, use uma variável somente para o domínio e a porta e uma segunda variável para qualquer outra parte do URL:
<URL>http://{request.dom_port}/{request.resourcePath}</URL>
Padrão | N/A |
Presença | Obrigatório |
Tipo | String |
Elemento <HTTPTargetConnection>/<SSLInfo>
A configuração de TLS/SSL para o serviço de back-end. Para ter ajuda sobre a configuração de TLS/SSL, consulte Opções para configurar TLS e "Configuração de endpoint de destino TLS/SSL" na referência de configuração do proxy da API.
<HTTPTargetConnection> <URL>https://example.com</URL> <SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>true</ClientAuthEnabled> <KeyStore>ref://mykeystoreref</KeyStore> ## Use of a reference is recommended <KeyAlias>myKey</KeyAlias> <TrustStore>myTruststore</TrustStore> <Ciphers/> <Protocols/> </SSLInfo> </HTTPTargetConnection>
Padrão | N/A |
Presença | Opcional |
Tipo | N/A |
Elemento <HTTPTargetConnection>/<Properties>
Propriedades de transporte HTTP para o serviço de back-end. Para mais informações, consulte a Referência das propriedades de endpoint.
<HTTPTargetConnection> <URL>http://example.com</URL> <Properties> <Property name="allow.http10">true</Property> <Property name="request.retain.headers"> User-Agent,Referer,Accept-Language </Property> </Properties> </HTTPTargetConnection>
Padrão | N/A |
Presença | Opcional |
Tipo | N/A |
Elemento <HTTPTargetConnection>/<LoadBalancer>
Chame um ou mais servidores de destino e faça o balanceamento de carga neles. Veja o exemplo de Servidores de destino de chamada na seção "Amostras". Consulte também Balanceamento de carga entre servidores de back-end. Consulte também endpoint de destino/frase de destaque do servidor que discute maneiras de chamar servidores de destino a partir da política ServiceCalling e usando regras de rota
<HTTPTargetConnection> <LoadBalancer> <Algorithm>RoundRobin</Algorithm> <Server name="httpbin"/> <Server name="yahoo"/> </LoadBalancer> <Path>/get</Path> </HTTPTargetConnection>
Padrão | N/A |
Presença | Opcional |
Tipo | N/A |
Elemento <LocalTargetConnection>
Especifica um proxy local, ou seja, um proxy na mesma organização e ambiente, como o destino das chamadas de serviço.
Para especificar o destino em mais detalhes, use os elementos <APIProxy>
e <ProxyEndpoint>
ou o elemento <Path>
.
<LocalTargetConnection> <APIProxy/> <ProxyEndpoint/> <Path/> </LocalTargetConnection>
Padrão | N/A |
Presença | Obrigatório |
Tipo | N/A |
Elemento <LocalTargetConnection>/<APIProxy>
O nome de um proxy de API que é o destino de uma chamada local. O proxy precisa estar na mesma organização e ambiente que o proxy que está fazendo a chamada.
<LocalTargetConnection> <APIProxy>data-manager</APIProxy> <ProxyEndpoint>default</ProxyEndpoint> </LocalTargetConnection>
Junto com o elemento <APIProxy>
, inclua o elemento <ProxyEndpoint>
para especificar o nome do endpoint de proxy que precisa ser direcionado para a chamada.
<LocalTargetConnection> <APIProxy/> <ProxyEndpoint/> </LocalTargetConnection>
Padrão | N/A |
Presença | Obrigatório |
Tipo | String |
Elemento <LocalTargetConnection>/<ProxyEndpoint>
O nome do endpoint do proxy que precisa ser o destino das chamadas. Esse é um endpoint de proxy no proxy de API especificado com o elemento <APIProxy>
.
<LocalTargetConnection> <APIProxy>data-manager</APIProxy> <ProxyEndpoint>default</ProxyEndpoint> </LocalTargetConnection>
Padrão | N/A |
Presença | Opcional |
Tipo | N/A |
Elemento <LocalTargetConnection>/<Path>
Um caminho para o endpoint que está sendo direcionado. O endpoint precisa se referir a um proxy na mesma organização e ambiente que o proxy que está fazendo a chamada.
Use-o em vez de um par <APIProxy>/<ProxyEndpoint>
quando você não souber o nome do proxy, ou não puder confiar nele. O caminho pode ser um destino confiável.
<LocalTargetConnection> <Path>/data-manager</Path> </LocalTargetConnection>
Padrão | N/A |
Presença | Opcional |
Tipo | N/A |
Esquemas
Variáveis de fluxo
As variáveis de fluxo permitem o comportamento dinâmico de políticas e fluxos no ambiente de execução, com base em cabeçalhos HTTP, conteúdo de mensagens ou contexto de fluxo. As variáveis de fluxo predefinidas a seguir estarão disponíveis depois que uma política de ServiceCallout for executada. Para mais informações sobre variáveis de fluxo, consulte a esta referência.
As ServiceCallouts têm uma solicitação e uma resposta próprias, e é possível acessar esses dados por meio de variáveis. Como a mensagem principal está usando os prefixos de variável request.*
e response.*
, use os prefixos myrequest.*
e calloutResponse.*
(os padrões na configuração da ServiceCallout) para acessar os dados da mensagem específicos da ServiceCallout. O primeiro exemplo na tabela a seguir mostra como você recebe os cabeçalhos HTTP na ServiceCallout.
Variável | Descrição |
---|---|
Veja abaixo um exemplo de como conseguir os cabeçalhos de solicitação e de ServiceCallout da mesma forma como você faz com os cabeçalhos da solicitação principal e da resposta.
em que calloutResponse é o nome da variável da resposta na chamada de serviço, e calloutResponse é o nome da variável da solicitação. Por exemplo:
retorna o cabeçalho Content-Length da resposta da ServiceCallout. |
Escopo: com base no encaminhamento da ServiceCallout Um cabeçalho de mensagem na solicitação ou resposta de ServiceCallout. Por exemplo, se o destino do proxy de API for http://example.com e o destino da ServiceCallout for http://mocktarget.apigee.net, essas variáveis serão os cabeçalhos da chamada para http://mocktarget.apigee.net. |
servicecallout.requesturi |
Escopo: com base no encaminhamento da solicitação de ServiceCallout O URI TargetEndpoint de uma política ServiceCallout. O URI é o URL TargetEndpoint sem a especificação do protocolo e do domínio. |
servicecallout.{policy-name}.target.url |
Escopo: com base no encaminhamento da solicitação de ServiceCallout O URL de destino de uma ServiceCallout. |
em que |
Escopo: com base no encaminhamento da resposta da ServiceCallout O corpo da resposta da ServiceCallout. |
servicecallout.{policy-name}.expectedcn |
Escopo: com base no encaminhamento da solicitação de ServiceCallout O nome comum esperado do TargetEndpoint, conforme mencionado em uma política ServiceCallout. Isso é significativo somente quando o TargetEndpoint se refere a um endpoint TLS/SSL. |
servicecallout.{policy-name}.failed |
Escopo: com base no encaminhamento da resposta da ServiceCallout Booleano que indica se a política foi concluída, é falsa ou falhou. |
Erros
Esta seção descreve os códigos de falha e as mensagens de erro que são retornadas e as variáveis de falha definidas pela Apigee quando essa política aciona um erro. Essas informações são importantes para saber se você está desenvolvendo regras de falha para lidar com falhas. Para saber mais, consulte O que você precisa saber sobre erros de política e Como lidar com falhas.
Erros de execução
Esses erros podem ocorrer quando a política é executada.
Código de falha | Status HTTP | Causa | Corrigir |
---|---|---|---|
steps.servicecallout.ExecutionFailed |
500 |
Esse erro pode ocorrer quando:
|
build |
steps.servicecallout.RequestVariableNotMessageType |
500 |
A variável Request especificada na política não é do tipo Message . Por exemplo, no caso de uma string ou outro tipo de mensagem que não é uma mensagem, você vê esse erro. |
build |
steps.servicecallout.RequestVariableNotRequestMessageType |
500 |
A variável Request especificada na política não é do tipo RequestMessage . Por exemplo, se for um tipo de resposta, você verá esse erro. |
build |
googletoken.EmptyIDTokenAudience |
500 |
|
|
messaging.adaptors.http.filter.GoogleTokenGenerationFailure |
500 |
Esse erro pode acontecer se o proxy de API estiver configurado com o elemento <Authentication>. Estas são as possíveis causas:
<GoogleAccessToken> é usado e um ou mais escopos inválidos são fornecidos. Por exemplo, procure erros de digitação ou escopos vazios.
Somente para a Apigee híbrida, verifique o registro do contêiner de ambiente de execução e procure
|
Erros na implantação
Esses erros podem ocorrer quando você implanta um proxy que contém esta política.
Nome do erro | Causa | Corrigir |
---|---|---|
URLMissing |
O elemento <URL> dentro de <HTTPTargetConnection> está ausente ou vazio. |
build |
ConnectionInfoMissing |
Esse erro ocorrerá se a política não tiver um elemento <HTTPTargetConnection> ou <LocalTargetConnection> . |
build |
InvalidTimeoutValue |
Este erro ocorrerá se o valor <Timeout> for negativo ou zero. |
build |
FAILED_PRECONDITION |
Esse erro ocorrerá se a conta de serviço estiver ausente quando o proxy estiver configurado com a tag <Authentication>.
Exemplo: Deployment of \"organizations/foo/apis/apiproxy/revisions/1\" requires a service account identity, but one was not provided with the request. |
|
PERMISSION_DENIED |
Esse erro ocorrerá se houver um problema de permissão com a conta de serviço se o proxy estiver configurado com a tag <Authentication>. Causas possíveis:
|
Variáveis de falha
Essas variáveis são definidas quando ocorre um erro de tempo de execução. Para mais informações, consulte O que você precisa saber sobre erros de política.
Variáveis | Onde | Exemplo |
---|---|---|
fault.name="fault_name" |
fault_name é o nome da falha, conforme listado na tabela Erros de ambiente de execução acima. O nome da falha é a última parte do código de falha. | fault.name = "RequestVariableNotMessageType" |
servicecallout.policy_name.failed |
policy_name é o nome especificado pelo usuário da política que causou a falha. | servicecallout.SC-GetUserData.failed = true |
Exemplo de resposta de erro
{ "fault":{ "detail":{ "errorcode":"steps.servicecallout.RequestVariableNotMessageType" }, "faultstring":"ServiceCallout[ServiceCalloutGetMockResponse]: request variable data_str value is not of type Message" } }
Exemplo de regra de falha
<FaultRule name="RequestVariableNotMessageType"> <Step> <Name>AM-RequestVariableNotMessageType</Name> </Step> <Condition>(fault.name = "RequestVariableNotMessageType")</Condition> </FaultRule>
Temas relacionados
- Gerar ou modificar mensagens: Política de AssignMessage
- Extrair variáveis: Política de ExtractVariables
- Variáveis: Referência de variáveis de fluxo
- Configuração de TLS/SSL
- Opções para configurar o TLS
- "Configuração do TargetEndpoint de TLS/SSL" na Referência de configuração de proxy de API
- Propriedades de transporte HTTP: Referência das propriedades de endpoint
- Alternativa para ServiceCallout: HTTPClient escrito em JavaScript. Consulte Modelo de objeto JavaScript.