extraVariables politikası

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

Ne

Değişkenleri Ayıklama politikası, bir istek veya yanıttaki içeriği ayıklar ve değişkenin değerini bu içeriğe ayarlar. Üstbilgiler, URI yolları, JSON/XML yükleri, form parametreleri ve sorgu parametreleri dahil olmak üzere mesajın herhangi bir bölümünü ayıklayabilirsiniz. Bu politika, ileti içeriğine bir metin kalıbı uygulayarak çalışır ve bir eşleşme bulduğunda belirtilen mesaj içeriğine sahip bir değişken ayarlar.

Bu politikayı genellikle bir istek veya yanıt mesajından bilgi ayıklamak için kullansanız da AccessEntity politikası, XML nesneleri veya JSON nesneleri tarafından oluşturulan varlıklar dahil olmak üzere diğer kaynaklardan bilgi ayıklamak için de kullanabilirsiniz.

Belirtilen mesaj içeriğini çıkardıktan sonra, bir istek ve yanıtı işlemenin bir parçası olarak diğer politikalarda değişkene referans verebilirsiniz.

Videolar

Değişkenleri Ayıklama politikası hakkında daha fazla bilgi edinmek için aşağıdaki videoları izleyin.

Video Açıklama
XML yükünden değişkenleri çıkarın Değişken Ayıklama politikasını kullanarak XML yükünden değişkenler çıkarın.
JSON yükünden değişkenleri çıkarın Değişken Ayıklama politikasını kullanarak bir JSON yükünden değişkenleri çıkarın.
Parametrelerden değişkenleri ayıklama Sorgu, başlık, form veya URI parametreleri gibi parametrelerden değişkenleri çıkarın.
Birden çok değerli parametrelerden değişkenleri ayıklama Birden çok değerli parametrelerden değişkenleri ayıklayın.
Sorgu parametresinden değişkenleri ayıklama (Klasik Edge) Klasik Edge kullanıcı arayüzünü kullanarak bir sorgu parametresinden değişken çıkarın.
XML veya JSON yükünden değişkenleri ayıklama (Klasik Edge) Klasik Edge kullanıcı arayüzünü kullanarak XML veya JSON yükünden değişkenleri çıkarın.

Sana Özel

Bu politika kodu örnekleri, aşağıdaki yapı türlerinden değişkenlerin nasıl alınacağını gösterir:

GitHub

Bu bağlantılar, Edge'de dağıtıp çalıştırabileceğiniz çalışan API proxy örneklerine yönlendirir. ExtractVariables kullanır ve Apigee'nin GitHub'daki api-platform-samples deposunda bulunur. README'ler, ExtractVariables'ın her bir örnekte nasıl kullanıldığını ve her bir örneğin nasıl dağıtılıp çalıştırılacağını açıklar.

URI'ler

<ExtractVariables name="ExtractVariables-1">
   <DisplayName>Extract a portion of the url path</DisplayName>
   <Source>request</Source>
   <URIPath>
      <Pattern ignoreCase="true">/accounts/{id}</Pattern>
   </URIPath>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

Yukarıdaki örnek politika kodunu inceleyin. <URIPath> öğesi, ExtractVariables politikasına URI yolundan bilgi çıkarmasını söyler. <Pattern> öğesi, URI yoluna uygulanacak kalıbı belirtir. Kalıp, URI yolunun değişen bölümlerini ifade eden küme parantezleri ile basit bir şablon olarak değerlendirilir.

Ayarlanacak değişkenin adı, <VariablePrefix> öğesinde belirtilen değerin yanı sıra <Pattern> öğesindeki süslü ayraçlar {} içine alınan değere göre belirlenir. Bu iki değer, araya giren bir noktayla birleştirilir. Bu durumda, örneğin urirequest.id şeklinde bir değişken adı elde edilir. <VariablePrefix> öğesi yoksa değişken adı yalnızca süslü ayraçlar içine alınan değerdir.

Aşağıdaki örnek politika kodunu kullanarak aşağıdaki gelen istekle çalışmayı düşünebilirsiniz:

GET http://org1-test.apigee.net/svc1/accounts/12797282

API Proxy'sinin basepath yolunun /svc1 olduğunu varsayalım. Apigee Edge, bu gelen isteğe yukarıdaki ExtractVariables politika kodunu uyguladığında urirequest.id değişkenini 12797282 olarak ayarlar. Apigee Edge politikayı yürüttükten sonra, işleme akışındaki sonraki politikalar veya kod, 12797282 dize değerini almak için urirequest.id adlı değişkene başvurabilir.

Örneğin, aşağıdaki AttributionMessage politikası, bu değişkenin değerini yeni bir istek mesajının yüküne yerleştirir:

<AssignMessage async="false" continueOnError="false" enabled="true" name="AssignPayload">
 <DisplayName>AssignPayload</DisplayName>
  <Set>
   <Payload contentType="text/xml">
    <IdExtractedFromURI>{urirequest.id}</IdExtractedFromURI>
   </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="true" transport="http" type="request">newRequest</AssignTo>
</AssignMessage>

Sorgu parametreleri

<ExtractVariables name="ExtractVariables-2">
   <DisplayName>Extract a value from a query parameter</DisplayName>
   <Source>request</Source>
   <QueryParam name="code">
      <Pattern ignoreCase="true">DBN{dbncode}</Pattern>
   </QueryParam>
   <VariablePrefix>queryinfo</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

Aşağıdaki örnek politika kodunu kullanarak aşağıdaki gelen istekle çalışmayı düşünebilirsiniz:

GET http://org1-test.apigee.net/accounts/12797282?code=DBN88271

Apigee Edge, yukarıdaki ExtractVariables politika kodunu bu gelen isteğe uyguladığında queryinfo.dbncode değişkenini 88271 olarak ayarlar. Apigee Edge politikayı yürüttükten sonra, işleme akışındaki sonraki politikalar veya kod, 88271 dize değerini almak için queryinfo.dbncode adlı değişkene başvurabilir.

Artık queryinfo.dbncode değişkenine proxy'nizden erişebilirsiniz. Örneğin, aşağıdaki AttributionMessage politikası bunu isteğin yüküne kopyalar:

<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath">
 <DisplayName>GetQP</DisplayName>
  <Set>
   <Payload contentType="text/xml">
    <ExtractQP>{queryinfo.dbncode}</ExtractQP>
   </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Birden çok parametre

<ExtractVariables name="ExtractVariables-2">
   <DisplayName>Extract a value from a query parameter</DisplayName>
   <Source>request</Source>
   <QueryParam name="w">
      <Pattern ignoreCase="true">{firstWeather}</Pattern>
   </QueryParam>
   <QueryParam name="w.2">
     <Pattern ignoreCase="true">{secondWeather}</Pattern>
   </QueryParam>
   <VariablePrefix>queryinfo</VariablePrefix>
 <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

API tasarımınızın aynı adla birden fazla sorgu parametresi belirtmenize izin verdiğini varsayalım. "w" sorgu parametresinin birden fazla örneğinden değer çıkarmak için bu politikayı kullanabilirsiniz. Değişkenleri Ayıklama politikasında bu sorgu parametrelerine referans vermek için dizinleri kullanırsınız. Bu örnekte sorgu parametresinin ilk örneğinin dizini yoktur, ikinci örneğinin dizin 2, üçüncüsünün de 3. dizinde bulunması gerekir.

Aşağıdaki örnek politika kodunu kullanarak aşağıdaki gelen istekle çalışmayı düşünebilirsiniz:

GET http://org1-test.apigee.net/weather?w=Boston&w=Chicago

Apigee Edge, yukarıdaki ExtractVariables politika kodunu bu gelen isteğe uyguladığında, queryinfo.firstWeather değişkenini Boston ve queryInfo.secondWeather değişkenini Chicago olarak ayarlar.

Artık queryinfo.firstWeather değişkenine ve queryinfo.secondWeather'a proxy'nizde erişebilirsiniz. Örneğin, aşağıdaki AttributionMessage politikası bunu isteğin yüküne kopyalar:

<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath">
 <DisplayName>GetQP</DisplayName>
  <Set>
   <Payload contentType="text/xml">
    <ExtractQP1>{queryinfo.firstWeather}</ExtractQP1>
    <ExtractQP2>{queryinfo.secondWeather}</ExtractQP2>
   </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Üst bilgiler

<ExtractVariables name='ExtractVariable-OauthToken'>
  <Source>request</Source>
  <Header name="Authorization">
    <Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern>
  </Header>
  <VariablePrefix>clientrequest</VariablePrefix>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

API'nizin OAuth v2.0 hamiline ait jetonlar kullandığını varsayalım. Aşağıdaki örnek politika kodunu kullanarak, aşağıdaki gibi bir başlık içeren OAuth v2.0 jetonu taşıyan bir istekle çalışmayı düşünebilirsiniz: Authorization: Bearer TU08xptfFfeM7aS0xHqlxTgEAdAM.

API tasarımcısı olarak, jeton değerini (üst bilginin tamamını değil) önbellek aramasında bir anahtar olarak kullanmak istediğinizi varsayalım. Jetonu çıkarmak için yukarıdaki ExtractVariables politika kodunu kullanabilirsiniz.

Apigee Edge, yukarıdaki ExtractVariables politika kodunu bu başlığa uyguladığında clientrequest.oauthtoken değişkenini TU08xptfFfeM7aS0xHqlxTgEAdAM olarak ayarlar.

Artık clientrequest.oauthtoken değişkenine proxy'nizden erişebilirsiniz. Örneğin, aşağıdaki AttributionMessage politikası bunu isteğin yüküne kopyalar:

<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath">
 <DisplayName>GetHeader</DisplayName>
  <Set>
   <Payload contentType="text/xml">
    <ExtractHeader>{clientrequest.oauthtoken}</ExtractHeader>
   </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

JSON

<ExtractVariables name="ExtractVariables-3">
   <Source>response</Source>
   <JSONPayload>
      <Variable name="latitude" type="float">
         <JSONPath>$.results[0].geometry.location.lat</JSONPath>
      </Variable>
      <Variable name="longitude" type="float">
         <JSONPath>$.results[0].geometry.location.lng</JSONPath>
      </Variable>
   </JSONPayload>
   <VariablePrefix>geocoderesponse</VariablePrefix>
</ExtractVariables>
<JSONPayload>$

Aşağıdaki JSON yanıt yükünü göz önünde bulundurun:

{
  "results": [{
    "geometry": {
      "location": {
        "lat": 37.42291810,
        "lng": -122.08542120
      },
      "location_type": "ROOFTOP",
      "viewport": {
        "northeast": {
          "lat": 37.42426708029149,
          "lng": -122.0840722197085
        },
        "southwest": {
          "lat": 37.42156911970850,
          "lng": -122.0867701802915
        }
      }
    }
  }]
}

Apigee Edge, yukarıdaki ExtractVariables politika kodunu bu JSON mesajına uyguladığında iki değişken ayarlar: geocoderesponse.latitude ve geocoderesponse.longitude. Her iki değişken de aynı geocoderesponse değişken önekini kullanır. Bu değişkenlerin son eki, <Variable> öğesinin name özelliği tarafından açıkça belirtilir.

geocoderesponse.latitude değişkeni 37.42291810 değerini alır. geocoderesponse.longitude değişkeni -122.08542120 değerini alır.

Artık geocoderesponse.latitude değişkenine proxy'nizden erişebilirsiniz. Örneğin, aşağıdaki AttributionMessage politikası bunu yanıtta "latitude" adlı bir üstbilgiye kopyalar:

<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath">
  <DisplayName>GetJSONVar</DisplayName>
  <Add>
    <Headers>
      <Header name="latitude">{geocoderesponse.latitude}</Header>
    </Headers>
  </Add> 
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="response"/> 
</AssignMessage>

XML

<ExtractVariables name="ExtractVariables-4">
   <Source>response</Source>
   <XMLPayload>
      <Namespaces>
         <Namespace prefix="dir">urn:43BFF88D-D204-4427-B6BA-140AF393142F</Namespace>
      </Namespaces>
      <Variable name="travelmode" type="string">
         <XPath>/dir:Directions/dir:route/dir:leg/dir:step/@mode</XPath>
      </Variable>
      <Variable name="duration" type="string">
         <XPath>/dir:Directions/dir:route/dir:leg/dir:step/dir:duration/dir:value</XPath>
      </Variable>
      <Variable name="timeunit" type="string">
         <XPath>/dir:Directions/dir:route/dir:leg/dir:step/dir:duration/dir:text</XPath>
      </Variable>
   </XMLPayload>
   <VariablePrefix>directionsresponse</VariablePrefix>
</ExtractVariables>
<XMLPayload>

Aşağıdaki XML yanıtı yükünü göz önünde bulundurun:

<Directions xmlns="urn:43BFF88D-D204-4427-B6BA-140AF393142F">
   <status>OK</status>
   <route>
      <summary>I-40 W</summary>
      <leg>
         <step mode="DRIVING">
            <start_location>
               <lat>41.8507300</lat>
               <lng>-87.6512600</lng>
            </start_location>
            <end_location>
               <lat>41.8525800</lat>
               <lng>-87.6514100</lng>
            </end_location>
            <duration>
                <value>19</value>
                <text>minutes</text>
            </duration>
         </step>
      </leg>
   </route>
</Directions>

Apigee Edge, yukarıdaki ExtractVariables politika kodunu bu XML mesajına uyguladığında üç değişken ayarlar: directionsresponse.travelmode, directionsresponse.duration ve directionsresponse.timeunit. Tüm değişkenler aynı directionsresponse değişken ön ekini kullanır. Bu değişkenlerin son eki, <Variable> öğesinin name özelliği tarafından açıkça belirtilir.

directionsresponse.travelmode değişkeni DRIVING değerini alır. directionsresponse.duration değişkeni 19 değerini alır. directionsresponse.timeunit değişkeni minutes değerini alır.

Artık directionresponse.travelmode değişkenine proxy'nizden erişebilirsiniz. Örneğin, aşağıdaki AttributionMessage politikası bunu yanıtta "tmode" adlı bir üstbilgiye kopyalar:

<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath">
  <DisplayName>GetXMLVar</DisplayName>
  <Add>
    <Headers>
      <Header name="tmode">{directionsresponse.travelmode}</Header>
    </Headers>
  </Add>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Değişkenleri Ayıklama politikası hakkında

API geliştiricileri; başlıklar, URI yolları, yükler ve sorgu parametreleri dahil olmak üzere mesajların içeriğine göre farklı şekilde çalışan API proxy'leri oluşturur. Proxy genellikle bir koşul ifadesinde kullanmak üzere bu içeriğin bir kısmını çıkarır. Bunun için Değişkenleri Ayıklama politikasını kullanın.

Değişkenleri Ayıklama politikasını tanımlarken şunları seçebilirsiniz:

  • Ayarlanacak değişkenlerin adları
  • Değişkenlerin kaynağı
  • Ayıklanacak ve ayarlanacak değişken sayısı

Politika, yürütüldüğünde içeriğe bir metin kalıbı uygular ve eşleşme bulunduğunda belirtilen değişkenin değerini içerikle birlikte ayarlar. Ardından diğer politikalar ve kodlar dinamik davranışı etkinleştirmek veya iş verilerini Edge API Analytics'e göndermek için bu değişkenleri kullanabilir.

ExtractVariables'ın içeriğe dayalı Analytics raporları oluştururken nasıl kullanılabileceğini öğrenmek için Özel analizler kullanarak API mesajı içeriğini analiz etme bölümüne bakın.

Kapsam

ExtractVariables politikasıyla ayarlanan değişkenler genel kapsama sahiptir. Yani ExtractVariables politikası yeni bir değişken tanımladıktan sonra, bu değişkene akışın herhangi bir aşamasında (ExtractVariables politikasından sonra yürütülen) herhangi bir politika veya koddan erişebilirsiniz. Buna aşağıdakiler dahildir:

  • PreFlow: ProxyEndpoint ve TargetEndpoint (İstek ve Yanıt)
  • PostFlow: ProxyEndpoint ve TargetEndpoint (İstek ve Yanıt)
  • PostClientFlow: ProxyEndpoint (Yalnızca yanıt, Message Logging politikasını kullanarak)
  • Hata Akışları

Eşleştirme ve değişken oluşturma hakkında

Değişkenleri Ayıklama politikası, bir istek veya yanıttan bilgi ayıklar ve bu bilgileri bir değişkene yazar. URI yolu veya XML verileri gibi ayıklayabileceğiniz her bilgi türü için eşleştirilecek kalıbı ve çıkarılan bilgiyi barındırmak amacıyla kullanılan değişkenin adını belirtirsiniz.

Ancak kalıp eşleştirmenin çalışma şekli ayıklamanın kaynağına bağlıdır. Aşağıdaki bölümlerde, çıkarabileceğiniz iki temel bilgi kategorisi açıklanmaktadır.

Eşleşen URI yolları, sorgu parametreleri, başlıklar, form parametreleri ve değişkenler

Bir URI yolundan bilgi ayıklarken sorgu parametrelerine, üst bilgilere, form parametrelerine ve değişkenlere bakarken bir veya daha fazla kalıp belirtmek için <Pattern> etiketini kullanırsınız. Örneğin, aşağıdaki politika örneğinde URI yolu için tek bir eşleşen kalıp gösterilmektedir:

<ExtractVariables name="ExtractVariables-1">
   <Source>request</Source>
   <URIPath>
      <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
   </URIPath>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

Bu örnekte urirequest.pathSeg değişkeni, proxy.pathsuffix içinde "/a/" ifadesinden sonra görünen değere ayarlanmıştır. Örneğin, API Proxy'nizin temel yolunun /basepath/v1 olduğunu varsayalım . http://myCo.com/basepath/v1/a/b adresine gelen bir istek için değişken, "b" olarak ayarlanır.

Birden çok kalıp belirtme

<Pattern> etiketlerine karşılık gelen, eşleşecek birden fazla desen belirtebilirsiniz. Burada:

  • Tüm kalıplar eşleşme açısından test edilir.
  • Kalıplardan hiçbiri eşleşmezse politika hiçbir şey yapmaz ve değişkenler oluşturulmaz.
  • Birden fazla kalıp eşleşirse ayıklama için yol segmentleri en uzun olan kalıp kullanılır.
  • Eşleşen iki kalıp en uzun yol segmentlerine sahipse ayıklama için politikada ilk belirtilen kalıp kullanılır.

Bir sonraki örnekte, URI yolu için üç eşleşen kalıp içeren bir politika oluşturuyorsunuz:

<ExtractVariables name="ExtractVariables-1">
   <Source>request</Source>
   <URIPath>
      <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
      <Pattern ignoreCase="true">/a/b/{pathSeg}</Pattern>
      <Pattern ignoreCase="true">/a/b/c/{pathSeg}</Pattern>
   </URIPath>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

Temel yolu /basepath/v1 olan bir API Proxy'si için API proxy'sine gelen istek URL'sinin şu biçimde olduğunu varsayalım:

http://myCo.com/basepath/v1/a/b

Bu örnekte, ilk kalıp URI ile eşleşir ve urirequest.pathSeg değişkeni "b" olarak ayarlanmıştır.

İstek URL'si:

http://myCo.com/basepath/v1/a/b/c/d

...ise üçüncü kalıp eşleşir ve urirequest.pathSeg değişkeni "d" olarak ayarlanır.

Birden çok değişkenli kalıp belirtme

Eşleşen kalıpta birden çok değişken belirtebilirsiniz. Örneğin, iki değişkenle eşleşen bir kalıp belirtirsiniz:

<ExtractVariables name="ExtractVariables-1">
   <Source>request</Source>
   <URIPath>
      <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
      <Pattern ignoreCase="true">/a/b/{pathSeg}</Pattern>
      <Pattern ignoreCase="true">/a/{pathSeg1}/c/{pathSeg2}</Pattern>
   </URIPath>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

Gelen istek URL'si için tekrar /basepath/v1 temel yoluna sahip bir API Proxy'si olduğunu varsayalım:

http://myCo.com/basepath/v1/a/b/c/d

...urirequest.pathSeg1 değişkeni "b" ve urirequest.pathSeg2 değişkeni "d" olarak ayarlanmıştır.

Kalıpta birden çok örnek eşleşiyor

Bir öğenin aynı ada sahip birden fazla örneği olduğunda da kalıpları eşleştirebilirsiniz. Örneğin, birden fazla sorgu parametresi veya aynı ada sahip birden fazla başlık içeren bir istek gönderebilirsiniz. Aşağıdaki istek "w" adlı iki sorgu parametresi içeriyor:

http://myCo.com/basepath/v1/a/b/c/d?w=1&w=2

Değişkenleri Ayıklama politikasında bu sorgu parametrelerine referans vermek için, sorgu parametresinin ilk örneğinin dizin olmadığı, ikincisinin 2. dizinde, üçüncüsü dizin 3'te olduğu dizinleri kullanırsınız. Örneğin, aşağıdaki politika, istekte "w" adlı ikinci sorgu parametresinin değerini çıkarır:

<ExtractVariables name="ExtractVariables-1">
   <Source>request</Source>
   <QueryParam name="w.2">
      <Pattern ignoreCase="true">{secondW}</Pattern>
   </QueryParam>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

urirequest.secondW değişkeni "2" olarak ayarlanmıştır. İkinci sorgu parametresi istekten çıkarılırsa urirequest.secondW değişkeni boş olur. İstekte aynı ada sahip birden fazla öğe olduğunda dizine ekleme özelliğini kullanın.

Kalıpta özel karakterler kullanma

URI yollarını eşleştirirken kalıpta "*" ve "**" joker karakterlerini kullanabilirsiniz. Burada:

  • "*", yolun herhangi bir segmentiyle eşleşir
  • "**", yolun birden çok segmentiyle eşleşiyor

Örneğin, aşağıda gösterildiği gibi <URIPath> öğesinde kalıplar belirtirsiniz:

<URIPath>
  <Pattern ignoreCase="true">/a/*/{id}</Pattern>
  <Pattern ignoreCase="true">/a/**/{id}</Pattern>
</URIPath>

İlk kalıp, "/a/b/c", "/a/foo/bar" vb. gibi pathuffix'leri (temel yolu izleyen URI yolunun bölümü) ile eşleştirir. İkinci kalıp, "/a/foo/bar/baz/c"nin yanı sıra "/a/b/c" ve "/a/foo/bar" gibi "/a/" ifadesinden sonra gelen, istenilen sayıda yol segmentiyle eşleşir.

Sorgu parametreleri, başlıklar ve form parametreleri için kalıplar belirtirken "*" karakteri, istenen sayıda karakterle eşleşeceğini belirtir. Örneğin, bir başlığı eşleştirirken kalıbı şu şekilde belirtin:

*;charset={encoding}

Bu kalıp, "text/xml;charset=UTF-16" ve "application/xml;charset=ASCII" değerleriyle eşleşir.

Değişkenleri Ayıklama politikasına iletilen değer "{" gibi özel bir karakter içeriyorsa çıkış yapmak için "%" karakterini kullanın. Aşağıdaki örnekte, sorgu parametresinin değerinde sabit karakterler olarak kullanıldığından kalıptaki "{" ve "}" karakterleri çıkış yapılmaktadır:

<QueryParam>
  <Pattern ignoreCase="true">%{user%} {name}</Pattern>
</QueryParam>

Bu örnekte, kalıp "{user} Steve" değeriyle eşleşir ancak "user Steve" değeriyle eşleşmez.

Eşleşen JSON ve XML

JSON ve XML'den veri ayıklarken politikada bir veya daha fazla <Variable> etiketi belirtirsiniz. <Variable> etiketi, ayıklanan bilgilerin depolandığı hedef değişkenin adını ve çıkarılan bilginin JsonPath (JSON) veya XPATH (XML) adını belirtir.

Politikadaki tüm <Variable> etiketleri değerlendirilir. Böylece tek bir politikadan birden fazla değişken girebilirsiniz. <Variable> etiketi JSON veya XML'de geçerli bir alanı değerlendirmiyorsa ilgili değişken oluşturulmaz.

Aşağıdaki örnekte, bir yanıtın JSON gövdesinden iki değişkeni dolduran bir ExtractVariables politikası gösterilmektedir:

<ExtractVariables name="ExtractVariables-3">
   <Source>response</Source>
   <JSONPayload>
      <Variable name="latitude" type="float">
         <JSONPath>$.results[0].geometry.location.lat</JSONPath>
      </Variable>
      <Variable name="longitude" type="float">
         <JSONPath>$.results[0].geometry.location.lng</JSONPath>
      </Variable>
   </JSONPayload>
   <VariablePrefix>geocoderesponse</VariablePrefix>
</ExtractVariables>

Birden fazla yerde aynı değişkene yazma

Ayarlanacak değişkenlerin adlarını seçerken dikkatli olun. Politika, ilk ayıklama kalıbından son çıkarma kalıbına kadar sırayla yürütülür. Politika, aynı değişkene birden çok yerden bir değer yazarsa değişkenin değerini politikadaki son yazma işlemi belirler. (İstediğiniz gibi olabilir.)

Örneğin, aşağıda gösterildiği gibi bir sorgu parametresinde veya başlıkta iletilebilecek bir jeton değerini çıkarmak istiyorsunuz:

<!-- If token only in query param, the query param determines the value. 
     If token is found in both the query param and header, header sets value. -->
<QueryParam name="token">
  <Pattern ignoreCase="true">{tokenValue}</Pattern>
</QueryParam>
 
<!-- Overwrite tokenValue even if it was found in query parameter. -->
<Header name="Token">
  <Pattern ignoreCase="true">{tokenValue}</Pattern>
</Header>

Eşleşme olmadığında ne olacağını kontrol etme

Kalıp eşleşmezse karşılık gelen değişken oluşturulmaz. Dolayısıyla, başka bir politikanın değişkene referans vermesi hataya neden olabilir.

Seçeneklerden biri, çözümlenemeyen değişkenleri boş dize (null) olarak ele alacak şekilde yapılandırmak için değişkene referans veren bir politikada <IgnoreUnresolvedVariables> politikasını true (doğru) değerine ayarlamaktır:

<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>

Öğe referansı

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

<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
   <DisplayName>Extract Variables 1</DisplayName>
   <Source clearPayload="true|false">request</Source>
   <VariablePrefix>myprefix</VariablePrefix>
   <IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>
   <URIPath>
      <Pattern ignoreCase="false">/accounts/{id}</Pattern>
   </URIPath>
   <QueryParam name="code">
      <Pattern ignoreCase="true">DBN{dbncode}</Pattern>
   </QueryParam>
   <Header name="Authorization">
      <Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern>
   </Header>
   <FormParam name="greeting">
      <Pattern>hello {user}</Pattern>
   </FormParam>
   <Variable name="request.content">
       <Pattern>hello {user}</Pattern>
   </Variable>
   <JSONPayload>
      <Variable name="name">
         <JSONPath>{example}</JSONPath>
      </Variable>
   </JSONPayload>
   <XMLPayload stopPayloadProcessing="false">
      <Namespaces/>
      <Variable name="name" type="boolean">
         <XPath>/test/example</XPath>
      </Variable>
   </XMLPayload>
</ExtractVariables>

<ExtractVariables> özellikleri

<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-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

<Source> öğesi

(İsteğe bağlı) Ayrıştırılacak değişkeni belirtir. <Source> değeri varsayılan olarak message değerine ayarlanır. message değeri bağlama duyarlıdır. Bir istek akışında, message istek mesajına çözümlenir. Yanıt akışında message, yanıt mesajına çözümlenir.

Bu politikayı genellikle bir istek veya yanıt mesajından bilgi ayıklamak için kullansanız da herhangi bir değişkenden bilgi ayıklamak için kullanabilirsiniz. Örneğin, AccessEntity politikası tarafından oluşturulan bir varlıktan, Hizmet Çağrısı politikası tarafından döndürülen verilerden bilgi ayıklamak veya bir XML ya da JSON nesnesinden bilgi ayıklamak için bu API'yi kullanabilirsiniz.

<Source> çözümlenemez veya mesaj olmayan bir türe çözümlenirse politika yanıt veremez.

<Source clearPayload="true|false">request</Source>
Varsayılan: mesaj
Bulunma: İsteğe bağlı
Tür: Dize

Özellikler

Özellik Açıklama Varsayılan Varlık Tür
clearPayload

<Kaynak> bölümünden veri ayıkladıktan sonra içindeki yükü temizlemek istiyorsanız true (doğru) değerine ayarlayın.

<clearPayload> seçeneğini yalnızca ExtractVariables yürütüldükten sonra kaynak mesaj gerekmiyorsa kullanın. true (doğru) değerine ayarlanırsa mesaj tarafından kullanılan bellekte yer açılır.

false

İsteğe bağlı Boole

<VariablePrefix> öğesi

(İsteğe bağlı) Tam değişken adı, <Pattern> öğesinde veya <Variable> öğesinde <VariablePrefix>, bir nokta ve {curly braces} içinde tanımladığınız ad birleştirilerek oluşturulur. Örneğin: myprefix.id, myprefix.dbncode veya myprefix.oauthtoken.

<VariablePrefix>myprefix</VariablePrefix>

Örneğin, name değerinin "user" olduğunu varsayalım.

  • <VariablePrefix> belirtilmezse ayıklanan değerler user adlı bir değişkene atanır.
  • <VariablePrefix> ön ek olarak belirtilirse çıkarılan değerler myprefix.user adlı bir değişkene atanır.
Varsayılan: Yok
Bulunma: İsteğe bağlı
Tür: Dize

<ignoreUnresolvedVariables> öğesi

(İsteğe bağlı) Çözümlenemeyen değişkenleri boş dize (null) olarak işlemek için true olarak ayarlayın. Başvurulan herhangi bir değişken çözümlenemez durumda olduğunda politikanın hata vermesini istiyorsanız false olarak ayarlayın.

<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
Varsayılan: Yanlış
Bulunma: İsteğe bağlı
Tür: Boole

Bir XPath referansı bir <XMLPayload> içinde çözülmezse politika aşağıdaki hatayı bildirir:

{
   "fault":{
      "faultstring":"Unresolved xpath path in policy policy_name.",
      "detail":{
         "errorcode":"steps.extractvariables.InvalidXPath"
      }
   }
}

<URIPath> öğesi

(İsteğe bağlı, ancak daha fazla bilgi için aşağıdaki tablodaki Durum satırına bakın.) Bir request kaynak mesajının proxy.pathsuffix öğesinden bir değer çıkarır. Kalıba uygulanan yol, API Proxy'sinin temel yolunu içermeyen proxy.pathsuffix yoludur. Kaynak mesaj yanıt mesaj türüne dönüşürse bu öğe hiçbir şey yapmaz.

<URIPath>
   <Pattern ignoreCase="false">/accounts/{id}</Pattern>
</URIPath>

Birden çok <Pattern> öğesi kullanılabilir:

<URIPath>
   <Pattern ignoreCase="false">/accounts/{id}</Pattern>
   <Pattern ignoreCase="false">/accounts/{id}/transactions/{index}</Pattern>
</URIPath>
Varsayılan: Yok
Bulunma: İsteğe bağlı. Bununla birlikte, şunlardan en az birini eklemeniz gerekir: <URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> veya <XMLPayload>.
Tür: Yok

Özellikler

Özellik Açıklama Varsayılan Varlık Tür
ignoreCase Baba ile eşleştirilirken büyük/küçük harf kullanımının yoksayılacağını belirtir.

false

İsteğe bağlı Boole

<QueryParam> öğesi

(İsteğe bağlı, ancak daha fazla bilgi için aşağıdaki tablodaki Durum satırına bakın.) Bir request kaynak mesajının belirtilen sorgu parametresinden bir değer çıkarır. Kaynak mesaj, yanıt mesaj türüne çözümlenirse bu öğe hiçbir şey yapmaz.

<QueryParam name="code">
   <Pattern ignoreCase="true">DBN{dbncode}</Pattern>
</QueryParam>

Birden fazla sorgu parametresi aynı ada sahipse parametrelere referansta bulunmak için dizinleri kullanın:

<QueryParam name="w.2">
   <Pattern ignoreCase="true">{secondW}</Pattern>
</QueryParam>
Varsayılan: Yok
Bulunma: İsteğe bağlı. Bununla birlikte, şunlardan en az birini eklemeniz gerekir: <URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> veya <XMLPayload>.
Tür: Yok

Özellikler

Özellik Açıklama Varsayılan Varlık Tür
ad Sorgu parametresinin adını belirtir. Aynı ada sahip olan birden fazla sorgu parametresi varsa dizine eklenen referans değerini kullanın. Bu örnekte sorgu parametresinin ilk örneği dizin içermiyor, ikinci örneği 2. dizin, üçüncüsü 3. dizinde bulunuyor.

Yok

Gerekli Dize

<Header> öğesi

(İsteğe bağlı, ancak daha fazla bilgi için aşağıdaki tablodaki Durum satırına bakın.) Belirtilen istek veya yanıt mesajının belirtilen HTTP başlığından bir değer çıkarır. Birden fazla başlık aynı ada sahipse değerleri bir dizide depolanır.

<!-- The name is the actual header name. -->
<Header name="Authorization">
<!-- Provide a name for your new custom variable here. -->
   <Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern>
</Header>

Birden fazla başlık aynı ada sahipse dizideki bağımsız başlıklara referans vermek için dizinleri kullanın:

<Header name="myHeader.2">
   <Pattern ignoreCase="true">{secondHeader}</Pattern>
</Header>

Dizideki tüm üst bilgileri listelemek için aşağıdakileri de uygulayabilirsiniz:

<Header name="myHeader.values">
   <Pattern ignoreCase="true">{myHeaders}</Pattern>
</Header>
Varsayılan: Yok
Bulunma: İsteğe bağlı. Bununla birlikte, şunlardan en az birini eklemeniz gerekir: <URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> veya <XMLPayload>.
Tür: Yok

Özellikler

Özellik Açıklama Varsayılan Varlık Tür
ad Değeri ayıkladığınız başlığın adını belirtir. Birden fazla başlık aynı ada sahipse dizine eklenmiş referans yöntemini kullanın. Burada, başlığın ilk örneği dizin içermiyor, ikincisi dizin 2'de, üçüncüsü 3. dizinde bulunuyor. Dizideki tüm üst bilgileri almak için .values kullanın.

Yok

Gerekli Dize

<FormParam> öğesi

(İsteğe bağlı, ancak daha fazla bilgi için aşağıdaki tablodaki Durum satırına bakın.) Belirtilen request veya yanıt mesajının belirtilen form parametresinden bir değer çıkarır. Form parametreleri yalnızca belirtilen mesajın Content-Type üstbilgisi application/x-www-form-urlencoded olduğunda çıkarılabilir.

<FormParam name="greeting">
    <Pattern>hello {user}</Pattern>
</FormParam>
Varsayılan: Yok
Bulunma: İsteğe bağlı. Bununla birlikte, şunlardan en az birini eklemeniz gerekir: <URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> veya <XMLPayload>.
Tür: Yok

Özellikler

Özellik Açıklama Varsayılan Varlık Tür
ad Değeri ayıkladığınız form parametresinin adı.

Yok

Gerekli Dize

<Variable> öğesi

(İsteğe bağlı, ancak daha fazla bilgi için aşağıdaki tablodaki Durum satırına bakın.) Değerin çıkarılacağı değişkenin adını belirtir.

<Variable name="myVar">
    <Pattern>hello {user}</Pattern>
</Variable>

Değişkenden iki değer ayıklamak için:

<Variable name="myVar">
   <Pattern>hello {firstName} {lastName}</Pattern>
</Variable>
Varsayılan: Yok
Bulunma: İsteğe bağlı. Bununla birlikte, şunlardan en az birini eklemeniz gerekir: <URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> veya <XMLPayload>.
Tür: Yok

Özellikler

Özellik Açıklama Varsayılan Varlık Tür
ad Değerin ayıklanacağı değişkenin adı.

Yok

Gerekli Dize

<JSONPayload> öğesi

(İsteğe bağlı, ancak daha fazla bilgi için aşağıdaki tablodaki Durum satırına bakın.) Değişken değerinin ayıklanacağı JSON biçimli mesajı belirtir. JSON ayıklama işlemi yalnızca mesajın Content-Type üstbilgisi application/json olduğunda gerçekleştirilir.

<JSONPayload>
   <Variable name="name" type="string">
      <JSONPath>{example}</JSONPath>
   </Variable>
</JSONPayload>
Varsayılan: Yok
Bulunma: İsteğe bağlı. Bununla birlikte, şunlardan en az birini eklemeniz gerekir: <URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> veya <XMLPayload>.
Tür: Yok

<JSONPayload>/<Variable> öğesi

(JSONPayload öğesi içinde gereklidir.) Ayıklanan değerin atandığı değişkeni belirtir. Birden fazla değişkeni doldurmak için <JSONPayload> öğesine birden çok <Variable> etiketi ekleyebilirsiniz.

<Variable name="name" type="string">
   <JSONPath>{example}</JSONPath>
</Variable>
Varsayılan: Yok
Bulunma: JSONPayload öğesi içinde gereklidir.
Tür: Yok

Özellikler

Özellik Açıklama Varsayılan Varlık Tür
ad

Ayıklanan değerin atanacağı değişkenin adını belirtir.

ad

Gerekli Dize
tür Değişken değerinin veri türünü belirtir. Yok İsteğe bağlı

Dize. Şunlar arasından seçim yapın:

  • dize
  • boolean
  • tam sayı
  • uzun
  • float
  • double
  • düğüm kümesi (JSON parçasını döndürür)

<JSONPayload>/<Variable>/<JSONPath> öğesi

(JSONPayload:Variable öğesi içinde gereklidir.) JSON biçimli bir mesajdan bir değer çıkarmak için kullanılan JSON yolunu belirtir.

<Variable name="name">
   <JSONPath>$.rss.channel.title</JSONPath>
</Variable>
Varsayılan: Yok
Bulunma: Gerekli
Tür: Dize

<XMLPayload> öğesi

(İsteğe bağlı, ancak daha fazla bilgi için aşağıdaki tablodaki Durum satırına bakın.) Değişken değerinin ayıklanacağı XML biçimli mesajı belirtir. XML yükleri yalnızca mesajın Content-Type başlığı text/xml, application/xml veya application/*+xml olduğunda çıkarılır.

<XMLPayload stopPayloadProcessing="false">
  <Namespaces>
     <Namespace prefix="apigee">http://www.apigee.com</Namespace>
     <Namespace prefix="gmail">http://mail.google.com</Namespace>
  </Namespaces>
  <Variable name="name" type="boolean">
     <XPath>/apigee:test/apigee:example</XPath>
  </Variable>
</XMLPayload>
Varsayılan: Yok
Bulunma: İsteğe bağlı. Bununla birlikte, şunlardan en az birini eklemeniz gerekir: <URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> veya <XMLPayload>.
Tür: Yok

Özellikler

Özellik Açıklama Varsayılan Varlık Tür
stopPayloadProcessing

Bir değişken doldurulduktan sonra XPath değerlendirmesini durdurmak için true olarak ayarlayın. Bu, politika tarafından yalnızca tek bir değişkenin doldurulacağı anlamına gelir.

false

İsteğe bağlı Boole

<XMLPayload>/<Namespaces> öğesi

(İsteğe bağlı) XPath değerlendirmesinde kullanılacak ad alanını belirtir. XPath ifadelerinizde ad alanları kullanıyorsanız ad alanlarını aşağıdaki örnekte gösterildiği gibi burada belirtmeniz gerekir.

<XMLPayload stopPayloadProcessing="false">
  <Namespaces>
     <Namespace prefix="apigee">http://www.apigee.com</Namespace>
     <Namespace prefix="gmail">http://mail.google.com</Namespace>
  </Namespaces>
  <Variable name="legName" type="string">
    <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</XPath>
  </Variable>
</XMLPayload>

XPath ifadelerinizde ad alanları kullanmıyorsanız aşağıdaki örnekte gösterildiği gibi <Namespaces> öğesini atlayabilir veya yorumlayabilirsiniz:

<XMLPayload stopPayloadProcessing="false">
  <!-- <Namespaces/> -->
  <Variable name="legName" type="string">
    <XPath>/Directions/route/leg/name</XPath>
  </Variable>
</XMLPayload>
Varsayılan: Yok
Bulunma: İsteğe bağlı
Tür: Dize

Özellikler

Özellik Açıklama Varsayılan Varlık Tür
prefix

Ad alanı öneki.

Yok

Gerekli Dize

<XMLPayload>/<Variable> öğesi

(İsteğe bağlı) Ayıklanan değerin atanacağı değişkeni belirtir.

<Variable name="name" type="boolean">
   <XPath>/test/example</XPath>
</Variable>
Varsayılan: Yok
Bulunma: İsteğe bağlı
Tür: Yok

Özellikler

Özellik Açıklama Varsayılan Varlık Tür
ad

Ayıklanan değerin atanacağı değişkenin adını belirtir.

ad

Gerekli Dize
tür Değişken değerinin veri türünü belirtir. Boole İsteğe bağlı

Dize. Şunlar arasından seçim yapın:

  • dize
  • boolean
  • tam sayı
  • uzun
  • float
  • double
  • düğüm kümesi (bir XML parçası döndürür)

<XMLPayload>/<Variable>/<XPath> öğesi

(XMLPayload:Variable öğesi içinde gereklidir.) Değişken için tanımlanan XPath belirtir. Yalnızca XPath 1.0 ifadeleri desteklenir.

<Variable name="name" type="boolean">
   <XPath>/test/example</XPath>
</Variable>

Ad alanını içeren örnek. XPath ifadelerinizde ad alanları kullanıyorsanız ad alanlarını politikanın <XMLPayload><Namespaces> bölümünde belirtmeniz gerekir.

<Variable name="name" type="boolean">
   <XPath>/foo:test/foo:example</XPath>
</Variable>
Varsayılan: Yok
Bulunma: Gerekli
Tür: Dize

Hata referansı

Bu bölümde, bu politika bir hatayı tetiklediğinde Edge tarafından ayarlanan hata kodları ile hata mesajları ve döndürülen hata mesajları ile Edge tarafından ayarlanan 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 Düzelt
steps.extractvariables.ExecutionFailed 500

Bu hata şu durumlarda oluşur:

  • Giriş yükü (JSON, XML) boş.
  • Politikaya iletilen giriş (JSON, XML vb.) geçersiz veya hatalı biçimlendirilmiş.
steps.extractvariables.ImmutableVariable 500 Politikada kullanılan değişken sabittir. Politika bu değişkeni ayarlayamadı.
steps.extractvariables.InvalidJSONPath 500 Bu hata, politikanın JSONPath öğesinde geçersiz bir JSON yolu kullanılırsa ortaya çıkar. Örneğin, bir JSON yükü Name nesnesine sahip değilse ancak politikada yol olarak Name nesnesini belirtirseniz bu hata oluşur.
steps.extractvariables.JsonPathParsingFailure 500 Bu hata, politika bir JSON yolunu ayrıştıramadığı ve Source öğesinde belirtilen akış değişkeninden veri çıkaramadığında ortaya çıkar. Bu durum genellikle Source öğesinde belirtilen akış değişkeni mevcut akışta yoksa ortaya çıkar.
steps.extractvariables.SetVariableFailed 500 Politika, değeri bir değişkene ayarlayamadığında bu hata oluşur. Bu hata genellikle, adları aynı kelimelerle başlayan birden fazla değişkene, iç içe ve noktayla ayrılmış biçimde değer atamaya çalışırsanız ortaya çıkar.
steps.extractvariables.SourceMessageNotAvailable 500 Bu hata, politikanın Source öğesinde belirtilen message değişkeni şunlardan biriyse ortaya çıkar:
  • Kapsam dışında (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
  • Çözümlenemiyor (tanımlanmadı)
steps.extractvariables.UnableToCast 500 Politika, ayıklanan değeri bir değişkene yayınlayamadıysa bu hata oluşur. Bu durum genellikle, bir veri türünün değerini başka bir veri türünün değişkeni olarak ayarlamayı denerseniz ortaya çıkar.

Dağıtım hataları

Bu hatalar, bu politikayı içeren bir proxy dağıttığınızda ortaya çıkabilir.

Hata adı Neden Düzelt
NothingToExtract Politikada URIPath, QueryParam, Header, FormParam, XMLPayload veya JSONPayload öğelerinden hiçbiri yoksa çıkarılacak bir şey olmadığından API Proxy'sinin dağıtımı başarısız olur.
NONEmptyPrefixMappedToEmptyURI Bu hata, politikanın XMLPayload öğesi altındaki Namespace öğesinde tanımlanmış bir ön eki varsa ancak hiçbir URI tanımlanmamışsa ortaya çıkar.
DuplicatePrefix Bu hata, politikanın XMLPayload öğesi altındaki Namespace öğesinde aynı ön ekin birden fazla kez tanımlanmış olması durumunda ortaya çıkar.
NoXPathsToEvaluate Politikanın XMLPayload öğesi içinde XPath öğesi yoksa API proxy'sinin dağıtımı bu hatayı vererek başarısız olur.
EmptyXPathExpression Politikanın XMLPayload öğesi içinde boş bir XPath ifadesi varsa API proxy'sinin dağıtımı başarısız olur.
NoJSONPathsToEvaluate Politikanın JSONPayload öğesi içinde JSONPath öğesi yoksa API proxy'sinin dağıtımı bu hatayı vererek başarısız olur.
EmptyJSONPathExpression Politikanın XMLPayload öğesi içinde boş bir XPath ifadesi varsa API proxy'sinin dağıtımı başarısız olur.
MissingName Politika gerekli olduğu durumlarda QueryParam, Header, FormParam veya Variable gibi politika öğelerinin hiçbirinde name özelliği içermiyorsa API proxy'sinin dağıtımı başarısız olur.
PatternWithoutVariable Politikanın Pattern öğesi içinde belirtilmiş bir değişken yoksa API proxy'sinin dağıtımı başarısız olur. Pattern öğesi, ayıklanan verilerin depolanacağı değişkenin adını gerektirir.
CannotBeConvertedToNodeset Politika, Variable türünün nodeset olarak tanımlandığı bir XPath ifadesine sahipse ancak ifade düğüm kümesine dönüştürülemiyorsa API proxy'sinin dağıtımı başarısız olur.
JSONPathCompilationFailed Politika, belirtilen bir JSON Yolunu derleyemedi.
InstantiationFailed Bu politika örneği oluşturulamadı.
XPathCompilationFailed XPath öğesinde kullanılan ön ek veya değer, politikada belirtilen ad alanlarının hiçbirinin parçası değilse API proxy'sinin dağıtımı başarısız olur.
InvalidPattern Politikadaki URIPath, QueryParam, Header, FormParam, XMLPayload veya JSONPayload gibi öğelerden herhangi birinde Pattern öğesi tanımı geçersizse API proxy'sinin dağıtımı başarısız olur.

Hata değişkenleri

Bu değişkenler, bu politika çalışma zamanında bir hata tetiklediğinde 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 = "SourceMessageNotAvailable"
extractvariables.policy_name.failed policy_name, hataya neden olan politikanın kullanıcı tarafından belirtilen adıdır. extractvariables.EV-ParseJsonResponse.failed = true

Örnek hata yanıtı

{
   "fault":{
      "detail":{
         "errorcode":"steps.extractvariables.SourceMessageNotAvailable"
      },
      "faultstring":"request message is not available for ExtractVariable: EV-ParseJsonResponse"
   }
}

Hata kuralı örneği

<FaultRule name="Extract Variable Faults">
    <Step>
        <Name>AM-CustomErrorMessage</Name>
        <Condition>(fault.name = "SourceMessageNotAvailable") </Condition>
    </Step>
    <Condition>(extractvariables.EM-ParseJsonResponse.failed = true) </Condition>
</FaultRule>

Şemalar

İlgili konular

Özel analizler kullanarak API mesajı içeriğini analiz etme

Değişkenler referansı