RaiseFault politikası

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

Ne

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

Hataların ele alınması hakkında genel bilgi için Hataları işleme konusuna bakın.

Sana Özel

Dönüş Hata Yanıtı

En yaygın kullanımlarda PromoteFault, 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>

Dönüş FaultResponse Yükü

Daha karmaşık bir örnek, HTTP üst bilgileri ve HTTP durum koduyla birlikte özel bir hata yanıtı yükü döndürmeyi içerir. Aşağıdaki örnekte hata yanıtı, Edge tarafından arka uç hizmetinden alınan HTTP durum kodunu içeren bir XML mesajı ve oluşan hatanın türünü içeren bir başlıkla 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 mesajlarını dinamik olarak doldurmak için kullanılabilecek tüm değişkenlerin listesi için Değişkenler referansı bölümüne bakın.

Hizmet çağrısı hatalarını işleme


GrowFault politikası hakkında

Apigee Edge, GrowFault türünde bir politika kullanarak özel istisna işleme işlemi gerçekleştirmenizi sağlar. assignMessage politikasına benzeyen ParentFault politikası, bir hata koşuluna yanıt olarak özel bir hata yanıtı oluşturmanıza olanak tanır.

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

GrowFault politikası yürütüldüğünde, kontrolü mevcut akıştan Hata akışına aktarır ve daha sonra, belirtilen hata yanıtını istekte bulunan istemci uygulamasına döndürür. Mesaj Akışı Hata akışına geçtiğinde, başka politika işlemleri 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.

GrowFault'u bir ProxyEndpoint veya TargetEndpoint'te kullanabilirsiniz. Genellikle {6/}Fault politikasına bir Koşul eklersiniz. GrowFault yürütüldükten sonra Apigee, normal hata işlemeyi yaparak FaultRules'u değerlendirir veya tanımlanmış hata kuralı yoksa isteğin işlenmesini sonlandırır.

Öğe referansı

Öğe referansı, GrowFault 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>

<liftFault> ö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çerebilir. Bu değer 255 karakterden uzun olamaz.

İsteğe bağlı olarak, politikayı yönetim kullanıcı arayüzü proxy düzenleyicisinde farklı bir doğal dil adıyla etiketlemek için <DisplayName> öğesini kullanın.

Yok Gerekli
continueOnError

Bir politika başarısız olduğunda hata döndürülmesi için false olarak ayarlayın. Bu, çoğu politika için beklenen davranıştır.

Bir politika başarısız olduktan sonra bile akış yürütülmesinin devam etmesi için true değerine ayarlayın.

false İsteğe bağlı
enabled

Politikayı uygulamak için true değerine ayarlayın.

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

true İsteğe bağlı
async

Bu özellik kullanımdan kaldırıldı.

false Kullanımdan kaldırıldı

<DisplayName> öğesi

Politikayı, yönetim kullanıcı arayüzü proxy düzenleyicisinde farklı bir doğal dil adıyla etiketlemek için name özelliğine ek olarak kullanın.

<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ıştaki çözülmemiş değişken hatalarını yok sayar. Geçerli değerler: true/false. Varsayılan true.

<FaultResponse> öğesi

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

<FaultResponse><AssignmentVariable> öğesi

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

Örneğin, GrowFault 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 ParentFault politikasında mesaj şablonlarında bu değişkene başvurabilirsiniz. Ayrıca, FaultRule'a ekli bir politika da değişkene erişebilir. Örneğin, aşağıdaki AttributionMessage politikası, hata yanıtında bir üst bilgi ayarlamak için ParentFault'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>

PromoteFault politikasındaki <AssignVariable>, AssignmentMessage politikasındaki <AssignVariable> öğesiyle aynı söz dizimini kullanır. Bu işlevin şu anda Private Cloud için Apigee Edge'de mevcut olmadığını hatırlatmak isteriz.

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

Hata mesajına HTTP üstbilgileri ekler. Boş olan <Add><Headers/></Add> üst bilgisinin herhangi bir üstbilgi 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

Bulunma:

İsteğe bağlı

Tür:

Dize

<FaultResponse><Kopyala> öğesi

source özelliği tarafından belirtilen mesajdaki bilgileri hata mesajına to olarak kopyalar.

    <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 belirtilmezse basit bir mesaj olarak değerlendirilir. Örneğin, politika istek akışındaysa kaynak varsayılan olarak request nesnesine ayarlanır. Politika, yanıt akışı içindeyse varsayılan olarak yanıt nesnesine ayarlanır. Source'u çıkarırsanı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ümlenemez veya mesaj olmayan bir türe çözümlenirse <Copy> öğesi yanıt veremez.
İsteğe bağlı Dize

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

Belirtilen HTTP üstbilgisini kaynaktan hata mesajına kopyalar. Tüm üst bilgileri kopyalamak için <Copy><Headers/></Copy>. değerini belirtin.

<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"ün yalnızca bir değeri varsa bu değer kopyalanmaz.

Varsayılan:

Yok

Bulunma:

İsteğe bağlı

Tür:

Dize

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

Kaynak özelliği tarafından belirtilen nesneden hata mesajına kopyalanacak HTTP durum kodu.

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

Varsayılan:

false

Bulunma:

İsteğe bağlı

Tür:

Dize

<FaultResponse><Kopyala>/<Neden Terimi> öğesi

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

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

Varsayılan:

false

Bulunma:

İsteğe bağlı

Tür:

Dize

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

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

<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 "h3"ün ikinci değerini kaldırır. "h3"ün yalnızca bir değeri varsa bu değer kaldırılmaz.

Varsayılan:

Yok

Bulunma:

İ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

Bulunma:

İsteğe bağlı

Tür:

Yok

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

Hata mesajındaki HTTP üstbilgilerini belirler veya bunların üzerine yazar. Boş üst bilgi (<Set><Headers/></Set>) herhangi bir üst bilgi ayarlamaz. Bu örnekte user-agent üst bilgisi, <AssignTo> öğesiyle belirtilen mesaj değişkenine ayarlanır.

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

Varsayılan:

Yok

Bulunma:

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

Bir JSON yükü ayarlayın:

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

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

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

veya 16.08.17 bulut sürümünden itibaren değişken eklemek için süslü ayraçlar da 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 başlığına atanır.

İsteğe bağlı Dize
variablePrefix JSON yükleri varsayılan "{" karakterini kullanamayacağı için isteğe bağlı olarak bir akış değişkenindeki baş sınırlayıcıyı belirtir. İsteğe bağlı Karakter
variableSuffix JSON yükleri varsayılan "}" karakterini kullanamayacağı için isteğe bağlı olarak bir akış değişkenindeki son sınırlayıcıyı belirtir. İsteğe bağlı Karakter

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

Yanıtın durum kodunu ayarlar.

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

Varsayılan:

false

Bulunma:

İsteğe bağlı

Tür:

Boole

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

Yanıtın neden ifadesini belirler.

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

Varsayılan:

false

Bulunma:

İsteğe bağlı

Tür:

Boole

<ShortFaultWhy> öğesi

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

<ShortFaultReason>true|false</ShortFaultReason>

Varsayılan olarak, politika yanıtındaki hata nedeni şu şekildedir:

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

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

"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, HTTP üstbilgileri, mesaj içeriği veya Akış bağlamına göre çalışma zamanında politikaların ve Akışların dinamik davranışını etkinleştirir. Aşağıdaki önceden tanımlanmış Akış değişkenleri, bir {6/}Fault politikası yürütüldükten sonra kullanılabilir. Akış değişkenleri hakkında daha fazla bilgi için Değişkenler referansı başlıklı makaleyi inceleyin.

Değişken Tür İzin Açıklama
fault.name Dize Salt Okunur GrowFault politikası yürütüldüğünde bu değişken her zaman RaiseFault dizesine ayarlanır.
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 mevcut değilse boş bir dize döndürür.

GrowFault kullanımı örneği

Aşağıdaki örnekte, gelen istekte zipcode adlı bir queryparam varlığını zorunlu kılmak için bir Koşul kullanılmaktadır. Bu queryparam mevcut değilse akış, riseFault aracılığıyla bir hata verir:

<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ğıdaki şekilde, PromoteFault öğesinde ne olacağı 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, bu politika bir hatayı tetiklediğinde Edge tarafından ayarlanan hata kodları ve hata mesajları ile döndürülen hata değişkenleri açıklanmaktadır. Bu bilgiyi, hataları ele almak için hata kuralları geliştirip geliştirmediğinizi bilmeniz önemlidir. Daha fazla bilgi için Politika hataları hakkında bilmeniz gerekenler ve Hataları işleme bölümlerine bakın.

Çalışma zamanı hataları

Politika yürütüldüğünde bu hatalar ortaya çıkabilir.

Hata kodu HTTP durumu Neden
steps.raisefault.RaiseFault 500 Hata dizesine bakın.

Dağıtım hataları

Yok.

Hata değişkenleri

Bu değişkenler, bir çalışma zamanı hatası oluştuğunda ayarlanır. Daha fazla bilgi için Politika hataları hakkında bilmeniz gerekenler bölümüne bakın.

Değişkenler Konum Örnek
fault.name="fault_name" fault_name, yukarıdaki Çalışma zamanı hataları tablosunda listelenen hatanın adıdır. Hata adı, hata kodunun son kısmıdır. fault.name = "RaiseFault"
raisefault.policy_name.failed policy_name, hataya neden olan politikanın kullanıcı tarafından belirtilen adıdır. 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, GitHub'da politika şemaları bulunabilir.

İlgili konular

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