RaiseFault politikası

Apigee Edge belgelerini görüntülüyorsunuz.
. Git: Apigee X belgeleri.
bilgi

Ne?

Bir hata koşuluna yanıt olarak özel bir mesaj oluşturur. RaiseFault değerini kullanarak bir Belirli bir koşul ortaya çıktığında istekte bulunan uygulamaya döndürülen hata yanıtı.

Hataların işlenmesi hakkında genel bilgi için Hataları işleme başlıklı makaleye bakın.

Örnekler

FaultResponse'u Döndür

En yaygın kullanımda, RaiseFault işlevi uygulama isteğinde bulunur. Örneğin bu politika,404 yük yok:

<RaiseFault name="404">
 <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
 <FaultResponse>
   <Set>
     <StatusCode>404</StatusCode>
     <ReasonPhrase>The resource requested was not found</ReasonPhrase>
   </Set>
 </FaultResponse>
</RaiseFault>

Return FaultResponse Yükü

Daha karmaşık bir örnek, HTTP ile birlikte özel bir hata yanıtı yükü döndürmeyi içerir. başlıkları ve HTTP durum kodu içerir. Aşağıdaki örnekte hata yanıtı doldurulur Edge'in arka uçtan aldığı HTTP durum kodunu içeren bir XML mesajıyla hizmetini ve oluşan hatanın türünü içeren bir üstbilgiyi içerir:

<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>
     <ReasonPhrase>Server error</ReasonPhrase>
   </Set>
   <Add>
     <Headers>
       <Header name="FaultHeader">{fault.name}</Header>
     </Headers>
   </Add>
 </FaultResponse>
</RaiseFault>

FaultResponse'u dinamik olarak doldurmak için kullanılabilecek tüm değişkenlerin listesi için görmek için Değişkenler referans

Hizmet açıklama metni hatalarını işleme


RaiseFault politikası hakkında

Apigee Edge, RaiseFault türünde bir politika kullanarak özel istisna işleme gerçekleştirmenize olanak tanır. Bu, assignMessage politikası, bir hata koşuluna yanıt olarak özel bir hata yanıtı oluşturmanıza olanak tanır.

İstekte bulunan uygulamaya döndürülen bir hata yanıtı tanımlamak için RaiseFault politikasını kullanın. belirli bir hata durumu ortaya çıktığında. Hata yanıtı HTTP üstbilgileri, sorgu parametrelerini ve mesaj yükünü içerir. Özel hata yanıtı, uygulama geliştiriciler için daha faydalı olabilir ve uygulama son kullanıcılarıyla ilgili genel hata mesajları ya da HTTP yanıt kodlarına kıyasla önemli bir fark yaratır.

REQUESTFault politikası yürütüldüğünde, kontrolü mevcut akıştan Hata'ya aktarır bu daha sonra, istekte bulunan istemci uygulamasına belirlenen hata yanıtını döndürür. mesajı Akışı, Hata akışına geçer, başka politika işleme yapılmaz. Kalan tümü işleme adımları atlanır ve hata yanıtı doğrudan istekte bulunan kullanıcıya gönderilir uygulamasını indirin.

RaiseFault değerini bir ProxyEndpoint veya TargetEndpoint'te kullanabilirsiniz. Genellikle, raporunuza bir Koşul'u BoostFault politikası. REQUESTFault yürütüldükten sonra, Apigee normal şekilde çalışır hata işleme, hiçbir hata kuralı yoksa işlemeyi sonlandırır. hakkında daha fazla bilgi edinin.

Öğe referansı

Öğe referansı, RaiseFault politikasının öğelerini ve özelliklerini açıklar.

<?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/>
            <ReasonPhrase/>
        </Copy>
        <Remove>
            <Headers/>
        </Remove>
        <Set>
            <Headers/>
            <Payload/>
            <ReasonPhrase/>
            <StatusCode/>
        </Set>
    </FaultResponse>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</RaiseFault>

&lt;RaiseFault&gt; özellikler

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

Aşağıdaki tabloda tüm politika üst öğelerinde ortak olan özellikler açıklanmaktadır:

Özellik Açıklama Varsayılan Varlık
name

Politikanın dahili adı. name özelliğinin değeri Harf, sayı, boşluk, kısa çizgi, alt çizgi ve nokta içermelidir. Bu değer, 255 karakteri aşmalıdır.

İsteğe bağlı olarak, politikayı<DisplayName> yönetim arayüzü proxy düzenleyicisinde farklı bir doğal dil adı kullanabilir.

Yok Zorunlu
continueOnError

Bir politika başarısız olduğunda hata döndürmesi için false olarak ayarlayın. Bu beklenen bir durumdur çoğu politika için geçerli olur.

Akış yürütmenin bir politikadan sonra bile devam etmesi için true olarak ayarlayın başarısız olur.

false İsteğe bağlı
enabled

Politikayı uygulamak için true olarak ayarlayın.

Politikayı devre dışı bırakmak için false değerine ayarlayın. Bu politika, bir akışa bağlı kalsa bile uygulanır.

true İsteğe bağlı
async

Bu özelliğin desteği sonlandırıldı.

false Kullanımdan kaldırıldı

&lt;DisplayName&gt; öğe

Politikayı name özelliğine ek olarak farklı bir doğal dil adına sahip yönetim arayüzü proxy düzenleyicisi.

<DisplayName>Policy Display Name</DisplayName>
Varsayılan

Yok

Bu öğeyi çıkarırsanız politikanın name özelliğinin değeri: kullanılır.

Varlık İsteğe bağlı
Tür Dize

&lt;IgnoreUnresolvedVariables&gt; öğe

(İsteğe bağlı) Akıştaki çözülmemiş değişken hatalarını yok sayar. Geçerli değerler: doğru/yanlış. Varsayılan true.

&lt;FaultResponse&gt; öğe

(İsteğe bağlı) İstekte bulunan istemciye döndürülen yanıt mesajını tanımlar. FaultResponse kullanımları AtananMessage politikasıyla aynı ayarlara sahiptir (Private Cloud için Apigee Edge'de kullanılamaz).

&lt;FaultResponse&gt;&lt;AssignVariable&gt; öğe

Bir hedef akış değişkenine değer atar. Akış değişkeni mevcut değilse AssignVariable bunu oluşturur.

Örneğin, myFaultVar adlı değişkeni ayarlamak için aşağıdaki kodu kullanın bulabilirsiniz:

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

Daha sonra, bu değişkene daha sonra RaiseFault politikasındaki mesaj şablonlarında başvurabilirsiniz. Ayrıca, FaultRule'a ekli bir politika da değişkene erişebilir. Örneğin, AttributionMessage politikası, PromoteFault'ta ayarlanan değişkeni kullanarak hata yanıtı:

<AssignMessage enabled="true" name="Assign-Message-1">
  <Add>
    <Headers>
      <Header name="newvar">{myFaultVar}</Header>
    </Headers>
  </Add>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

REQUESTFault politikasındaki <AssignVariable>, AssignmentMessage politikasındaki <AssignVariable> öğesi. Bu işlevin şu anda Private Cloud için Apigee Edge'de kullanıma sunulmamıştır.

&lt;FaultResponse&gt;&lt;Add&gt;/&lt;Headers&gt; öğe

Hata mesajına HTTP üstbilgileri ekler. Boş başlığın <Add><Headers/></Add> herhangi bir üstbilgi eklemiyor. Bu örnek, request.user.agent akış değişkeninin değerini kullanabilirsiniz.

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

Varsayılan:

Yok

Bulunma:

İsteğe bağlı

Tür:

Dize

&lt;FaultResponse&gt;&lt;Copy&gt; öğe

source özelliğini hata mesajıyla alakalı.

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

Varsayılan:

Yok

Bulunma:

İsteğe bağlı

Tür:

Dize

Özellikler

 <Copy source="response">
Özellik Açıklama Varlık Tür
source

Kopyanın kaynak nesnesini belirtir.

  • source değeri kullanılamıyorsa belirtilirse basit bir ileti olarak değerlendirilir. Örneğin, politika istek akışı etkinleştirilirse kaynak varsayılan olarak request nesnesine ayarlanır. Politika yanıt akışı sağladığında varsayılan olarak response nesnesi kullanılır. kaynak için bir kopyanın kaynağı olarak bir akış değişkenine mutlak başvuru. Örneğin, şunu belirtin: {request.header.user-agent} olarak ayarlanır.
  • Kaynak değişken çözümlenemezse veya mesaj olmayan bir türe dönüşürse &lt;Copy&gt; işlemi başarısız oldu yanıt verebilir.
İsteğe bağlı Dize

&lt;FaultResponse&gt;&lt;Copy&gt;/&lt;Headers&gt; öğe

Belirtilen HTTP üstbilgisini kaynaktan hata mesajına kopyalar. Tüm üstbilgileri kopyalamak için belirtin: <Copy><Headers/></Copy>.

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

Aynı ada sahip birden fazla üstbilgi varsa aşağıdaki söz dizimini kullanın:

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

Bu örnekte "h1", "h2" ve ikinci "h3" değeri kopyalanır. "h3" ise yalnızca bir tane var değeri kopyalanmazsa kopyalanmaz.

Varsayılan:

Yok

Bulunma:

İsteğe bağlı

Tür:

Dize

&lt;FaultResponse&gt;&lt;Copy&gt;/&lt;StatusCode&gt; öğe

Kaynak özelliği tarafından hataya belirtilen nesneden kopyalanacak HTTP durum kodu mesajını alırsınız.

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

Varsayılan:

false

Bulunma:

İsteğe bağlı

Tür:

Dize

&lt;FaultResponse&gt;&lt;Copy&gt;/&lt;ReasonPhrase&gt; öğe

Kaynak özellik tarafından hataya belirtilen nesneden kopyalanacak neden açıklaması mesajını alırsınız.

<Copy source='response'>     
    <ReasonPhrase>The resource requested was not found.</ReasonPhrase>     
</Copy>

Varsayılan:

false

Bulunma:

İsteğe bağlı

Tür:

Dize

&lt;FaultResponse&gt;&lt;Remove&gt;/&lt;Headers&gt; öğe

Belirtilen HTTP üstbilgilerini hata iletisinden kaldırır. Tüm üstbilgileri kaldırmak için <Remove><Headers/></Remove> Bu örnek, İletideki user-agent üstbilgisi.

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

Aynı ada sahip birden fazla üstbilgi varsa aşağıdaki söz dizimini kullanın:

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

Bu örnek "h1", "h2" ve ikinci "h3" değerini kaldırır. "h3" ise yalnızca bir tane var değerine ayarlanırsa kaldırılmaz.

Varsayılan:

Yok

Bulunma:

İsteğe bağlı

Tür:

Dize

&lt;FaultResponse&gt;&lt;Set&gt; öğe

Hata mesajındaki bilgileri ayarlar.

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

Varsayılan:

Yok

Bulunma:

İsteğe bağlı

Tür:

Yok

&lt;FaultResponse&gt;/&lt;Set&gt;/&lt;Headers&gt; öğe

Hata mesajındaki HTTP üstbilgilerini ayarlar veya üzerine yazar. Boş başlığın <Set><Headers/></Set> herhangi bir üstbilgi ayarlamadı. Bu örnek, user-agent üstbilgisini <AssignTo> öğesi.

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

Varsayılan:

Yok

Bulunma:

İsteğe bağlı

Tür:

Dize

&lt;FaultResponse&gt;/&lt;Set&gt;/&lt;Payload&gt; öğe

Hata mesajının yükünü ayarlar.

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

Bir JSON yükü ayarlayın:

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

Bir JSON yüküne, variablePrefix ve Aşağıda gösterildiği gibi ayırıcı karakterlere sahip variableSuffix özellikleri örneğine bakalım.

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

veya 16.08.17 sürümünden itibaren değişken eklemek için süslü ayraçlar kullanabilirsiniz:

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

XML'de karma bir yük ayarlayın:

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

Varsayılan:

Bulunma:

İsteğe bağlı

Tür:

Dize

Özellikler

 
<Payload contentType="content_type" variablePrefix="char" variableSuffix="char">
Özellik Açıklama Varlık Tür
contentType

contentType belirtilirse, değeri Content-Type öğesine atanır kullanabilirsiniz.

İsteğe bağlı Dize
variablePrefix İsteğe bağlı olarak bir akış değişkeninde baştaki sınırlayıcıyı belirtir çünkü JSON yükleri varsayılan "{" değerini kullanamaz. karakteriyle ayrılır. İsteğe bağlı Char
variableSuffix İsteğe bağlı olarak akışta sondaki sınırlayıcıyı belirtir değişkeni, çünkü JSON yükleri varsayılan "}" değerini kullanamaz karakteriyle ayrılır. İsteğe bağlı Char

&lt;FaultResponse&gt;/&lt;Set&gt;/&lt;StatusCode&gt; öğe

Yanıtın durum kodunu ayarlar.

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

Varsayılan:

false

Bulunma:

İsteğe bağlı

Tür:

Boole

&lt;FaultResponse&gt;/&lt;Set&gt;/&lt;ReasonPhrase&gt; öğe

Yanıtın neden ifadesini ayarlar.

<Set source='request'>     
    <ReasonPhrase>The resource requested was not found.</ReasonPhrase>
</Set>

Varsayılan:

false

Bulunma:

İsteğe bağlı

Tür:

Boole

&lt;ShortFaultReason&gt; öğe

Yanıtta kısa bir hata nedeninin gösterileceğini belirtir:

<ShortFaultReason>true|false</ShortFaultReason>

Politikanın yanıtında hatanın nedeni varsayılan olarak şöyledir:

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

Mesajı daha okunabilir hale getirmek için <ShortFaultReason> öğesini ayarlayabilirsiniz faultstring değerini yalnızca politika adıyla kısaltmak için true olarak ayarlayın:

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

Geçerli değerler: true/false(varsayılan).

Varsayılan:

false

Bulunma:

İsteğe bağlı

Tür:

Boole

Akış değişkenleri

Akış değişkenleri, politikaların ve Akışların çalışma zamanında HTTP'ye göre dinamik davranışını etkinleştirir üstbilgileri, ileti içeriğini veya Akış bağlamını yansıtabilir. Aşağıdaki önceden tanımlanmış Akış değişkenleri kullanılabilir devam edebilir. Akış değişkenleri hakkında daha fazla bilgi için Değişkenler referansı bölümüne bakın.

Değişken Tür İzin Açıklama
fault.name Dize Salt Okunur REQUESTFault politikası yürütüldüğünde bu değişken her zaman dizeye ayarlanır RaiseFault
fault.type Dize Salt Okunur Hatadaki hata türünü ve yoksa boş bir dize döndürür.
fault.category Dize Salt Okunur Hatadaki hata kategorisini ve yoksa boş bir dize döndürür.

RaiseFault kullanımına örnek

Aşağıdaki örnekte, Gelen istekte zipcode adlı queryparam. Eğer queryparam mevcut değilse akış, PromoteFault aracılığıyla bir hata başlatır:

<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>
. Aşağıda, REQUESTFault'ta nelerin yer alacağı gösterilmektedir:
<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>
      <ReasonPhrase>Bad Request</ReasonPhrase>
    </Set>
  </FaultResponse>
</RaiseFault>

Hata referansı

Bu bölümde, döndürülen hata kodları, hata mesajları ve hata değişkenleri açıklanmaktadır. bu politika bir hatayı tetiklediğinde Edge tarafından ayarlanır. Hata kuralları geliştirirken bu bilgilerin farkında olmanız önemlidir. hoşuma gitmesi için bir fırsattır. Daha fazla bilgi edinmek için bkz. Politika hataları ve politika hataları hakkında bilmeniz gerekenler Hataları işleme.

Çalışma zamanı hataları

Bu hatalar, politika yürütüldüğünde ortaya çıkabilir.

Hata kodu HTTP durumu Neden
steps.raisefault.RaiseFault 500 Hata dizesini inceleyin.

Dağıtım hataları

Yok.

Hata değişkenleri

Bu değişkenler, çalışma zamanı hatası oluştuğunda ayarlanır. Daha fazla bilgi için Bilmeniz gerekenler hakkında daha fazla bilgi edinin.

Değişkenler Konum Örnek
fault.name="fault_name" fault_name, hatanın şurada belirtildiği gibi adıdır: Yukarıdaki Çalışma zamanı hataları tablosu. Hata adı en son hata kodunun bir bölümüdür. fault.name = "RaiseFault"
raisefault.policy_name.failed policy_name, politikanın kullanıcı tarafından belirtilen adıdır ortaya koydu. raisefault.RF-ThrowError.failed = true

Örnek hata yanıtı

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

Şema

Her politika türü bir XML şemasıyla (.xsd) tanımlanır. Referans olması amacıyla politika şemaları GitHub'da bulabilirsiniz.

İlgili konular

Hataları işleme bölümüne bakın.