criterio RaiseFault

Questa pagina si applica a Apigee e Apigee ibridi.

Visualizza documentazione di Apigee Edge.

icona norme

Cosa

Genera un messaggio personalizzato in risposta a una condizione di errore. Utilizzare RaiseFault per definire un'istanza risposta di errore che viene restituita all'app richiedente quando si verifica una condizione specifica.

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

Per informazioni generali sulla gestione degli errori, consulta Gestione degli errori.

Esempi

Restituzione FaultResponse

Nell'uso più comune, RaiseFault viene utilizzato per restituire una risposta di errore personalizzata al che richiede l'app. Ad esempio, questo criterio restituirà il codice di stato 404 con nessun payload:

<RaiseFault name="404">
 <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
 <FaultResponse>
   <Set>
     <StatusCode>404</StatusCode>
   </Set>
 </FaultResponse>
</RaiseFault>

Payload FaultResponse di reso

Un esempio più complesso prevede la restituzione di un payload personalizzato di risposta agli errori, insieme a HTTP e un codice di stato HTTP. Nell'esempio seguente, la risposta all'errore viene compilata. con un messaggio XML contenente il codice di stato HTTP ricevuto da Apigee dal backend e un'intestazione contenente il tipo di errore che si è verificato:

<RaiseFault name="ExceptionHandler">
 <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
 <FaultResponse>
   <Set>
     <Payload contentType="text/xml">
       <root>Please contact support@company.com</root>
     </Payload>
     <StatusCode>{response.status.code}</StatusCode>
   </Set>
   <Add>
     <Headers>
       <Header name="FaultHeader">{fault.name}</Header>
     </Headers>
   </Add>
 </FaultResponse>
</RaiseFault>

Per un elenco di tutte le variabili disponibili per il completamento dinamico di FaultResponse vedi Variabili riferimento

Gestire gli errori di callout del servizio


Informazioni sul criterio RaiseFault

Apigee consente di eseguire una gestione personalizzata delle eccezioni utilizzando un criterio di tipo RaiseFault. Il criterio RaiseFault, simile al criterio RaiseFault, è simile al AttributionMessage policy, consente di generare una risposta di errore personalizzata in risposta a una condizione di errore.

Utilizza il criterio RaiseFault per definire una risposta all'errore che viene restituita all'app richiedente. quando si verifica una specifica condizione di errore. La risposta di errore può essere composta da intestazioni HTTP, query e un payload per i messaggi. Una risposta agli errori personalizzata può essere più utile per gli sviluppatori di app e per gli utenti finali delle app rispetto ai messaggi di errore generici o ai codici di risposta HTTP.

Se eseguito, il criterio RaiseFault trasferisce il controllo dal flusso attuale all'errore che restituisce la risposta di errore designata all'app client richiedente. Quando Il flusso di messaggi passa al flusso di errore, non viene eseguita alcuna ulteriore elaborazione dei criteri. Tutti i restanti I passaggi di elaborazione vengono bypassati e la risposta di errore viene restituita direttamente al prompt dell'app.

Puoi utilizzare RaiseFault in un ProxyEndpoint o in un TargetEndpoint. Generalmente, alleghi Condition alla criterio RaiseFault. Dopo l'esecuzione di RaiseFault, Apigee eseguirà la normale elaborazione dei guasti, la valutazione FaultRules o se non sono definite regole di errore, termina l'elaborazione della richiesta.

Riferimento elemento

Il riferimento all'elemento descrive gli elementi e gli attributi del criterio RaiseFault.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RaiseFault async="false" continueOnError="false" enabled="true" name="Raise-Fault-1">
    <DisplayName>RaiseFault 1</DisplayName>
    <FaultResponse>
        <AssignVariable>
          <Name/>
          <Value/>
        </AssignVariable>
        <Add>
            <Headers/>
        </Add>
        <Copy source="request">
            <Headers/>
            <StatusCode/>
        </Copy>
        <Remove>
            <Headers/>
        </Remove>
        <Set>
            <Headers/>
            <Payload/>
            <StatusCode/>
        </Set>
    </FaultResponse>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</RaiseFault>

&lt;RaiseFault&gt; attributi

<RaiseFault async="false" continueOnError="false" enabled="true" name="Raise-Fault-1">

La tabella seguente descrive gli attributi comuni a tutti gli elementi principali dei criteri:

Attributo Descrizione Predefinito Presenza
name

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

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

N/A Obbligatorio
continueOnError

Impostalo su false per restituire un errore in caso di errore di un criterio. Questo è il comportamento previsto per la maggior parte dei criteri.

Imposta su true per fare in modo che l'esecuzione del flusso continui anche in caso di errore di un criterio. Vedi anche:

false Facoltativo
enabled

Imposta il criterio su true per applicare il criterio.

Impostala su false per disattivare il criterio. Il criterio non verrà applicato anche se rimane associato a un flusso.

true Facoltativo
async

Questo attributo è obsoleto.

false Deprecata

Elemento <DisplayName>

Utilizzalo in aggiunta all'attributo name per etichettare il criterio nell'editor proxy dell'interfaccia utente di gestione con un nome diverso in linguaggio naturale.

<DisplayName>Policy Display Name</DisplayName>
Predefinito

N/A

Se ometti questo elemento, viene utilizzato il valore dell'attributo name del criterio.

Presenza Facoltativo
Tipo Stringa

&lt;IgnoreUnresolvedVariables&gt; elemento

(Facoltativo) Ignora qualsiasi errore di variabile non risolto nel flusso. Valori validi: true/false. Valore predefinito: true.

&lt;FaultResponse&gt; elemento

(Facoltativo) Definisce il messaggio di risposta restituito al client richiedente. FaultResponse utilizza le stesse impostazioni del criterioAssignMessage.

&lt;FaultResponse&gt;&lt;AssignVariable&gt; elemento

Assegna un valore a una variabile del flusso di destinazione. Se la variabile di flusso non esiste, AssignVariable la crea.

Ad esempio, utilizza il seguente codice per impostare la variabile denominata myFaultVar nel criterio RaiseFault:

<FaultResponse>
  <AssignVariable>
    <Name>myFaultVar</Name>
    <Value>42</Value>
  </AssignVariable>
  ...
</FaultResponse>

Potrai quindi fare riferimento a questa variabile nei modelli di messaggio in un secondo momento nel criterio RaiseFault. Inoltre, un criterio associato a una regola di errore può quindi accedere alla variabile. Ad esempio, Il criterioAssignMessage utilizza la variabile impostata in RaiseFault per impostare un'intestazione nel campo risposta ai guasti:

<AssignMessage enabled="true" name="Assign-Message-1">
  <Add>
    <Headers>
      <Header name="newvar">{myFaultVar}</Header>
    </Headers>
  </Add>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

<AssignVariable> nel criterio RaiseFault utilizza la stessa sintassi del parametro Elemento <AssignVariable> nel criterioAssignMessage.

&lt;FaultResponse&gt;&lt;Add&gt;/&lt;Headers&gt; elemento

Aggiunge intestazioni HTTP al messaggio di errore. Tieni presente che l'intestazione vuota <Add><Headers/></Add> non aggiunge nessuna intestazione. Questo esempio copia il valore della variabile di flusso request.user.agent nel intestazione.

<Add>
    <Headers>
        <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
</Add>

Predefinita:

N/D

Presenza:

Facoltativo

Tipo:

Stringa

&lt;FaultResponse&gt;&lt;Copy&gt; elemento

Copia le informazioni dal messaggio specificato dall' source al messaggio di errore.

    <Copy source="request">
        <Headers/>
        <StatusCode/>
    </Copy>

Predefinita:

N/D

Presenza:

Facoltativo

Tipo:

Stringa

Attributi

 <Copy source="response">
Attributo Descrizione Presenza Tipo
source

Specifica l'oggetto di origine della copia.

  • Se l'origine non è specificato, viene considerato un messaggio semplice. Ad esempio, se il criterio si trova nel nel flusso di richieste, l'origine usa per impostazione predefinita l'oggetto request. Se il criterio è in flusso di risposta, per impostazione predefinita viene utilizzato l'oggetto response. Se ometti source, puoi utilizzare una riferimento assoluto a una variabile di flusso come origine della copia. Ad esempio, specifica il valore {request.header.user-agent}.
  • Se la variabile di origine non può essere risolta o si risolve in un tipo non messaggio, &lt;Copy&gt; non riesce a e rispondere.
Facoltativo Stringa

&lt;FaultResponse&gt;&lt;Copy&gt;/&lt;Headers&gt; elemento

Copia l'intestazione HTTP specificata dall'origine nel messaggio di errore. Per copiare tutte le intestazioni, specifica <Copy><Headers/></Copy>.

<Copy source='request'>
    <Headers>
        <Header name="headerName"/>
    </Headers>
</Copy>

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

<Copy source='request'>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
</Copy>

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

Predefinita:

N/D

Presenza:

Facoltativo

Tipo:

Stringa

&lt;FaultResponse&gt;&lt;Copy&gt;/&lt;StatusCode&gt; elemento

Il codice di stato HTTP da copiare dall'oggetto specificato dall'attributo source all'errore .

<Copy source='response'>
    <StatusCode>404</StatusCode>
</Copy>

Predefinita:

falso

Presenza:

Facoltativo

Tipo:

Stringa

&lt;FaultResponse&gt;&lt;Remove&gt;/&lt;Headers&gt; elemento

Rimuove le intestazioni HTTP specificate dal messaggio di errore. Per rimuovere tutte le intestazioni, specifica <Remove><Headers/></Remove>. Questo esempio rimuove l'intestazione user-agent del messaggio.

<Remove>
    <Headers>
        <Header name="user-agent"/>
    </Headers>
</Remove>

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

<Remove>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
</Remove>

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

Predefinita:

N/D

Presenza:

Facoltativo

Tipo:

Stringa

&lt;FaultResponse&gt;&lt;Set&gt; elemento

Imposta le informazioni nel messaggio di errore.

    <Set>
        <Headers/>
        <Payload> </Payload>
        <StatusCode/>
    </Set>

Predefinita:

N/D

Presenza:

Facoltativo

Tipo:

N/D

&lt;FaultResponse&gt;/&lt;Set&gt;/&lt;Headers&gt; elemento

Imposta o sovrascrive le intestazioni HTTP nel messaggio di errore. Tieni presente che l'intestazione vuota <Set><Headers/></Set> non imposta nessuna intestazione. Questo esempio imposta l'intestazione user-agent alla variabile del messaggio specificata con Elemento <AssignTo>.

<Set>
    <Headers>
        <Header name="user-agent">{request.header.user-agent}</Header>
    </Headers>
</Set>

Predefinita:

N/D

Presenza:

Facoltativo

Tipo:

Stringa

&lt;FaultResponse&gt;/&lt;Set&gt;/&lt;Payload&gt; elemento

Imposta il payload del messaggio di errore.

<Set>
    <Payload contentType="text/plain">test1234</Payload>
</Set>

Imposta un payload JSON:

<Set>
    <Payload contentType="application/json">
        {"name":"foo", "type":"bar"}
    </Payload>
</Set>

In un payload JSON, puoi inserire le variabili utilizzando variablePrefix e Attributi variableSuffix con caratteri di delimitazione, come mostrato di seguito esempio.

<Set>
    <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
        {"name":"foo", "type":"@variable_name#"}
    </Payload>
</Set>

oppure, a partire dalla release 16.08.17 di Cloud, puoi anche utilizzare parentesi graffe per inserire le variabili:

<Set>
    <Payload contentType="application/json">
        {"name":"foo", "type":"{variable_name}"}
    </Payload>
</Set>

Imposta un payload misto in XML:

<Set>
    <Payload contentType="text/xml">
        <root>
          <e1>sunday</e1>
          <e2>funday</e2>
          <e3>{var1}</e3>
    </Payload>
</Set>

Predefinita:

Presenza:

Facoltativo

Tipo:

Stringa

Attributi

 <Payload contentType="content_type" variablePrefix="char" variableSuffix="char">
Attributo Descrizione Presenza Tipo
contentType

Se contentType viene specificato, il suo valore viene assegnato all'elemento Content-Type intestazione.

Facoltativo Stringa
variablePrefix Facoltativamente, specifica il delimitatore iniziale su una variabile di flusso poiché i payload JSON non possono utilizzare il valore predefinito "{" . Facoltativo Carattere
variableSuffix Facoltativamente, specifica il delimitatore finale di un flusso perché i payload JSON non possono utilizzare il valore predefinito "}" . Facoltativo Carattere

&lt;FaultResponse&gt;/&lt;Set&gt;/&lt;StatusCode&gt; elemento

Imposta il codice di stato della risposta.

<Set source='request'>
    <StatusCode>404</StatusCode>
</Set>

Predefinita:

falso

Presenza:

Facoltativo

Tipo:

Booleano

&lt;ShortFaultReason&gt; elemento

Specifica di visualizzare un motivo di errore breve nella risposta:

<ShortFaultReason>true|false</ShortFaultReason>

Per impostazione predefinita, il motivo dell'errore nella risposta al criterio è:

"fault":{"faultstring":"Raising fault. Fault name : Raise-Fault-1","detail":{"errorcode":"errorCode"}}}

Per rendere il messaggio più leggibile, puoi impostare l'elemento <ShortFaultReason> su true per abbreviare faultstring in base al nome della norma:

"fault":{"faultstring":"Raise-Fault-1","detail":{"errorcode":"errorCode"}}}

Valori validi: true/false(valore predefinito).

Predefinita:

falso

Presenza:

Facoltativo

Tipo:

Booleano

Variabili di flusso

Le variabili di flusso consentono il comportamento dinamico di criteri e flussi in fase di runtime, in base a HTTP intestazioni, contenuti dei messaggi o contesto di Flow. Sono disponibili le seguenti variabili di flusso predefinite dopo l'esecuzione di un criterio RaiseFault. Per ulteriori informazioni sulle variabili di flusso, consulta Riferimento per le variabili.

Variabile Tipo Autorizzazione Descrizione
fault.name Stringa Sola lettura Quando viene eseguito il criterio RaiseFault, questa variabile è sempre impostata sulla stringa RaiseFault.
fault.type Stringa Sola lettura Restituisce il tipo di errore presente nell'errore e, se non disponibile, una stringa vuota.
fault.category Stringa Sola lettura Restituisce la categoria dell'errore e, se non è disponibile, una stringa vuota.

Esempio di utilizzo di RaiseFault

L'esempio seguente utilizza una condizione per imporre la presenza di un queryparam con il nome zipcode nella richiesta in entrata. Se che queryparam non è presente, il flusso genererà un errore tramite RaiseFault:

<Flow name="flow-1">
  <Request>
    <Step>
        <Name>RF-Error-MissingQueryParam</Name>
        <Condition>request.queryparam.zipcode = null</Condition>
    </Step>
   ...
   </Request>
   ...
   <Condition>(proxy.pathsuffix MatchesPath "/locations") and (request.verb = "GET")</Condition>
</Flow>
Di seguito viene illustrato come sarebbe in RaiseFault:
<RaiseFault name='RF-Error-MissingQueryParam'>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <FaultResponse>
    <Set>
      <Payload contentType='application/json'>{
  "error" : {
    "code" : 400.02,
    "message" : "invalid request. Pass a zipcode queryparam."
  }
}
</Payload>
      <StatusCode>400</StatusCode>
    </Set>
  </FaultResponse>
</RaiseFault>

Messaggi di errore

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

Errori di runtime

Questi errori possono verificarsi quando il criterio viene eseguito.

Codice di errore Stato HTTP Causa
steps.raisefault.RaiseFault 500 Vedi stringa di errore.

Errori di deployment

Nessuno.

Variabili di errore

Queste variabili vengono impostate quando si verifica un errore di runtime. Per maggiori informazioni, consulta la pagina Cosa devi sapere sugli errori relativi ai criteri.

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

Esempio di risposta di errore

{
   "fault":{
      "detail":{
         "errorcode":"steps.raisefault.RaiseFault"
      },
      "faultstring":"Raising fault. Fault name: [name]"
   }
}

Schema

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

Argomenti correlati

Consulta la sezione Gestione degli errori.