RaiseFault politikası

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

Ne?

Hata durumuna yanıt olarak özel bir mesaj oluşturur. Belirli bir koşul ortaya çıktığında istekte bulunan uygulamaya döndürülen bir hata yanıtı tanımlamak için RaiseFault'u kullanın.

Hataların ele alınmasıyla ilgili genel bilgi için Hataları ele alma başlıklı makaleyi inceleyin.

Örnekler

Return FaultResponse

En yaygın kullanımda RaiseFault, istekte bulunan uygulamaya özel bir hata yanıtı döndürmek için kullanılır. Örneğin, bu politika yük içermeyen bir 404 durum kodu döndürür:

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

Hata Yanıtı Yükü döndürülüyor

Daha karmaşık bir örnekte, HTTP üst bilgileri ve bir HTTP durum koduyla birlikte özel bir hata yanıtı yükü döndürülür. Aşağıdaki örnekte, hata yanıtı Edge'in arka uç hizmetinden aldığı HTTP durum kodunu içeren bir XML mesajıyla ve oluşan hata türünü içeren bir üstbilgiyle doldurulur:

<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 iletişlerinin dinamik olarak doldurulması için kullanılabilen tüm değişkenlerin listesini Değişkenler referansı bölümünde bulabilirsiniz.

Hizmet çağrısı 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. AssignMessage politikasına benzer olan RaiseFault politikası, hata durumuna yanıt olarak özel bir hata yanıtı oluşturmanıza olanak tanır.

Belirli bir hata durumu ortaya çıktığında, istekte bulunan uygulamaya döndürülen bir hata yanıtı tanımlamak için RaiseFault politikasını kullanın. Hata yanıtı; HTTP üstbilgileri, sorgu parametreleri ve bir mesaj yükünden oluşabilir. Özel hata yanıtı, uygulama geliştiriciler ve uygulama son kullanıcıları için genel hata mesajlarından veya HTTP yanıt kodlarından daha faydalı olabilir.

RaiseFault politikası yürütüldüğünde kontrolü mevcut akıştan Error akışına aktarır. Bu akış da istenen hata yanıtını istekte bulunan istemci uygulamasına döndürür. Mesaj akışı Error akışına geçtiğinde başka politika işleme gerçekleşmez. Kalan tüm işleme adımları atlanır ve hata yanıtı doğrudan istekte bulunan uygulamaya döndürülür.

RaiseFault'u bir ProxyEndpoint veya TargetEndpoint'te kullanabilirsiniz. Genellikle RaiseFault politikasına bir koşul eklersiniz. RaiseFault yürütüldükten sonra Apigee normal hata işleme gerçekleştirir, FaultRule'ları değerlendirir veya hata kuralları tanımlanmamışsa isteğin işlenmesini sonlandırır.

Öğe referansı

Öğe referansında, RaiseFault politikasının öğeleri ve özellikleri açıklanmaktadır.

<?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>

<RaiseFault> özellikleri

<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

<IgnoreUnresolvedVariables> öğesi

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

<FaultResponse> öğesi

(İsteğe bağlı) İstemde bulunan istemciye döndürülen yanıt mesajını tanımlar. FaultResponse, AssignMessage politikası ile aynı ayarları kullanır (Apigee Edge for Private Cloud'da kullanılamaz).

<FaultResponse><AssignVariable> öğesi

Bir hedef akış değişkenine değer atar. Akış değişkeni yoksa AssignVariable tarafından oluşturulur.

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

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

Daha sonra RaiseFault politikasındaki mesaj şablonlarında bu değişkene başvurabilirsiniz. Ayrıca, bir FaultRule'a eklenen bir politika daha sonra değişkene erişebilir. Örneğin, aşağıdaki AssignMessage politikası, hata yanıtında bir üstbilgi ayarlamak için RaiseFault'ta ayarlanan değişkeni kullanır:

<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>

RaiseFault politikasındaki <AssignVariable>, AssignMessage politikasındaki <AssignVariable> öğesiyle aynı söz dizimini kullanır. Bu işlevin şu anda Apigee Edge for Private Cloud'da kullanılamadığını unutmayın.

<FaultResponse><Add>/<Headers> öğesi

Hata mesajına HTTP başlıkları ekler. Boş başlığın <Add><Headers/></Add> herhangi bir başlık eklemediğini unutmayın. Bu örnekte, request.user.agent akış değişkeninin değeri başlığa kopyalanır.

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

Varsayılan:

Yok

Mevcut olma:

İsteğe bağlı

Tür:

Dize

<FaultResponse><Copy> öğesi

source özelliğiyle belirtilen mesajdaki bilgileri hata mesajına kopyalar.

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

Varsayılan:

Yok

Mevcut olma:

İsteğe bağlı

Tür:

Dize

Özellikler

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

Kopyanın kaynak nesnesini belirtir.

  • Kaynak belirtilmemişse basit bir ileti olarak değerlendirilir. Örneğin, politika istek akışındaysa kaynak varsayılan olarak istek nesnesi olur. Politika yanıt akışındaysa varsayılan olarak response nesnesine ayarlanır. source parametresini atlarsanız kopyanın kaynağı olarak bir akış değişkenine mutlak referans kullanabilirsiniz. Örneğin, değeri {request.header.user-agent} olarak belirtin.
  • Kaynak değişken çözümlenemezse veya mesaj türü olmayan bir türe çözümlenirse <Copy> yanıt veremez.
İsteğe bağlı Dize

<FaultResponse><Copy>/<Headers> öğesi

Belirtilen HTTP başlığını kaynaktan hata mesajına kopyalar. Tüm başlıkları kopyalamak için <Copy><Headers/></Copy>. belirtin.

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

Aynı ada sahip birden fazla başlık varsa aşağıdaki sözdizimini kullanın:

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

Bu örnekte "h1", "h2" ve "h3"ün ikinci değeri kopyalanır. "h3" yalnızca bir değere sahipse kopyalanmaz.

Varsayılan:

Yok

Mevcut olma:

İsteğe bağlı

Tür:

Dize

<FaultResponse><Copy>/<StatusCode> öğesi

Kaynak özelliğiyle belirtilen nesneden hata mesajına kopyalanacak HTTP durum kodu.

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

Varsayılan:

yanlış

Mevcut olma:

İsteğe bağlı

Tür:

Dize

<FaultResponse><Copy>/<ReasonPhrase> öğesi

Kaynak özelliğiyle belirtilen nesneden hata mesajına kopyalanacak neden açıklaması.

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

Varsayılan:

yanlış

Mevcut olma:

İsteğe bağlı

Tür:

Dize

<FaultResponse><Remove>/<Headers> öğesi

Belirtilen HTTP üstbilgilerini hata mesajından kaldırır. Tüm üstbilgileri kaldırmak için <Remove><Headers/></Remove> değerini belirtin. Bu örnek, iletiden user-agent üstbilgisini kaldırır.

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

Aynı ada sahip birden fazla başlık varsa aşağıdaki sözdizimini kullanın:

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

Bu örnekte "h1", "h2" ve "h3"ün ikinci değeri kaldırılıyor. "h3" yalnızca bir değere sahipse kaldırılmaz.

Varsayılan:

Yok

Mevcut olma:

İsteğe bağlı

Tür:

Dize

<FaultResponse><Set> öğesi

Hata mesajındaki bilgileri ayarlar.

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

Varsayılan:

Yok

Mevcut olma:

İsteğe bağlı

Tür:

Yok

<FaultResponse>/<Set>/<Headers> öğesi

Hata mesajındaki HTTP üstbilgilerini ayarlar veya üzerine yazar. Boş üstbilginin <Set><Headers/></Set> herhangi bir üstbilgi ayarlamadığını unutmayın. Bu örnekte, user-agent üstbilgisi, <AssignTo> öğesiyle belirtilen ileti değişkenine ayarlanır.

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

Varsayılan:

Yok

Mevcut olma:

İsteğe bağlı

Tür:

Dize

<FaultResponse>/<Set>/<Payload> öğesi

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

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

JSON yükü ayarlama:

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

Bir JSON yükünde, aşağıdaki örnekte gösterildiği gibi sınırlayıcı karakterlerle variablePrefix ve variableSuffix özelliklerini kullanarak değişkenler ekleyebilirsiniz.

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

Alternatif olarak, 16.08.17 tarihli bulut sürümünden itibaren değişken eklemek için küme parantezlerini de 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:

Mevcut olma:

İ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 başlığına atanır.

İsteğe bağlı Dize
variablePrefix JSON yükleri varsayılan "{" karakterini kullanamadığından, akış değişkeninde isteğe bağlı olarak baştaki ayırıcıyı belirtir. İsteğe bağlı Char
variableSuffix JSON yükleri varsayılan "}" karakterini kullanamadığından, bir akış değişkeninde sondaki sınırlayıcıyı isteğe bağlı olarak belirtir. İsteğe bağlı Char

<FaultResponse>/<Set>/<StatusCode> öğesi

Yanıtın durum kodunu ayarlar.

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

Varsayılan:

yanlış

Mevcut olma:

İsteğe bağlı

Tür:

Boole

<FaultResponse>/<Set>/<ReasonPhrase> öğesi

Yanıtın neden ifadesini ayarlar.

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

Varsayılan:

yanlış

Mevcut olma:

İsteğe bağlı

Tür:

Boole

<ShortFaultReason> öğesi

Yanıtta kısa bir hata nedeni gösterilmesini belirtir:

<ShortFaultReason>true|false</ShortFaultReason>

Varsayılan olarak, politikanın yanıtındaki hata nedeni şudur:

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

İletinin daha okunabilir olması için <ShortFaultReason> öğesini true olarak ayarlayarak faultstring öğesini yalnızca politika adıyla kısaltabilirsiniz:

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

Geçerli değerler: doğru/yanlış(varsayılan).

Varsayılan:

yanlış

Mevcut olma:

İsteğe bağlı

Tür:

Boole

Akış değişkenleri

Akış değişkenleri, HTTP üstbilgilerine, ileti içeriğine veya akış bağlamına göre politikaların ve akışların çalışma zamanında dinamik davranışını sağlar. RaiseFault politikası yürütüldükten sonra aşağıdaki önceden tanımlanmış akış değişkenleri kullanılabilir. Akış değişkenleri hakkında daha fazla bilgi için Değişken referansı başlıklı makaleyi inceleyin.

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

RaiseFault'un örnek kullanımı

Aşağıdaki örnekte, gelen istekte zipcode adlı bir queryparam öğesinin bulunmasını zorunlu kılmak için bir koşul kullanılmaktadır. Bu queryparam mevcut değilse akış, RaiseFault aracılığıyla bir hata oluşturur:

<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, RaiseFault'ta yer alacaklar 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ı (.xsd) ile tanımlanır. Referans olarak politika şemaları GitHub'da mevcuttur.

İlgili konular

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