Norme relative a ExternalCallout

Questa pagina si applica a Apigee e Apigee ibridi.

Visualizza documentazione di Apigee Edge.

icona delle norme

Cosa

Il criterio ExternalCallout ti consente di inviare richieste gRPC al tuo server gRPC per implementare un comportamento personalizzato non supportato dai criteri Apigee. Nel codice del server, puoi accedere e modificare facilmente le variabili di flusso all'interno del flusso di un proxy.

Apigee comunica con un server gRPC tramite un criterio di callout esterno mediante un'API. Apigee utilizza l'API per inviare variabili di flusso al server gRPC. Nel server gRPC puoi leggere e, a seconda della variabile, modificare le variabili di flusso elencate nella pagina di riferimento Voci di flusso, nonché le variabili aggiuntive specificate nel file XML del criterio.

Se configuri il server gRPC con Apigee e includi questo criterio in un proxy, Apigee gestirà le richieste API nel seguente modo:

  1. Apigee invia un messaggio contenente le variabili di flusso al tuo server gRPC.
  2. Il codice del server gRPC viene eseguito, accedendo e modificando le variabili come definito nel codice. Il server gRPC quindi invia una risposta contenente tutte le variabili di flusso ad Apigee.
  3. Apigee legge la risposta dal server gRPC. Se vengono aggiunte variabili o se le variabili di flusso modificabili vengono modificate, queste vengono aggiornate in Apigee.

Questo criterio è un criterio standard e può essere implementato in qualsiasi tipo di ambiente. Per informazioni sui tipi di criteri e sulla disponibilità per ciascun tipo di ambiente, consulta Tipi di criteri.

Per scoprire di più sull'invio di richieste gRPC, consulta i seguenti link:

<ExternalCallout>

Definisce un criterio per i callout esterni.

<ExternalCallout async="true" continueOnError="true" enabled="true" name="EC">

Questo elemento ha i seguenti attributi comuni a tutti i criteri:

Attributo Predefinito Obbligatorio? Descrizione
name N/A Obbligatorio

Il nome interno del criterio. Il valore dell'attributo name può contenere lettere, numeri, spazi, trattini, trattini bassi e punti. Questo valore non può superare i 255 caratteri.

Facoltativamente, utilizza l'elemento <DisplayName> per etichettare il criterio nell'editor proxy dell'interfaccia utente di gestione con un nome diverso in linguaggio naturale.

continueOnError falso Facoltativo Imposta su false per restituire un errore in caso di errore del criterio. Questo è un comportamento previsto per la maggior parte dei criteri. Imposta su true per continuare l'esecuzione del flusso anche dopo un errore nel criterio. Vedi anche:
enabled true Facoltativo Imposta su true per applicare il criterio. Imposta su false per disattivare il criterio. Il criterio non verrà applicato anche se rimane collegato a un flusso.
async   falso Deprecato Questo attributo è stato ritirato.

Nella tabella seguente vengono descritti gli elementi secondari di <ExternalCallout>.

Elemento secondario Obbligatorio Descrizione
<TimeoutMs> Obbligatorio Il timeout della richiesta in millisecondi per le richieste gRPC.
<GrpcConnection> Obbligatorio Specifica il nome di un TargetServer esistente da utilizzare come server gRPC a cui inviare richieste.
<Configurations> Facoltativo Consente di configurare vari aspetti del criterio ExternalCallout, inclusi gli elementi <Property> e <FlowVariable>.

Esempio 1

Esempi pratici di callout esterni sono disponibili nella sezione External Callout Samples (Campioni di callout esterni) su GitHub.

L'esempio seguente illustra la configurazione di un criterio per i callout esterni.

<ExternalCallout enabled="true" continueOnError="false" name="ExternalCallout-1">
  <DisplayName>External Callout 1</DisplayName>
  <TimeoutMs>5000</TimeoutMs>
  <GrpcConnection>
    <Server name="external-target-server"/>
  </GrpcConnection>
  <Configurations>
    <Property name="with.request.content">true</Property>
    <Property name="with.request.headers">false</Property>
    <Property name="with.response.content">true</Property>
    <Property name="with.response.headers">false</Property>
    <FlowVariable>example1.flow.variable</FlowVariable>
    <FlowVariable>example2.flow.variable</FlowVariable>
  </Configurations>
<ExternalCallout>

L'esempio invia una richiesta a un server gRPC esterno rappresentato da TargetServer denominato external-target-server, con le seguenti configurazioni:

  • <Property>: includi i contenuti della richiesta e della risposta, ma non le intestazioni della richiesta e della risposta, nella richiesta inviata al server gRPC.
  • <FlowVariable>: includi dati aggiuntivi variabili di flusso example1.flow.variable e example2.flow.variable, specificato dagli elementi FlowVariable, nella richiesta inviata a gRPC server web.

Esempio 2

Nell'esempio seguente, l'attributo useTargetUrl dell'elemento Audience è impostato su true. Quando useTargetUrl è true, il nome host del server di destinazione gRPC viene utilizzato come pubblico. Ad esempio, se l'host del server è my-grpc-server-java.a.run.app, il segmento di pubblico utilizzato sarà https://my-grpc-server-java.a.run.app.

<ExternalCallout continueOnError="false" enabled="true" name="External-Callout-1">
  <DisplayName>External-Callout-1</DisplayName>
  <GrpcConnection>
    <Server name="cloud_run_server_name"/>
    <Authentication>
      <GoogleIDToken>
        <Audience useTargetUrl="true"/>
      </GoogleIDToken>
    </Authentication>
  </GrpcConnection>
  <TimeoutMs>5000</TimeoutMs>
  <Configurations>
    <Property name="with.request.content">true</Property>
    <Property name="with.request.headers">true</Property>
    <Property name="with.response.content">true</Property>
    <Property name="with.response.headers">true</Property>
    <FlowVariable>example.flow.variable</FlowVariable>
    <FlowVariable>another.flow.variable</FlowVariable>
  </Configurations>
</ExternalCallout>