Criterio Assegna Messaggi

Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione Documentazione di Apigee X.
Informazioni

Cosa

Il criterioAssignMessage modifica o crea nuovi messaggi di richiesta e risposta durante il flusso del proxy API. Il criterio consente di eseguire le azioni seguenti sui messaggi:

  • Aggiungere nuovi parametri di modulo, intestazioni o parametri di ricerca a un messaggio.
  • Copiare proprietà esistenti da un messaggio all'altro
  • Rimuovi intestazioni, parametri di query, parametri del modulo e/o messaggio payload da un messaggio
  • Imposta il valore delle proprietà esistenti in un messaggio

Con il criterioAssignMessage, in genere puoi aggiungere, modificare o rimuovere le proprietà dei una richiesta o una risposta. Tuttavia, puoi anche utilizzare il criterioAssignMessage per creare un un messaggio di richiesta o risposta e passarlo a una destinazione alternativa, come descritto in Creare messaggi di richiesta personalizzati.

Il criterioAssignMessage può creare o modificare variabili di flusso con il seguente elemento figlio elementi:

<AssignMessage> elemento

Definisce un criterioAssignMessage.

Valore predefinito Consulta la scheda Criterio predefinito di seguito
Obbligatorio? Obbligatorio
Tipo Oggetto complesso
Elemento principale n/d
Elementi secondari <Add>
<AssignTo>
<AssignVariable>
<Copy>
<DisplayName>
<IgnoreUnresolvedVariables>
<Remove>
<Set>

L'elemento <AssignMessage> utilizza la seguente sintassi:

Sintassi

L'elemento <AssignMessage> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <!-- All AssignMessage child elements are optional -->
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>

  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>

  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
    <Value>variable_value</Value>
  </AssignVariable>

  <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>[false|true]</Path>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>[false|true]</ReasonPhrase>
    <StatusCode>[false|true]</StatusCode>
    <Verb>[false|true]</Verb>
    <Version>[false|true]</Version>
  </Copy>

  <DisplayName>policy_display_name</DisplayName>

  <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>

  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>

  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>path</Path>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>

</AssignMessage>

Criterio predefinito

L'esempio seguente mostra le impostazioni predefinite quando aggiungi un criterioAssignMessage al flusso nella UI di Edge:

<AssignMessage continueOnError="false" enabled="true" name="assign-message-default">
  <DisplayName>Assign Message-1</DisplayName>
  <Properties/>
  <Copy source="request">
    <Headers/>
    <QueryParams/>
    <FormParams/>
    <Payload/>
    <Verb/>
    <StatusCode/>
    <ReasonPhrase/>
    <Path/>
  </Copy>
  <Remove>
    <Headers>
      <Header name="h1"/>
    </Headers>
    <QueryParams>
      <QueryParam name="q1"/>
    </QueryParams>
    <FormParams>
      <FormParam name="f1"/>
    </FormParams>
    <Payload/>
  </Remove>
  <Add>
    <Headers/>
    <QueryParams/>
    <FormParams/>
  </Add>
  <Set>
    <Headers/>
    <QueryParams/>
    <FormParams/>
    <!-- <Verb>GET</Verb> -->
    <Path/>
  </Set>
  <AssignVariable>
    <Name>name</Name>
    <Value/>
    <Ref/>
  </AssignVariable>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Quando si inserisce un nuovo criterioAssignMessage nella UI di Edge, il modello contiene stub per tutti le possibili operazioni. In genere, devi selezionare le operazioni che vuoi eseguire con questo criterio e rimuovi gli altri elementi secondari. Ad esempio, se vuoi eseguire un'operazione di copia, utilizza il metodo <Copy> e rimuovi <Add>, <Remove> e altri elementi secondari da per renderlo più leggibile.

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

Attributo Predefinita Obbligatorio? Description (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ò contenere più di 255 caratteri.

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

continueOnError false Facoltativo Imposta su "false" per restituire un errore quando un criterio non va a buon fine. Si tratta di un comportamento previsto per la maggior parte dei criteri. Impostalo su "true" per far sì che l'esecuzione del flusso continui anche dopo l'esito negativo di un criterio.
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   false Deprecazione Questo attributo è obsoleto.

La tabella seguente fornisce una descrizione generale degli elementi secondari di <AssignMessage>:

Elemento secondario Obbligatorio? Descrizione
Operazioni comuni
<Add> Facoltativo Aggiunge informazioni all'oggetto del messaggio specificato dall'oggetto <AssignTo>.

<Add> aggiunge al messaggio intestazioni o parametri che non esistono nell'originale . Per sovrascrivere le intestazioni o i parametri esistenti, utilizza l'elemento <Set>.

<Copy> Facoltativo Copia le informazioni dal messaggio specificato dall'source all'oggetto del messaggio specificato dall'elemento <AssignTo>.
<Remove> Facoltativo Elimina gli elementi specificati dalla variabile di messaggio specificata in Elemento <AssignTo>.
<Set> Facoltativo Sostituisce i valori delle proprietà esistenti nella richiesta o nella risposta, specificati da <AssignTo>.

<Set> sovrascrive le intestazioni o i parametri già esistenti nell'originale . Per aggiungere nuove intestazioni o nuovi parametri, utilizza l'elemento <Add>.

Altri elementi secondari
<AssignTo> Facoltativo Specifica su quale messaggio funziona il criterioAssignMessage. Può essere il modello richiesta o risposta oppure può essere un nuovo messaggio personalizzato.
<AssignVariable> Facoltativo Assegna un valore a una variabile di flusso. Se la variabile non esiste, <AssignVariable> lo creerà.
<IgnoreUnresolvedVariables> Facoltativo Determina se l'elaborazione si interrompe quando viene rilevata una variabile non risolta.

Ciascuno di questi elementi secondari viene descritto nelle sezioni seguenti.

Esempi

Gli esempi seguenti mostrano alcuni dei modi in cui puoi utilizzare il criterioAssignMessage norme:

1: Aggiungi intestazione

Nell'esempio seguente viene aggiunta un'intestazione alla richiesta con Elemento <Add>:

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

2: Rimuovi payload

Nell'esempio seguente viene eliminato il payload dalla risposta con <Remove> :

<AssignMessage continueOnError="false" enabled="true" name="remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

3: Modifica la risposta

Nell'esempio seguente, modifica un oggetto risposta esistente aggiungendo un'intestazione:

<AssignMessage name="modify-response">
  <Set>
    <Headers>
      <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" type="response"></AssignTo>
</AssignMessage>

Questo esempio non crea un nuovo messaggio. Al contrario, modifica un messaggio di risposta esistente aggiungendo un'intestazione HTTP.

Perché in questo esempio viene omesso un nome di variabile nell'elemento <AssignTo> e specifica type come "risposta", questo criterio modifica l'oggetto risposta restituito dalla destinazione o server web.

L'intestazione HTTP aggiunta al messaggio di risposta da questo criterio deriva da una variabile compilata dal criterio LookupCache. Di conseguenza, il messaggio di risposta modificato Il criterio Assegna messaggio contiene un'intestazione HTTP che indica se i risultati sono stati o meno dalla cache. L'impostazione delle intestazioni nella risposta può essere utile per il debug e risoluzione dei problemi.

4. Impostazione dei contenuti dinamici

Puoi utilizzare Assegna messaggio per incorporare contenuti dinamici nel payload della risposta e di richiesta dei messaggi.

Per incorporare le variabili di flusso perimetrale in un payload XML, aggrega la variabile designata in caratteri curly parentesi graffe, in questo modo: {prefix.name}.

Nell'esempio seguente è incorporato il valore della variabile del flusso dell'intestazione HTTP user-agent in un elemento XML denominato User-agent:

<AssignMessage name="set-dynamic-content">
  <AssignTo createNew="false" type="response"></AssignTo>
  <Set>
    <Payload contentType="text/xml">
      <User-agent>{request.header.user-agent}</User-agent>
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

Per i payload JSON, puoi inserire le variabili utilizzando variablePrefix e Attributi variableSuffix con caratteri di delimitazione, come mostrato di seguito esempio:

<AssignMessage name="set-payload">
  <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
  {
     "user-agent": "@request.header.user-agent#"
  }
  </Payload>
</AssignMessage>

Per un elenco completo delle variabili di flusso, consulta Riferimento per le variabili di flusso.

A partire dalla release 16.08.17 di Cloud, è possibile utilizzare anche parentesi graffe per inserire variabili.

5. Rimozione del parametro di query

L'esempio seguente rimuove il parametro di query apikey dalla richiesta:

<AssignMessage name="remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

È consigliabile rimuovere il parametro di query apikey dalla richiesta quando utilizzi il criterio VerifyAPIKey per l'autenticazione utente. Lo scopo è evitare che informazioni chiave sensibili vengano passate alla destinazione del backend.

6. Imposta/Ottieni le variabili

L'esempio seguente utilizza tre criteri Assegna messaggio:

  1. Crea tre variabili di flusso nella richiesta, con valori statici
  2. Ottiene le variabili di flusso in modo dinamico in un secondo criterio nel flusso di richiesta
  3. Le imposta nel payload della risposta
<!-- Policy #1: Set variables in the request -->
<AssignMessage continueOnError="false" enabled="true" name="set-variables">
    <!-- Create a variable named myAppSecret -->
    <AssignVariable>
        <Name>myAppSecret</Name>
        <Value>42</Value>
    </AssignVariable>
    <!-- Create a variable named config.environment -->
    <AssignVariable>
        <Name>config.environment</Name>
        <Value>test</Value>
    </AssignVariable>
    <!-- Create a variable named config.protocol -->
    <AssignVariable>
        <Name>config.protocol</Name>
        <Value>gopher</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Nel primo criterio, l'elemento <AssignVariable> crea e imposta tre variabili nella richiesta. Ogni elemento <Name> specifica un nome per la variabile e <Value> specifica il valore.

Il secondo criterio utilizza l'elemento <AssignVariable> per leggere i valori e crea tre nuove variabili:

<!-- Policy #2: Get variables from the request -->
<AssignMessage continueOnError="false" enabled="true" name="get-variables">
  <AssignTo createNew="false" transport="http" type="request"/>
  <!-- Get the value of myAppSecret and create a new variable, secret -->
  <AssignVariable>
    <Name>secret</Name>
    <Ref>myAppSecret</Ref>
    <Value>0</Value>
  </AssignVariable>
  <!-- Get the value of config.environment and create a new variable, environment -->
  <AssignVariable>
    <Name>environment</Name>
    <Ref>config.environment</Ref>
    <Value>default</Value>
  </AssignVariable>
  <!-- Get the value of config.protocol and create a new variable, protocol -->
  <AssignVariable>
    <Name>protocol</Name>
    <Ref>config.protocol</Ref>
    <Value>default</Value>
  </AssignVariable>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>

Nel secondo criterio, l'elemento <Ref> fa riferimento alla variabile di origine, e <Name> specificano i nomi delle nuove variabili. Se la variabile a cui fa riferimento l'elemento <Ref> non è accessibile, puoi utilizzare il valore specificato dall'elemento <Value>.

Per provare questo insieme di criteri:

  1. Aggiungi i criteri 1 e 2 al flusso di richiesta. Assicurati di inserire il criterio n. 1 prima del criterio 2.
  2. Aggiungi il terzo criterio nel flusso di risposta.
  3. Il terzo criterio utilizza l'elemento <Set> per aggiungere le variabili alla risposta. La L'esempio seguente crea un payload XML nella risposta che Edge restituisce al client:
    <!-- Policy #3: Add variables to the response -->
    <AssignMessage continueOnError="false" enabled="true" name="put-em-in-the-payload">
      <DisplayName>put-em-in-the-payload</DisplayName>
      <Set>
        <Payload contentType="application/xml">
          <wrapper>
            <secret>{secret}</secret>
            <config>
              <environment>{environment}</environment>
              <protocol>{protocol}</protocol>
            </config>
          </wrapper>
        </Payload>
      </Set>
      <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
      <AssignTo createNew="false" transport="http" type="response"/>
    </AssignMessage>
    

    Tieni presente che la sintassi per accedere alle variabili di flusso in <Set> consiste nel includerle nel parentesi graffe.

    Assicurati di impostare l'attributo contentType dell'elemento <Payload> su "application/xml".

  4. Inviare una richiesta al proxy API; Ad esempio:
    curl -vL https://ahamilton-eval-test.apigee.net/myproxy

    Facoltativamente, puoi indirizzare i risultati tramite un'utilità come xmllint, in modo che l'XML sia visualizzato con una struttura formattata correttamente:

    curl -vL https://ahamilton-eval-test.apigee.net/myproxy | xmllint --format -

    Il corpo della risposta dovrebbe avere il seguente aspetto:

    <wrapper>
      <secret>42</secret>
      <config>
        <environment>test</environment>
        <protocol>gopher</protocol>
      </config>
    </wrapper>

7: recupera le intestazioni delle risposte dei callout del servizio

Nell'esempio seguente, supponiamo che nella richiesta proxy API sia presente un criterio ServiceCallout, e la risposta al callout contiene più intestazioni con lo stesso nome. (Set-Cookie). Supponendo che la variabile di risposta del callout di servizio sia l'impostazione predefinita calloutResponse, il seguente criterio riceve il secondo Set-Cookie dell'intestazione.

<AssignMessage continueOnError="false" enabled="true" name="get-header">
  <Set>
    <Payload contentType="application/json">
      {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"}
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Per elencare tutti i valori dell'intestazione, utilizza la seguente variabile:

{calloutResponse.header.Set-Cookie.values}

Ogni elemento secondario di questo riferimento ha esempi aggiuntivi. Per ulteriori esempi, vedi Esempio diAssignMessage su GitHub.

Riferimento elemento secondario

In questa sezione vengono descritti gli elementi secondari di <AssignMessage>.

<Add>

Aggiunge informazioni alla richiesta o alla risposta, specificate dal <AssignTo> .

L'elemento <Add> aggiunge nuove proprietà al messaggio che non esistono nell'originale . Per modificare i valori delle proprietà esistenti, utilizza <Set> .

Valore predefinito n/d
Obbligatorio? Facoltativo
Tipo Tipo complesso
Elemento principale <AssignMessage>
Elementi secondari <FormParams>
<Headers>
<QueryParams>

L'elemento <Add> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>
</AssignMessage>

Esempio 1

Nell'esempio seguente viene utilizzato l'elemento <FormParams> per ottenere i valori di tre parametri della stringa di query dalla richiesta iniziale e impostarli come parametri del modulo nella richiesta dell'endpoint di destinazione:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="name">{request.queryparam.name}</FormParam>
      <FormParam name="zip">{request.queryparam.zipCode}</FormParam>
      <FormParam name="lang">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"/>
</AssignMessage>

Esempio 2

Nell'esempio seguente viene utilizzato l'elemento <Headers> per aggiungere il parametro User-Agent alla richiesta dell'endpoint di destinazione:

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Esempio 3

L'esempio seguente utilizza l'elemento <QueryParams> per aggiungere una singola query con un valore statico alla richiesta:

<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Questo esempio utilizza <Add> nel pre-flusso della richiesta. Se osservi i risultati in uno strumento come lo strumento Tracce, la richiesta a "http://httpbin.org/get" diventa &quot;http://httpbin.org/get?myParam=42&quot;.

Gli elementi secondari di <Add> supportano la sostituzione dinamica delle stringhe, nota come modelli di messaggio.

<FormParams> (secondario di <Add>)

Aggiunge nuovi parametri di modulo al messaggio di richiesta. Questo elemento non ha alcun effetto su una risposta .

Valore predefinito n/d
Obbligatorio? Facoltativo
Tipo Array di <FormParam> elementi
Elemento principale <Add>
Elementi secondari <FormParam>

L'elemento <FormParams> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
  </Add>
</AssignMessage>

Esempio 1

L'esempio seguente aggiunge un singolo parametro di modulo ("answer") e un valore statico ("42") a la richiesta:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-1">
  <Add>
    <FormParams>
      <FormParam name="answer">42</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"></AssignTo>
</AssignMessage>

Esempio 2

L'esempio seguente restituisce il valore del parametro della stringa di query name e lo aggiunge alla richiesta come parametro del modulo:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-2">
  <Add>
    <FormParam name="name">{request.queryparam.name}</FormParam>
  </Add>
</AssignMessage>

Tieni presente che questo esempio non specifica un target con <AssignTo>. Questo criterio aggiunge il parametro alla richiesta.

Esempio 3

Nell'esempio seguente vengono aggiunti più parametri di modulo alla richiesta:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="name">{request.queryparam.name}</FormParam>
      <FormParam name="zip">{request.queryparam.zipCode}</FormParam>
      <FormParam name="lang">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"/>
</AssignMessage>

Questo esempio ottiene i parametri della stringa di query dalla richiesta di origine e li aggiunge come parametri del modulo per la richiesta inviata all'endpoint di destinazione.

Puoi utilizzare lo strumento Traccia per esaminare il flusso. Vedrai che il corpo della richiesta contiene i dati del modulo con codifica URL, che erano stati originariamente trasmessi come stringa di query parametri:

%7Busername%7D=nick&%7Bzip_code%7D=90210&%7Bdefault_language%7D=en

Puoi utilizzare <FormParams> solo se vengono soddisfatti i seguenti criteri:

  • Verbo HTTP: POST
  • Tipo di messaggio: richiesta
  • Uno (o entrambi) dei seguenti elementi:
    • Dati del modulo: puoi impostare un valore specifico oppure "" (la stringa vuota). Ad esempio, con curl, aggiungi -d "" alla tua richiesta.
    • Intestazione Content-Length: impostata su 0 (se non sono presenti dati nell'intestazione richiesta originale; altrimenti la lunghezza attuale, in byte). Ad esempio, con curl aggiungi -H "Content-Length: 0" alla tua richiesta.

Ad esempio:

curl -vL -X POST -d "" -H "Content-Type: application/x-www-form-urlencoded"
  https://ahamilton-eval-test.apigee.net/am-test

Quando aggiungi <FormParams>, Edge imposta l'intestazione Content-Type della richiesta su &quot;application/x-www-form-urlencoded&quot; prima di inviare il messaggio al servizio di destinazione.

<Headers> (secondario di <Add>)

Aggiunge nuove intestazioni alla richiesta o alla risposta specificate, specificate dal Elemento <AssignTo>.

Valore predefinito n/d
Obbligatorio? Facoltativo
Tipo Array di <Header> elementi
Elemento principale <Add>
Elementi secondari <Header>

L'elemento <Headers> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Add>
</AssignMessage>

Esempio 1

Nell'esempio seguente viene aggiunta l'intestazione user-agent al messaggio di richiesta e assegna il valore della variabile di flusso request.user.agent a quell'intestazione.

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

<QueryParams> (secondario di <Add>)

Aggiunge nuovi parametri di ricerca alla richiesta. Questo elemento non ha alcun effetto su una risposta.

Valore predefinito n/d
Obbligatorio? Facoltativo
Tipo Array di <QueryParam> elementi
Elemento principale <Add>
Elementi secondari <QueryParam>

L'elemento <QueryParams> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>
</AssignMessage>

Esempio 1

Nell'esempio seguente viene aggiunto il parametro di query "myParam" alla richiesta e assegna il valore "42" al suo interno:

<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Puoi utilizzare <QueryParams> solo se vengono soddisfatti i seguenti criteri:

  • Verbo HTTP: GET
  • Tipo di messaggio: richiesta

Inoltre, puoi impostare parametri di ricerca solo quando l'elemento <AssignTo> L'attributo type è un messaggio di richiesta. L'impostazione nella risposta non ha alcun effetto.

Se nel criterio viene definito un array vuoto di parametri di query (<Add><QueryParams/></Add>), il criterio non aggiunge alcuna query parametri. Equivale all'omissione di <QueryParams>.

<AssignTo>

Determina su quale oggetto opera il criterioAssignMessage. Le opzioni sono:

  • Messaggio di richiesta: il request ricevuto dal proxy API.
  • Messaggio di risposta: il response restituito dal server di destinazione.
  • Messaggio personalizzato: un oggetto richiesta o risposta personalizzato.

Tieni presente che, in alcuni casi, non è possibile modificare l'oggetto su cui agisce il criterioAssignMessage. Ad esempio, non puoi utilizzare <Add> o <Set> per aggiungere o modificare i parametri di query (<QueryParams>) o parametri del modulo (<FormParams>) nella risposta. Puoi solo modificare parametri di ricerca e i parametri del modulo nella richiesta.

Valore predefinito n/d
Obbligatorio? Facoltativo
Tipo Stringa
Elemento principale <AssignMessage>
Elementi secondari Nessuno

Se non specifichi <AssignTo>, il criterio agisce sulla richiesta o sulla risposta predefinita. che si basa su dove viene eseguito il criterio. Se il criterio viene eseguito nel flusso di richiesta, influisce sul messaggio di richiesta. Se viene eseguito nel flusso di risposta, il criterio influisce sulla risposta per impostazione predefinita.

L'elemento <AssignTo> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>

Esempio 1

Nell'esempio seguente viene specificato che la destinazione è la richiesta originale che verrà inviata all'utente endpoint di destinazione:

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

Se imposti createNew su "false" (valore predefinito), questo esempio non crea un una nuova richiesta. Tutte le operazioni in questo criterio influiscono sulla richiesta originale.

Esempio 2

Nell'esempio seguente viene creato un nuovo oggetto di richiesta:

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

Quando crei un nuovo oggetto di richiesta o risposta, gli altri elementi del criterioAssignMessage (ad esempio <Add>, <Set> e <Set>) agiscono in base al nuovo di richiesta di addestramento.

Puoi accedere al nuovo oggetto di richiesta in altri criteri in un secondo momento nel flusso oppure inviare il nuovo oggetto a un servizio esterno con un criterio ServiceCallout.

Esempio 3

Nell'esempio seguente viene creato un nuovo oggetto di richiesta denominato "MyRequestObject":

<AssignMessage name="assignto-2">
  <AssignTo createNew="true" transport="http" type="request"&gt;MyRequestObject&lt;/AssignTo>
</AssignMessage>

Quando crei un nuovo oggetto di richiesta o risposta, gli altri elementi del criterioAssignMessage (ad esempio <Add>, <Set> e <Set>) agiscono in base al nuovo di richiesta di addestramento.

Puoi accedere al nuovo oggetto di richiesta in altri criteri in un secondo momento nel flusso oppure inviare il nuovo oggetto a un servizio esterno con un criterio ServiceCallout.

Nella tabella seguente vengono descritti gli attributi di <AssignTo>:

Attributo Descrizione Obbligatorio? Tipo
createNew

Consente di stabilire se questo criterio crea un nuovo messaggio durante l'assegnazione di valori.

Se il valore è "true", il criterio crea una nuova variabile di tipo specificato da type (o "richiesta" o "risposta"). Se non specificano il nome della nuova variabile, il criterio crea una nuova richiesta o risposta predefinita, in base al valore di type.

Se il valore è "false", il criterio risponde in uno dei due modi seguenti:

  • Se <AssignTo> riesce a risolvere il nome della variabile in una richiesta o risposta, continua l'elaborazione. Ad esempio, se il criterio si trova in un flusso di richiesta, la variabile è di richiesta di addestramento. Se il criterio è in una risposta, la variabile è .
  • Se <AssignTo> non può essere risolto o si risolve in un tipo non messaggio, la criterio genera un errore.

Se createNew non viene specificato, il criterio risponde in uno dei due modi seguenti:

  • Se <AssignTo> si risolve in un messaggio, l'elaborazione avanza alla successiva passaggio.
  • Se <AssignTo> non può essere risolto o si risolve in un tipo non messaggio, viene viene creata la variabile variabile del tipo specificato in type.
Facoltativo Booleano
transport

Specifica il tipo di trasporto per il tipo di messaggio di richiesta o risposta.

Il valore predefinito è "http" (l'unico valore supportato).

Facoltativo Stringa
type Specifica il tipo del nuovo messaggio, quando createNew è "true". Valido i valori sono "request" o "risposta".

Il valore predefinito è "request". Se ometti questo attributo, Edge crea una richiesta o una risposta, a seconda del punto del flusso in cui viene eseguito questo criterio.

Facoltativo Stringa

<AssignVariable>

Assegna un valore a una variabile del flusso di destinazione (ad es. una variabile il cui valore è impostato dal Allocazione di Messaggi). Se la variabile di flusso non esiste, <AssignVariable> crea li annotino.

Valore predefinito n/d
Obbligatorio? Facoltativo
Tipo Tipo complesso
Elemento principale <AssignMessage>
Elementi secondari <Name> (obbligatorio)
<Ref>
<Template>
<Value>

Il valore assegnato alla variabile del flusso di destinazione può essere uno dei seguenti:

  • Stringa letterale: utilizza l'elemento secondario <Value> per specificare un valore letterale. valore della stringa per la variabile del flusso di destinazione.
  • Variabile di flusso: utilizza l'elemento secondario <Ref> per specificare il valore di un esistente per la variabile di flusso di destinazione. Per un elenco completo dei passaggi che possono essere utilizzate come origine, consulta Informazioni sulle variabili di flusso.
  • Modello di messaggio: utilizza l'elemento secondario <Template> per specificare un modello di messaggio per del flusso di destinazione.

L'elemento <AssignVariable> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
    <Value>variable_value</Value>
  </AssignVariable>
</AssignMessage>

Utilizza l'elemento <Ref> per specificare la variabile di origine. Se la variabile a cui fa riferimento <Ref> non è accessibile, Edge utilizza il valore specificato dall'elemento <Value>. Se definisci <Template>, ha la precedenza sugli altri elementi secondari.

Esempio 1

L'esempio seguente imposta il valore di una nuova variabile, myvar, sul valore letterale valore "42":

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

Esempio 2

Nell'esempio seguente viene assegnato il valore della variabile di flusso request.header.user-agent alla variabile del flusso di destinazione myvar e il valore del parametro di query country alla variabile del flusso di destinazione Country:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

Se una delle assegnazioni non riesce, Edge assegna invece il valore "ErrorOnCopy". a la variabile del flusso di destinazione.

Se le variabili di flusso myvar o Country non esistono, <AssignVariable> li crea.

Esempio 3

L'esempio seguente utilizza l'attributo <Template> elemento figlio per concatenare due variabili di contesto con una stringa letterale (un trattino) tra di loro:

<AssignMessage name='template-1'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

Un uso comune di <AssignVariable> è l'impostazione di un valore predefinito per un parametro di query, un'intestazione o l'altro valore che può essere passato con la richiesta. Per farlo puoi utilizzare una combinazione di entrambe Elementi secondari <Ref> e <Value>. Per ulteriori informazioni informazioni, vedi gli esempi per <Ref>.

<Name> (secondario di <AssignVariable>)

Specifica il nome della variabile del flusso di destinazione (ad es. la variabile il cui valore è impostato da il criterioAssignMessage). Se la variabile denominata in <AssignVariable> non esiste, la variabile criterio ne crea uno con quel nome.

Valore predefinito n/d
Obbligatorio? Obbligatorio
Tipo Stringa
Elemento principale <AssignVariable>
Elementi secondari Nessuno

L'elemento <Name> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
  </AssignVariable>
</AssignMessage>

Esempio 1

Nell'esempio seguente viene specificata la variabile di destinazione myvar e la imposta al valore letterale "42":

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

Se myvar non esiste, <AssignVariable> lo crea.

<Ref> (secondario di <AssignVariable>)

Specifica l'origine dell'assegnazione come variabile di flusso. La variabile di flusso può essere una delle variabili di flusso predefinite (come elencate nel Riferimento alle variabili di flusso) o variabili di flusso personalizzate che hai creato.

Il valore di <Ref> viene sempre interpretato come variabile di flusso; non puoi specifica una stringa letterale come valore. Per assegnare un valore letterale di stringa, utilizza l'elemento <Value> .

Valore predefinito n/d
Obbligatorio? Facoltativo
Tipo Stringa
Elemento principale <AssignVariable>
Elementi secondari Nessuno

Quando specifichi una variabile di flusso con <Ref>, ometti la macro che includono parentesi "{}" che useresti normalmente per fare riferimento a una variabile di flusso. Ad esempio: per impostare il valore della nuova variabile sul valore del flusso client.host variabile:

Do this (no brackets):
  <Ref>client.host</Ref>

Do NOT do this (brackets):
  <Ref>{client.host}</Ref>

Per definire un valore predefinito per la variabile del flusso di destinazione, utilizza <Value> in combinazione con <Ref>. Se la variabile di flusso specificata da <Ref> non esiste, non può essere letto o è nullo, Edge assegna il valore di <Value> alla variabile del flusso di destinazione.

L'elemento <Ref> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
  </AssignVariable>
</AssignMessage>

Esempio 1

Nell'esempio seguente viene assegnato il valore della variabile di flusso request.header.user-agent alla variabile del flusso di destinazione myvar e il valore del parametro di query country nella variabile Country:

<AssignMessage name="assignvariable-4">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
  </AssignVariable>
</AssignMessage>

In questo esempio, per Edge non è specificato un valore predefinito (o di riserva) per compito.

Esempio 2

Nell'esempio seguente viene assegnato il valore della variabile di flusso request.header.user-agent alla variabile del flusso di destinazione myvar e il valore del parametro di query country alla variabile Country:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

In questo esempio, se i valori della variabile di flusso request.header.user-agent o il parametro di query Country è nullo, illeggibile o con un formato non corretto, Edge assegna il valore "ErrorOnCopy" alle nuove variabili.

Esempio 3

Un caso d'uso comune di <AssignVariable> è l'impostazione del valore predefinito di una query parametro, intestazione o altro valore che può essere trasmesso con la richiesta. Ad esempio, crei un proxy API meteo in cui la richiesta accetta un singolo parametro di query denominato "w". Questo contiene l'ID della città di cui si desidera il meteo. L'URL della richiesta contiene il modulo:

http://myCO.com/v1/weather/forecastrss?w=city_ID

Per definire un valore predefinito per "w", crea un criterioAssignMessage come seguenti:

<AssignMessage continueOnError="false" enabled="true" name="assignvariable-3">
  <AssignTo createNew="false" transport="http" type="request"/>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>request.queryparam.w</Name>
    <Ref>request.queryparam.w</Ref>
    <Value>12797282</Value>
  </AssignVariable>
</AssignMessage>

In questo esempio, <AssignVariable> ottiene il valore di request.queryparam.w e lo assegna a se stesso. Se la variabile di flusso è nulla, significa che "w" il parametro di ricerca era omesso dalla richiesta, in questo esempio viene utilizzato il valore predefinito Elemento <Value>. Pertanto, puoi effettuare una richiesta a questa API che omette la lettera "w" parametro di query:

http://myCO.com/v1/weather/forecastrss

...e fare in modo che il proxy API restituisca un risultato valido.

A differenza di quando utilizzi <Value>, il valore di <Ref> deve essere un di flusso, ad esempio una proprietà di una request, response oppure target. Il valore può anche essere una variabile di flusso personalizzata che hai creato.

Se specifichi una variabile di flusso che non esiste per il valore <Ref>, e il valore di <IgnoreUnresolvedVariables> è "true", Edge genera un errore.

<Template> (secondario di <AssignVariable>)

Specifica un valore modello di messaggio. Un messaggio consente di eseguire la sostituzione di stringhe di variabili quando il criterio viene eseguito, e può combinare stringhe letterali con nomi di variabili racchiusi in caratteri parentesi graffe. Inoltre, i modelli di messaggio assistenza funzioni come escape e conversione di maiuscole e minuscole.

Utilizza l'attributo ref per specificare una variabile di flusso in cui il valore della variabile è un modello di messaggio. Ad esempio, puoi archiviare un modello di messaggio come attributo personalizzato per un'app per sviluppatori. Quando Edge identifica l'app sviluppatore dopo aver verificato la chiave API o token di sicurezza (tramite un criterio aggiuntivo), <AssignVariable> può utilizzare il modello di messaggio dell'attributo personalizzato dell'app, disponibile come variabile di flusso dal criterio di sicurezza. L'esempio seguente presuppone che il messaggio il modello è disponibile in un attributo cliente chiamato message_template nella app sviluppatore che effettua la chiamata API, in cui è stato usato il criterioVerifyAPIKey per la verifica chiave API dell'app:

<AssignVariable ref='verifyapikey.myVerifyAPIKeyPolicy.app.name.message_template'/>

Valore predefinito n/d
Obbligatorio? Facoltativo
Tipo Stringa
Elemento principale <AssignVariable>
Elementi secondari Nessuno

L'elemento <Template> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
  </AssignVariable>
</AssignMessage>

Esempio 1

L'esempio seguente utilizza la sintassi dei modelli dei messaggi per concatenare due variabili di contesto con una stringa letterale (un trattino) tra di loro:

<AssignMessage name='template-1'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

Esempio 2

L'esempio seguente specifica una variabile di flusso in cui il valore della variabile è un modello di messaggio predefinito. Utilizza questa opzione se desideri inserire un modello predefinito senza dover modificare il criterio:

<AssignMessage name='template-2'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template ref='my_template_variable'/>

  </AssignVariable>
</AssignMessage>

Esempio 3

L'esempio seguente specifica una variabile di flusso e un valore di testo. In questo caso, se la variabile di riferimento è diversa da null, questo valore viene utilizzato come modello. Se l'oggetto è null, il valore di testo (in questo caso, {system.uuid}-{messageid}) viene utilizzato come modello. Questo pattern è utile per fornire una "sostituzione" valore, dove in alcuni casi vuoi sostituire il modello predefinito (la parte di testo) con valori impostati in modo dinamico. Ad esempio, un'istruzione condizionale potrebbe acquisire un valore da una mappa chiave-valore e imposta la variabile di riferimento su quel valore:

<AssignMessage name='template-2'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template ref='my_variable'>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

<Value> (secondario di <AssignVariable>)

Definisce il valore della variabile del flusso di destinazione impostata con <AssignVariable>. La value è sempre interpretato come una stringa letterale; non puoi usare una variabile di flusso come valore, se racchiudi il valore tra parentesi ("{}"). Per utilizzare una variabile di flusso, utilizza <Ref> .

Valore predefinito n/d
Obbligatorio? Facoltativo
Tipo Stringa
Elemento principale <AssignVariable>
Elementi secondari Nessuno

Se utilizzato in combinazione con l'elemento <Ref>, <Value> funge da valore predefinito (o di riserva). Se <Ref> non è specificato, viene non risolvibile oppure null, viene utilizzato il valore di <Value>.

L'elemento <Value> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Value>variable_value</Value>
  </AssignVariable>
</AssignMessage>

Esempio 1

L'esempio seguente imposta il valore della variabile del flusso di destinazione myvar al valore letterale "42":

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

Esempio 2

Nell'esempio seguente viene assegnato il valore della variabile di flusso request.header.user-agent alla variabile di flusso myvar e il valore del parametro di query country alla variabile Country:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

Se una delle assegnazioni non riesce, <AssignVariable> assegna invece il valore "ErrorOnCopy" a la variabile del flusso di destinazione.

<Copy>

Copia i valori dal messaggio specificato dall'attributo source al messaggio specificato dall'elemento <AssignTo>. Se non specifichi un target con <AssignTo>, questo criterio copia i valori nella richiesta o nella risposta a seconda della fase del flusso in cui viene eseguito questo criterio.

Valore predefinito n/d
Obbligatorio? Facoltativo
Tipo Stringa
Elemento principale <AssignMessage>
Elementi secondari <FormParams>
<Headers>
<Path>
<Payload>
<QueryParams>
<ReasonPhrase>
<StatusCode>
<Verb>
<Version>

L'elemento <Copy> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
    <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>[false|true]</Path>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>[false|true]</ReasonPhrase>
    <StatusCode>[false|true]</StatusCode>
    <Verb>[false|true]</Verb>
    <Version>[false|true]</Version>
  </Copy>
  <!-- Used as the destination for the <Copy> values -->
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>
  

Esempio 1

L'esempio seguente copia un'intestazione, tre parametri del modulo, il percorso e tutte le query parametri dalla richiesta a una nuova richiesta personalizzata:

<AssignMessage continueOnError="false" enabled="true" name="copy-1">
  <Copy source="request">
    <Headers>
      <Header name="Header_Name_1">Header value 1</Header>
    </Headers>
    <FormParams>
      <FormParam name="Form_Param_Name_1">Form param value 1</FormParam>
      <FormParam name="Form_Param_Name_2">Form param value 1</FormParam>
      <FormParam name="Form_Param_Name_3">Form param value 1</FormParam>
    </FormParams>
    <Payload>false</Payload>
    <Path>true</Path>
    <QueryParams/>
    <ReasonPhrase>false</ReasonPhrase>
    <StatusCode>false</StatusCode>
    <Verb>false</Verb>
    <Version>false</Version>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

L'elemento <Copy> ha i seguenti attributi:

Attributo Descrizione Obbligatorio? Tipo
origine

Specifica l'oggetto di origine della copia.

  • Se source non viene specificato, viene considerato come un messaggio semplice. Per Ad esempio, se il criterio si trova nel flusso di richiesta, l'origine utilizza il valore predefinito request oggetto. Se il criterio si trova nel flusso di risposta, per impostazione predefinita response oggetto. Se ometti source, puoi utilizzare un valore riferimento a una variabile di flusso come origine della copia. Ad esempio, specifica il valore come {request.header.user-agent}.
  • Se la variabile di origine non può essere risolta o si risolve in un tipo non messaggio, <Copy> non risponde.
Facoltativo Stringa

<FormParams> (secondario di <Copy>)

Copia i parametri del modulo della richiesta specificata dal Attributo source dell'elemento <Copy> alla richiesta specificato dall'elemento <AssignTo>. Questo elemento non ha alcun effetto su un la risposta corretta.

Valore predefinito n/d
Obbligatorio? Facoltativo
Tipo Array di elementi <FormParam> o un array vuoto
Elemento principale <Copy>
Elementi secondari <FormParam>

L'elemento <FormParams> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Copy>
</AssignMessage>

Esempio 1

L'esempio seguente copia un singolo parametro del modulo dalla richiesta al richiesta personalizzata "MyCustomRequest":

<AssignMessage name="copy-formparams-1">
  <Copy source="request">
    <FormParams>
      <FormParam name="paramName">Form param value 1</FormParam>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Esempio 2

L'esempio seguente copia tutti i parametri del modulo nella richiesta personalizzata &quot;MyCustomRequest&quot;:

<AssignMessage name="copy-formparams-2">
  <Copy source="request">
    <FormParams/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Esempio 3

L'esempio seguente copia tre parametri del modulo nella richiesta personalizzata &quot;MyCustomRequest&quot;:

<AssignMessage name="copy-formparams-3">
  <Copy source="request">
    <FormParams>
      <FormParam name="paramName1"/>
      <FormParam name="paramName2"/>
      <FormParam name="paramName3"/>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Esempio 4

Se esistono più parametri del modulo con lo stesso nome, utilizza la seguente sintassi:

<AssignMessage name="copy-formparams-4">
  <Copy source="request">
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

In questo esempio vengono copiati "f1", "f2" e il secondo valore di "f3". Se "f3" ha un solo non viene copiato.

Puoi utilizzare <FormParams> solo se vengono soddisfatti i seguenti criteri:

  • Verbo HTTP: POST
  • Tipo di messaggio: risposta
  • Uno (o entrambi) dei seguenti elementi:
    • Dati del modulo: puoi impostare un valore specifico oppure "" (la stringa vuota). Ad esempio, con curl, aggiungi -d "" alla tua richiesta.
    • Intestazione Content-Length: impostata su 0 (se non sono presenti dati nell'intestazione richiesta originale; altrimenti la lunghezza attuale. Ad esempio, con curl aggiungi -H "Content-Length: 0" alla tua richiesta.

Quando copi <FormParams>, <Copy> imposta il valore Content-Type del messaggio su &quot;application/x-www-form-urlencoded&quot; prima di inviare il messaggio al servizio di destinazione.

<Headers> (secondario di <Copy>)

Copia le intestazioni HTTP dal messaggio di richiesta o risposta specificato da Attributo source dell'elemento <Copy> alla richiesta o un messaggio di risposta specificato dall'elemento <AssignTo>.

Valore predefinito n/d
Obbligatorio? Facoltativo
Tipo Un array di elementi <Header> o un array vuoto
Elemento principale <Copy>
Elementi secondari <Header>

L'elemento <Headers> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Copy>
</AssignMessage>

Esempio 1

L'esempio seguente copia l'intestazione user-agent dalla richiesta al nuovo oggetto di richiesta personalizzato:

<AssignMessage name="copy-headers-1">
  <Copy source="request">
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Esempio 2

Per copiare tutte le intestazioni, utilizza un elemento <Headers> vuoto, come nell'esempio seguente mostra:

<AssignMessage name="copy-headers-2">
  <Copy source="request">
    <Headers/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Esempio 3

Se esistono più intestazioni con lo stesso nome, utilizza la seguente sintassi:

<AssignMessage name="copy-headers-3">
  <Copy source="request">
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

In questo esempio vengono copiati "h1", "h2" e il secondo valore di "h3". Se "h3" ha un solo non viene copiato.

<Path> (secondario di <Copy>)

Determina se il percorso deve essere copiato dalla richiesta di origine alla destinazione richiesta. Questo elemento non ha alcun effetto su una risposta.

Se il valore è "true", questo criterio copia il percorso dal messaggio di richiesta specificato Attributo source dell'elemento <Copy> alla richiesta messaggio specificato dall'elemento <AssignTo>.

Valore predefinito Falso
Obbligatorio? Facoltativo
Tipo Booleano
Elemento principale <Copy>
Elementi secondari Nessuno

L'elemento <Path> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Path>[false|true]</Path>
  </Copy>
</AssignMessage>

Esempio 1

L'esempio seguente indica che il criterioAssignMessage deve copiare il percorso dall'origine al nuovo oggetto di richiesta personalizzato:

<AssignMessage name="copy-path-1">
  <Copy source="request">
    <Path>true</Path>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Puoi utilizzare <Path> solo se vengono soddisfatti i seguenti criteri:

  • Tipo di messaggio: richiesta

<Payload> (secondario di <Copy>)

Determina se il payload deve essere copiato dall'origine alla destinazione. L'origine e la destinazione possono essere richieste o risposte.

Se "true", questo criterio copia il payload dal messaggio specificato Attributo source dell'elemento <Copy> al messaggio specificato dall'elemento <AssignTo>.

Valore predefinito Falso
Obbligatorio? Facoltativo
Tipo Booleano
Elemento principale <Copy>
Elementi secondari Nessuno

L'elemento <Payload> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Payload>[false|true]</Payload>
  </Copy>
</AssignMessage>

Esempio 1

L'esempio seguente imposta <Payload> su "true" in modo che il payload della richiesta copiato dalla richiesta alla risposta:

<AssignMessage name="copy-payload-1">
  <Copy source="request">
    <Payload>true</Payload>
  </Copy>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

<QueryParams> (secondario di <Copy>)

Copia i parametri della stringa di query dalla richiesta specificata dalla Attributo source dell'elemento <Copy> alla richiesta specificata dall'elemento <AssignTo>. Questo elemento non ha alcun effetto su una risposta.

Valore predefinito n/d
Obbligatorio? Facoltativo
Tipo Un array di elementi <QueryParam> o un array vuoto
Elemento principale <QueryParam>
Elementi secondari Nessuno

L'elemento <QueryParams> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Copy>
</AssignMessage>

Esempio 1

Il seguente esempio copia il parametro "my_param" parametro di query dalla richiesta a un nuovo, oggetto di richiesta personalizzata:

<AssignMessage name="copy-queryparams-1">
  <Copy source="request">
    <QueryParams>
      <QueryParam name="my_param"/>
    </QueryParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Esempio 2

L'esempio seguente copia tutti parametri di ricerca dalla richiesta in una nuova Oggetto richiesta:

<AssignMessage name="copy-queryparams-2">
  <Copy source="request">
    <QueryParams/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Esempio 3

Se esistono più parametri di query con lo stesso nome, utilizza la seguente sintassi:

<AssignMessage name="copy-queryparams-3">
  <Copy source="request">
    <QueryParams>
      <QueryParam name="qp1"/>
      <QueryParam name="qp2"/>
      <QueryParam name="qp3.2"/>
    </QueryParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

In questo esempio vengono copiati "qp1", "qp2" e il secondo valore di "qp3". Se "qp3" ha solo valore, non viene copiato.

Puoi utilizzare <QueryParams> solo se vengono soddisfatti i seguenti criteri:

  • Verbo HTTP: GET
  • Tipo di messaggio: richiesta

<ReasonPhrase> (secondario di <Copy>)

determina se la frase di motivazione deve essere copiata dalla risposta di origine alla la risposta della destinazione. Questo elemento non ha alcun effetto su una richiesta.

Se il valore è "true", questo criterio copia il valore ReasonPhrase dalla risposta specificato dall'attributo source dell'elemento <Copy> alla risposta specificato dall'elemento <AssignTo>.

Valore predefinito Falso
Obbligatorio? Facoltativo
Tipo Booleano
Elemento principale <Copy>
Elementi secondari Nessuno

L'elemento <ReasonPhrase> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <ReasonPhrase>[false|true]</ReasonPhrase>
  </Copy>
</AssignMessage>

Esempio 1

L'esempio seguente imposta <ReasonPhrase> su "true", il che fa sì che <Copy> per copiare la frase del motivo dalla risposta predefinita a un oggetto risposta personalizzata:

<AssignMessage name="copy-reasonphrase-1">
  <Copy source="response">
    <ReasonPhrase>true</ReasonPhrase>
  </Copy>
  <AssignTo createNew="trie" transport="http" type="response">MyCustomResponse</AssignTo>
</AssignMessage>

Puoi utilizzare <ReasonPhrase> solo se vengono soddisfatti i seguenti criteri:

  • Tipo di messaggio: risposta

<StatusCode> (secondario di <Copy>)

Determina se il codice di stato viene copiato dalla risposta di origine alla destinazione la risposta corretta. Questo elemento non ha alcun effetto su una richiesta.

Se "true", questo criterio copia il codice di stato dal messaggio di risposta specificato da Attributo source dell'elemento <Copy> alla risposta messaggio specificato dall'elemento <AssignTo>.

Valore predefinito Falso
Obbligatorio? Facoltativo
Tipo Booleano
Elemento principale <Copy>
Elementi secondari Nessuno

L'elemento <StatusCode> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <StatusCode>[false|true]</StatusCode>
  </Copy>
</AssignMessage>

Esempio 1

L'esempio seguente imposta <StatusCode> su "true", che copia il codice di stato dall'oggetto risposta predefinito a un nuovo oggetto risposta personalizzata:

<AssignMessage name="copy-statuscode-1">
  <Copy source="response">
    <StatusCode>true</StatusCode>
  </Copy>
  <AssignTo createNew="true" transport="http" type="response">MyCustomResponse</AssignTo>
</AssignMessage>

Puoi utilizzare <StatusCode> solo se vengono soddisfatti i seguenti criteri:

  • Tipo di messaggio: risposta

Un uso comune di <StatusCode> è per garantire che la risposta proxy abbia lo stesso stato come risposta ricevuta dal target quando createNew di <AssignTo> sia impostato su "true".

<Verb> (secondario di <Copy>)

Determina se il verbo HTTP viene copiato dalla richiesta di origine alla destinazione richiesta. Questo elemento non ha alcun effetto su una risposta.

Se "true", copia il verbo trovato nell'attributo source dell'elemento <Copy> alla richiesta specificata nell'elemento <AssignTo>.

Valore predefinito Falso
Obbligatorio? Facoltativo
Tipo Booleano
Elemento principale <Copy>
Elementi secondari Nessuno

L'elemento <Verb> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Verb>[false|true]</Verb>
  </Copy>
</AssignMessage>

Esempio 1

L'esempio seguente imposta <Verb> su "true", che copia il verbo dal predefinita a una nuova richiesta personalizzata:

<AssignMessage name="copy-verb-1">
  <Copy source="request">
    <Verb>true</Verb>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Puoi utilizzare <Verb> solo se vengono soddisfatti i seguenti criteri:

  • Tipo di messaggio: richiesta

<Version> (secondario di <Copy>)

determina se la versione HTTP viene copiata dalla richiesta di origine alla richiesta di destinazione. Questo elemento non ha alcun effetto su una risposta.

Se "true", copia la versione HTTP trovata nell'attributo source dell'elemento <Copy> all'oggetto specificato dall'elemento <AssignTo>.

Valore predefinito Falso
Obbligatorio? Facoltativo
Tipo Booleano
Elemento principale <Copy>
Elementi secondari Nessuno

L'elemento <Version> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Version>[false|true]</Version>
  </Copy>
</AssignMessage>

Esempio 1

L'esempio seguente imposta <Version> su "true" sulla richiesta, che copia versione dall'oggetto di richiesta predefinito a un nuovo oggetto di richiesta personalizzato:

<AssignMessage name="copy-version-1">
  <Copy source="request">
    <Version>true</Version>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Puoi utilizzare <Version> solo se vengono soddisfatti i seguenti criteri:

  • Tipo di messaggio: richiesta

<DisplayName>

Da utilizzare in aggiunta all'attributo name per etichettare il criterio in editor proxy UI di gestione con un nome diverso e più naturale.

L'elemento <DisplayName> è comune a tutti i criteri.

Valore predefinito n/d
Obbligatorio? (Facoltativo) Se ometti <DisplayName>, il valore del valore viene utilizzato l'attributo name del criterio
Tipo Stringa
Elemento principale &lt;PolicyElement&gt;
Elementi secondari Nessuno

L'elemento <DisplayName> utilizza la seguente sintassi:

Sintassi

<PolicyElement>
  <DisplayName>policy_display_name</DisplayName>
  ...
</PolicyElement>

Esempio

<PolicyElement>
  <DisplayName>My Validation Policy</DisplayName>
</PolicyElement>

L'elemento <DisplayName> non ha attributi o elementi secondari.

<IgnoreUnresolvedVariables>

Determina se l'elaborazione si interrompe quando viene rilevata una variabile non risolta.

Valore predefinito Falso
Obbligatorio? Facoltativo
Tipo Booleano
Elemento principale <AssignMessage>
Elementi secondari Nessuno

Imposta su true per ignorare le variabili non risolte e continuare l'elaborazione. altrimenti false. Il valore predefinito è false.

L'impostazione di <IgnoreUnresolvedVariables> su true è diversa dall'impostazione del Da continueOnError a true di <AssignMessage> in quanto è specifico per l'impostazione e il recupero dei valori delle variabili. Se imposti continueOnError su true, Edge ignora tutti gli errori, non solo quelli riscontrati durante l'utilizzo come la codifica one-hot delle variabili categoriche.

L'elemento <IgnoreUnresolvedVariables> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>
</AssignMessage>

Esempio 1

L'esempio seguente imposta <IgnoreUnresolvedVariables> su "true":

<AssignMessage name="ignoreunresolvedvariables">
  <Copy source="response">
    ...
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  </Copy>
</AssignMessage>

<Remove>

Rimuove intestazioni, parametri di ricerca, parametri del modulo e/o il payload dei messaggi da un messaggio. Il messaggio può essere una richiesta o una risposta. Tu specifichi quale messaggio <Remove> interviene utilizzando l'elemento <AssignTo>.

Valore predefinito n/d
Obbligatorio? Facoltativo
Tipo Tipo complesso
Elemento principale <AssignMessage>
Elementi secondari <FormParams>
<Headers>
<Payload>
<QueryParams>

Un caso d'uso comune di <Remove> è l'eliminazione di un parametro di query che contiene dati dall'oggetto della richiesta in entrata, per evitare di passarlo al server di backend.

L'elemento <Remove> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>
</AssignMessage>

Esempio 1

L'esempio seguente rimuove il corpo del messaggio dalla risposta:

<AssignMessage continueOnError="false" enabled="true" name="remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

Nel flusso di risposta, questo criterio rimuove il corpo della risposta, restituendo solo HTTP al client.

Esempio 2

L'esempio seguente rimuove tutti i parametri del modulo e un parametro di query dalla richiesta:

<AssignMessage continueOnError="false" enabled="true" name="remove-2">
  <Remove>
    <!-- Empty (<FormParams/>) removes all form parameters -->
    <FormParams/>
    <QueryParams>
      <QueryParam name="qp1"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

<FormParams> (secondario di <Remove>)

Rimuove i parametri del modulo specificati dalla richiesta. Questo elemento non ha alcun effetto su un la risposta corretta.

Valore predefinito n/d
Obbligatorio? Facoltativo
Tipo Array di elementi <FormParam> o un array vuoto
Elemento principale <Remove>
Elementi secondari <FormParam>

L'elemento <FormParams> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Remove>
</AssignMessage>

Esempio 1

L'esempio seguente rimuove tre parametri del modulo dalla richiesta:

<AssignMessage name="remove-formparams-1">
  <Remove>
    <FormParams>
      <FormParam name="form_param_1"/>
      <FormParam name="form_param_2"/>
      <FormParam name="form_param_3"/>
    </FormParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

Esempio 2

L'esempio seguente rimuove tutti i parametri del modulo dalla richiesta:

<AssignMessage name="remove-formparams-2">
  <Remove>
    <FormParams/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

Esempio 3

Se esistono più parametri del modulo con lo stesso nome, utilizza la seguente sintassi:

<AssignMessage name="remove-formparams-3">
  <Remove>
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

Questo esempio rimuove "f1", "f2" e il secondo valore di "f3". Se "f3" ha un solo non viene rimosso.

Puoi utilizzare <FormParams> solo se vengono soddisfatti i seguenti criteri:

  • Tipo di messaggio: richiesta
  • Content-Type: "application/x-www-form-urlcoded"

<Headers> (secondario di <Remove>)

Rimuove le intestazioni HTTP specificate dalla richiesta o dalla risposta, specificate dal Elemento <AssignTo>.

Valore predefinito n/d
Obbligatorio? Facoltativo
Tipo Array di elementi <Header> o un array vuoto
Elemento principale <Remove>
Elementi secondari <Header>

L'elemento <Headers> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Remove>
</AssignMessage>

Esempio 1

L'esempio seguente rimuove l'intestazione user-agent dalla richiesta:

<AssignMessage name="remove-headers-1">
  <Remove>
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Esempio 2

L'esempio seguente rimuove tutte le intestazioni dalla richiesta:

<AssignMessage name="remove-headers-2">
  <Remove>
    <Headers/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Esempio 3

Se esistono più intestazioni con lo stesso nome, utilizza la seguente sintassi:

<AssignMessage name="remove-headers-3">
  <Remove>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Questo esempio rimuove "h1", "h2" e il secondo valore di "h3" dalla richiesta. Se "h3" ha un solo valore, non viene rimosso.

<Payload> (secondario di <Remove>)

Determina se <Remove> elimina il payload nella richiesta o nella risposta, ovvero specificato dall'elemento <AssignTo>. Impostato su "true" a cancellare il payload; altrimenti "false". Il valore predefinito è "false".

Valore predefinito Falso
Obbligatorio? Facoltativo
Tipo Booleano
Elemento principale <Remove>
Elementi secondari Nessuno

L'elemento <Payload> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <Payload>[false|true]</Payload>
  </Remove>
</AssignMessage>

Esempio 1

L'esempio seguente imposta <Payload> su "true" in modo che il payload della richiesta cancellato:

<AssignMessage name="remove-payload-1">
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

<QueryParams> (secondario di <Remove>)

Rimuove dalla richiesta i parametri di ricerca specificati. Questo elemento non ha alcun effetto su un la risposta corretta.

Valore predefinito n/d
Obbligatorio? Facoltativo
Tipo Array di elementi <QueryParam> o un array vuoto
Elemento principale <Remove>
Elementi secondari <QueryParam>

L'elemento <QueryParams> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>
</AssignMessage>

Esempio 1

L'esempio seguente rimuove un singolo parametro di query dalla richiesta:

<AssignMessage name="remove-queryparams-1">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
      </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Esempio 2

L'esempio seguente rimuove tutti parametri di ricerca dalla richiesta:

<AssignMessage name="remove-queryparams-2">
  <Remove>
      <QueryParams/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Esempio 3

Se esistono più parametri di query con lo stesso nome, utilizza la seguente sintassi:

<AssignMessage name="remove-queryparams-3">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
        <QueryParam name="qp2"/>
        <QueryParam name="qp3.2"/>
      </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Questo esempio rimuove "qp1", "qp2" e il secondo valore di "qp3" dalla richiesta. Se "qp3" ha un solo valore, non viene rimosso.

Esempio 4

L'esempio seguente rimuove il parametro di query apikey dalla richiesta:

<AssignMessage name="remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Puoi utilizzare <QueryParams> solo se vengono soddisfatti i seguenti criteri:

  • Verbo HTTP: GET
  • Tipo di messaggio: richiesta

<Set>

Imposta le informazioni nel messaggio di richiesta o risposta, che è specificato dal Elemento <AssignTo>. <Set> sovrascrive le intestazioni o già esistenti nel messaggio originale. Per creare una nuova intestazione o un nuovo parametro, utilizza l'elemento <Add>.

Valore predefinito n/d
Obbligatorio? Facoltativo
Tipo Tipo complesso
Elemento principale <AssignMessage>
Elementi secondari <FormParams>
<Headers>
<Payload>
<Path>
<QueryParams>
<ReasonPhrase>
<StatusCode>
<Verb>
<Version>

L'elemento <Set> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>path</Path>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>
</AssignMessage>

Esempio 1

Nell'esempio seguente viene mostrato l'elemento <Set>:

<AssignMessage continueOnError="false" enabled="true" name="set-1">
  <Set>
    <FormParams>
      <FormParam name="myparam">{request.header.myparam}</FormParam>
    </FormParams>
    <Headers>
        <Header name="user-agent">{request.header.user-agent}</Header>
    </Headers>
    <QueryParams>
      <QueryParam name="name">{request.header.name}</QueryParam>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
    <!-- <Verb>GET</Verb> -->
    <Payload contentType="text/plain">42</Payload>
    <Path/>
    <ReasonPhrase>Bad request</ReasonPhrase>
    <StatusCode>400</StatusCode>
    <Verb>POST</Verb>
    <Verb>{my_variable}</Verb>
    <Version>1.1</Version>
  </Set>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

<FormParams> (secondario di <Set>)

Sovrascrive i parametri del modulo esistenti in una richiesta e li sostituisce con i nuovi valori impostati specifica con questo elemento. Questo elemento non ha alcun effetto su una risposta.

Valore predefinito n/d
Obbligatorio? Facoltativo
Tipo Array di <FormParam> elementi
Elemento principale <Set>
Elementi secondari <FormParam>

L'elemento <FormParams> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Set>
</AssignMessage>

Esempio 1

Nell'esempio seguente viene impostato un parametro del modulo chiamato "myparam" al valore del parametro Variabile request.header.myparam in una nuova richiesta personalizzata:

<AssignMessage name="set-formparams-1">
  <Set>
    <FormParams>
      <FormParam name="myparam">{request.header.myparam}</FormParam>
    </FormParams>
  </Set>
    <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Puoi utilizzare <FormParams> solo se vengono soddisfatti i seguenti criteri:

  • Verbo HTTP: POST
  • Tipo di messaggio: richiesta

Se nelle norme definisci parametri di modulo vuoti (<Add><FormParams/></Add>), il criterio non aggiunge nessun modulo parametri. È come omettere <FormParams>.

<Set> modifica il valore Content-Type del messaggio in &quot;application/x-www-form-urlencoded&quot; prima di inviarlo all'endpoint di destinazione.

<Headers> (secondario di <Set>)

Sovrascrive le intestazioni HTTP esistenti nella richiesta o nella risposta, specificata dal parametro Elemento <AssignTo>.

Valore predefinito n/d
Obbligatorio? Facoltativo
Tipo Array di <Header> elementi
Elemento principale <Set>
Elementi secondari <Header>

L'elemento <Headers> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Set>
</AssignMessage>

Esempio 1

Nell'esempio seguente l'intestazione user-agent viene impostata sul valore del valore Variabile request.header.user-agent:

<AssignMessage name="set-headers-1">
  <Set>
    <Headers>
      <Header name="user-agent">{request.header.user-agent}</Header>
    </Headers>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

Se definisci intestazioni vuote nel criterio (<Add><Headers/></Add>), il criterio non aggiunge nessuna intestazione. Questo equivale a omettere <Headers>.

<Path> (secondario di <Set>)

<Payload> (secondario di <Set>)

Definisce il corpo del messaggio per una richiesta o una risposta, specificato dal Elemento <AssignTo>. Il payload può essere qualsiasi tipo di contenuto valido, come un testo, JSON o XML.

Valore predefinito stringa vuota
Obbligatorio? Facoltativo
Tipo Stringa
Elemento principale <Set>
Elementi secondari Nessuno

L'elemento <Payload> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
  </Set>
</AssignMessage>

Esempio 1

L'esempio seguente imposta un payload in testo normale:

<AssignMessage name="set-payload-1">
  <Set>
    <Payload contentType="text/plain">42</Payload>
  </Set>
</AssignMessage>

Esempio 2

L'esempio seguente imposta un payload JSON:

<AssignMessage name="set-payload-2">
  <Set>
    <Payload contentType="application/json">
      {"name":"foo", "type":"bar"}
    </Payload>
  </Set>
</AssignMessage>

Esempio 3

L'esempio seguente inserisce valori delle variabili nel payload aggregando i nomi delle variabili tra parentesi graffe:

<AssignMessage name="set-payload-3">
  <Set>
    <Payload contentType="application/json">
      {"name":"foo", "type":"{variable_name}"}
    </Payload>
  </Set>
</AssignMessage>

Nelle versioni precedenti di Apigee Edge, ad esempio prima della release 16.08.17 nel cloud, era possibile Non utilizzare parentesi graffe per indicare i riferimenti alle variabili all'interno dei payload JSON. In queste release, è necessario utilizzare gli attributi variablePrefix e variableSuffix per specificare i delimitatori e utilizzarli per aggregare i nomi delle variabili, in questo modo:

<AssignMessage name="set-payload-3b">
  <Set>
    <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
      {"name":"foo", "type":"@variable_name#"}
    </Payload>
  </Set>
</AssignMessage>

La sintassi precedente continua a funzionare.

Esempio 4

I contenuti di <Payload> vengono trattati come un modello di messaggio. Ciò significa che Il criterioAssignMessage sostituisce le variabili racchiuse tra parentesi graffe con il valore del parametro a cui viene fatto riferimento in fase di runtime.

L'esempio seguente utilizza la sintassi delle parentesi graffe per impostare parte del payload su un valore della variabile:

<AssignMessage name="set-payload-4">
  <Set>
    <Payload contentType="text/xml">
      <root>
        <e1>sunday</e1>
        <e2>funday</e2>
        <e3>{var1}</e3>
      </root>
    </Payload>
  </Set>
</AssignMessage>

Nella tabella seguente vengono descritti gli attributi di <Payload>:

Attributo Descrizione Presenza Tipo
contentType

Se specificato, il valore contentType viene assegnato al Intestazione HTTP Content-Type.

Facoltativo Stringa
variablePrefix Facoltativamente, specifica il delimitatore iniziale su una variabile di flusso. Il valore predefinito è "{". Per Per saperne di più, consulta Riferimento per le variabili di flusso. Facoltativo Carattere
variableSuffix Facoltativamente, specifica il delimitatore finale su una variabile di flusso. Il valore predefinito è "}". Per Per saperne di più, consulta Riferimento per le variabili di flusso. Facoltativo Carattere

<QueryParams> (secondario di <Set>)

Sovrascrive parametri di ricerca esistenti nella richiesta con nuovi valori. Questo elemento non ha alcun effetto su una risposta.

Valore predefinito n/d
Obbligatorio? Facoltativo
Tipo Array di <QueryParam> elementi
Elemento principale <Set>
Elementi secondari <QueryParam>

L'elemento <QueryParams> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Set>
</AssignMessage>

Esempio 1

Nell'esempio seguente viene impostato l'"indirizzo" al valore del parametro di ricerca Variabile request.header.address:

<AssignMessage continueOnError="false" enabled="true" name="set-queryparams-1">
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
  </Set>
</AssignMessage>

Puoi utilizzare <QueryParams> solo se vengono soddisfatti i seguenti criteri:

  • Verbo HTTP: GET
  • Tipo di messaggio: richiesta

Se nel criterio vengono definiti parametri di ricerca vuoti (<Set><QueryParams/></Set>), il criterio non imposta alcuna query parametri. Equivale all'omissione di <QueryParams>.

<ReasonPhrase> (secondario di <Set>)

Imposta la frase del motivo sulla risposta. In genere questa operazione viene eseguita per il debug in combinazione con <StatusCode>. Questo elemento non ha alcun effetto su una richiesta.

Valore predefinito n/d
Obbligatorio? Facoltativo
Tipo Stringa
Elemento principale <Set>
Elementi secondari Nessuno

L'elemento <ReasonPhrase> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
  </Set>
</AssignMessage>

Esempio 1

L'esempio seguente definisce una frase di motivazione semplice:

<AssignMessage name="set-reasonphrase-1">
  <Set>
    <ReasonPhrase>Bad medicine</ReasonPhrase>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

Esempio 2

I contenuti di <ReasonPhrase> vengono trattati come un modello di messaggio. Ciò significa un nome di variabile racchiuso tra parentesi graffe verrà sostituito in fase di esecuzione con il valore del parametro di riferimento, come illustrato nell'esempio seguente:

<AssignMessage name="set-reasonphrase-2">
  <Set>
    <ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

Puoi utilizzare <ReasonPhrase> solo se vengono soddisfatti i seguenti criteri:

  • Tipo di messaggio: risposta

<StatusCode> (secondario di <Set>)

Imposta il codice di stato sulla risposta. Questo elemento non ha alcun effetto su una richiesta.

Valore predefinito "200" (quando l'attributo createNew di <AssignTo> è impostato su "true")
Obbligatorio? Facoltativo
Tipo Stringa o variable
Elemento principale <Set>
Elementi secondari Nessuno

L'elemento <StatusCode> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
  </Set>
</AssignMessage>

Esempio 1

L'esempio seguente imposta un codice di stato semplice:

<AssignMessage name="set-statuscode-1">
  <Set>
    <StatusCode>404</StatusCode>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

Esempio 2

I contenuti di <StatusCode> vengono trattati come un modello di messaggio. Ciò significa nome della variabile racchiuso tra parentesi graffe verrà sostituito in fase di esecuzione con il valore della variabile di riferimento, come illustrato nell'esempio seguente:

<AssignMessage name="set-statuscode-2">
  <Set>
    <StatusCode>{calloutresponse.status.code}</StatusCode>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

Puoi utilizzare <StatusCode> solo se vengono soddisfatti i seguenti criteri:

  • Tipo di messaggio: risposta

<Verb> (secondario di <Set>)

Imposta il verbo HTTP sulla richiesta. Questo elemento non ha alcun effetto su una risposta.

Valore predefinito n/d
Obbligatorio? Facoltativo
Tipo Stringa o variable
Elemento principale <Set>
Elementi secondari Nessuno

L'elemento <Verb> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
  </Set>
</AssignMessage>

Esempio 1

L'esempio seguente imposta un verbo semplice nella richiesta:

<AssignMessage name="set-verb-1">
  <Set>
    <Verb>POST</Verb>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Esempio 2

I contenuti di <Verb> vengono trattati come un modello di messaggio. Questo significa che un nome variabile racchiuse tra parentesi graffe verrà sostituito in fase di runtime con il valore del .

L'esempio seguente utilizza una variabile per compilare un verbo:

<AssignMessage name="set-verb-2">
  <Set>
    <Verb>{my_variable}</Verb>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Puoi utilizzare <Verb> solo se vengono soddisfatti i seguenti criteri:

  • Tipo di messaggio: richiesta

<Version> (secondario di <Set>)

Imposta la versione HTTP su una richiesta. Questo elemento non ha alcun effetto su una risposta.

Valore predefinito n/d
Obbligatorio? Facoltativo
Tipo Stringa o variable
Elemento principale <Set>
Elementi secondari Nessuno

L'elemento <Version> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>
</AssignMessage>

Esempio 1

Nell'esempio seguente il numero di versione viene impostato su "1.1":

<AssignMessage name="set-version-1">
  <Set>
    <Version>1.1</Version>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Esempio 2

Di seguito viene utilizzata una variabile tra parentesi graffe per impostare il numero di versione:

<AssignMessage name="set-version-2">
  <Set>
    <Version>{my_version}</Version>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

I contenuti di <Version> vengono trattati come un modello di messaggio. Ciò significa nome della variabile racchiuso tra parentesi graffe verrà sostituito in fase di runtime con il valore del valore .

Puoi utilizzare <Version> solo se vengono soddisfatti i seguenti criteri:

  • Tipo di messaggio: richiesta

Crea messaggi di richiesta personalizzati

Puoi utilizzare il criterioAssignMessage per creare un messaggio di richiesta personalizzato. Dopo aver creato un account richiesta, puoi utilizzarla nei seguenti modi:

  • Accedi alle relative variabili in altri criteri
  • Passalo a un servizio esterno
di Gemini Advanced.

Per creare un messaggio di richiesta personalizzato, utilizza l'elemento <AssignTo> nel criterioAssignMessage . Imposta createNew su "true" e specificare il nome del nuovo messaggio nel corpo dell'elemento, come illustrato nell'esempio seguente:

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

Per impostazione predefinita, Edge non fa nulla con il messaggio di richiesta personalizzato. Dopo averlo creato, Edge durante il flusso con la richiesta originale. Per utilizzare la richiesta personalizzata, aggiungi un criterio come come criterio ServiceCallout al proxy in grado di passare la richiesta personalizzata a un completamente gestito di Google Cloud.

I seguenti esempi creano messaggi di richiesta personalizzati:

Esempio 1

Nell'esempio seguente viene creato un oggetto di richiesta personalizzato con Assegna messaggio:

<AssignMessage name="AssignMessage-3">
  <AssignTo createNew="true" type="request">MyCustomRequest</AssignTo>
  <Copy>
    <Headers>
     <Header name="user-agent"/>
    </Headers>
  </Copy>
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.queryparam.addy}</QueryParam>
    </QueryParams>
    <Verb>GET</Verb>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

Questo esempio:

  • Crea un nuovo oggetto del messaggio di richiesta denominato "MyCustomRequest".
  • Su MyCustomRequest, queste norme:
    • Copia il valore dell'intestazione HTTP user-agent dalla richiesta al nuovo messaggio. Poiché <Copy> utilizza un riferimento assoluto al user-agent, non c'è è necessario specificare l'attributo source in <Copy>.
    • Imposta il parametro di query address nel messaggio personalizzato sul valore di il parametro di query addy della richiesta in entrata.
    • Imposta il verbo HTTP su GET.
  • Imposta <IgnoreUnresolvedVariables> su "false". Quando <IgnoreUnresolvedVariables> è "false". Se una delle variabili che il criterio cerca di aggiungere non esiste, Edge verrà arrestato nel flusso dell'API.

Esempio 2

Ecco un altro esempio che mostra come creare un oggetto di richiesta personalizzato con Assegna Messaggio:

<AssignMessage name="AssignMessage-2">
  <AssignTo createNew="true" type="request">partner.request</AssignTo>
  <Set>
    <Verb>POST</Verb>
    <Payload contentType="text/xml">
      <request><operation>105</operation></request>
    </Payload>
  </Set>
</AssignMessage>

In questo esempio viene creata una nuova richiesta personalizzata denominata "partner.request". Quindi imposta <Verb> e <Payload> in merito alla nuova richiesta.

Puoi accedere a un messaggio di richiesta personalizzato in un altro criterioAssignMessage che verrà applicato in seguito il flusso. L'esempio seguente restituisce il valore del messaggio Intestazione user-agent:

<AssignMessage name="custom-request-1-access">
  <DisplayName>custom-request-1-access</DisplayName>
  <AssignTo createNew="false" type="request"></AssignTo>
  <Set>
    <Headers>
      <Header name="user-agentCopyCustomRequest">{MyCustomRequest.header.user-agent}</Header>
    </Headers>
  </Set>
</AssignMessage>

Video

Guarda i video seguenti per scoprire di più sul criterioAssignMessage.

Video Descrizione
Perché assegnare i ruoli Norme relative ai messaggi? Scopri i vantaggi dell'utilizzo del criterioAssignMessage per modificare la richiesta API o senza modificare il codice di backend.
Copia elementi API utilizzando il criterioAssignMessage Copia elementi da una richiesta o risposta API e crea una nuova richiesta o risposta mediante il criterioAssignMessage.
Rimuovi API che usano il criterioAssignMessage Rimuovi gli elementi dell'API e modifica l'API prima che raggiunga il backend di destinazione utilizzando Assegna il criterio AskMessage.
Aggiungi e imposta API che usano il criterioAssignMessage Modifica la richiesta o la risposta API aggiungendo parametri di ricerca, intestazioni, parametri del modulo oppure payload usando il criterioAssignMessage.
Crea impostazioni personalizzate variabili usando il criterioAssignMessage Imposta variabili di flusso personalizzate utilizzando il criterioAssignMessage e utilizza le variabili in altri criteri nel proxy API.
Crea nuovo oggetti di richiesta o risposta usando il criterioAssignMessage Crea nuovi oggetti di richiesta o risposta API utilizzando il criterioAssignMessage nell'API runtime.
Crea un'API fittizia utilizzando il criterioAssignMessage Crea una semplice API REST fittizia aggiungendo il criterioAssignMessage nella risposta flusso di lavoro.
Imposta o modifica payload utilizzando il criterioAssignMessage Converti la richiesta REST in una richiesta SOAP impostando il payload SOAP utilizzando il criterioAssignMessage durante il runtime delle API.

Codici di errore

Questa sezione descrive i codici di errore e i messaggi di errore restituiti e le variabili di errore impostate da Edge quando questo criterio attiva un errore. Queste informazioni sono importanti se stai sviluppando regole di errore per gestire gli errori. Per scoprire di più, consulta Informazioni importanti sugli errori relativi alle norme e Gestione degli errori.

Errori di runtime

Questi errori possono verificarsi durante l'esecuzione del criterio.

Codice guasto Stato HTTP Causa Correggi
steps.assignmessage.SetVariableFailed 500 Il criterio non è stato in grado di impostare una variabile. Controlla la stringa di errore per il nome della variabile non risolta.
steps.assignmessage.VariableOfNonMsgType 500

Questo errore si verifica se l'attributo source nell'elemento <Copy> è impostato su una variabile che non è di tipo message.

Le variabili di tipo di messaggio rappresentano intere richieste e risposte HTTP. Le variabili di flusso Edge integrate request, response e message sono di tipo message. Per scoprire di più sulle variabili dei messaggi, consulta la sezione Riferimento alle variabili.

steps.assignmessage.UnresolvedVariable 500

Questo errore si verifica se una variabile specificata nel criterio Assegna messaggio è:

  • fuori ambito (non disponibile nel flusso specifico in cui viene eseguito il criterio)
  • o
  • non può essere risolto (non è definito)

Errori di deployment

Questi errori possono verificarsi quando esegui il deployment di un proxy contenente questo criterio.

Nome dell'errore Causa Correggi
InvalidIndex Se l'indice specificato negli elementi <Copy> e/o <Remove> del criterio Assegna messaggio è 0 o un numero negativo, il deployment del proxy API non va a buon fine.
InvalidVariableName Se l'elemento secondario <Name> è vuoto o non specificato nell'elemento <AssignVariable>, il deployment del proxy API non va a buon fine perché non esiste un nome di variabile valido a cui assegnare un valore. È richiesto un nome di variabile valido.
InvalidPayload Un payload specificato nel criterio non è valido.

Variabili di errore

Queste variabili vengono impostate quando questo criterio attiva un errore in fase di runtime. Per maggiori informazioni, consulta la sezione Cosa devi sapere sugli errori dei criteri.

Variabili Dove Esempio
fault.name="fault_name" fault_name è il nome dell'errore, come indicato nella tabella Errori di runtime sopra. Il nome dell'errore è l'ultima parte del codice dell'errore. fault.name Matches "UnresolvedVariable"
assignmessage.policy_name.failed policy_name è il nome specificato dall'utente del criterio che ha generato l'errore. assignmessage.AM-SetResponse.failed = true

Esempio di risposta di errore

{  
   "fault":{  
      "detail":{  
         "errorcode":"steps.assignmessage.VariableOfNonMsgType"
      },
      "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message"
   }
}

Esempio di regola di errore

<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="Assign Message Faults">
    <Step>
        <Name>AM-CustomNonMessageTypeErrorResponse</Name>
        <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition>
    </Step>
    <Step>
        <Name>AM-CustomSetVariableErrorResponse</Name>
        <Condition>(fault.name = "SetVariableFailed")</Condition>
    </Step>
    <Condition>(assignmessage.failed = true) </Condition>
</FaultRule>

Schemi

Ogni tipo di criterio è definito da uno schema XML (.xsd). Come riferimento, consulta gli schemi dei criteri sono disponibili su GitHub.

Argomenti correlati

Operazione in corso esempi del criterioAssignMessage sono disponibili negli esempi della piattaforma API.

Per un esempio più avanzato di come eseguire l'override di target.url dalla ProxyEndpoint, consulta questo articolo della community Apigee.

Per visualizzare un "percorso impostato" in azione in un criterio ServiceCallout, consulta questo esempio di apprendimento facendo pratica negli esempi di GitHub di Apigee. Basta clonare il repository segui le istruzioni in questo argomento. L'esempio utilizza il criterioAssignMessage per impostare un percorso di richiesta, utilizza quindi un criterio callout di servizio per inviare la richiesta a un servizio esterno.