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ı. İsteğe bağlı olarak, politikayı |
Yok | Zorunlu |
continueOnError |
Bir politika başarısız olduğunda hata döndürmesi için Akış yürütmenin bir politikadan sonra bile devam etmesi için |
false | İsteğe bağlı |
enabled |
Politikayı uygulamak için Politikayı devre dışı bırakmak için |
true | İsteğe bağlı |
async |
Bu özelliğin desteği sonlandırıldı. |
false | Kullanımdan kaldırıldı |
<DisplayName> öğ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 |
|---|---|
| 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.
|
İ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 |
İ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><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.