extraVariables politikası

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

Ne?

ExtractVariables politikası, bir istek veya yanıttan içerik ayıklar ve bir değişkenin değerini bu içerik olarak ayarlar. Başlıklar, URI yolları, JSON/XML yükleri, form parametreleri ve sorgu parametreleri dahil olmak üzere iletinin herhangi bir bölümünü ayıklayabilirsiniz. Politika, ileti içeriğine bir metin kalıbı uygulayarak çalışır ve eşleşme bulunduğunda belirtilen ileti içeriğiyle 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ı tarafından oluşturulan öğeler, XML nesneleri veya JSON nesneleri de dahil olmak üzere diğer kaynaklardan bilgi ayıklamak için de kullanabilirsiniz.

Belirtilen ileti içeriğini ayıkladıktan sonra, bir istek ve yanıt işleme sürecinin parçası olarak diğer politikalarda değişkene referans verebilirsiniz.

Videolar

ExtractVariables politikası hakkında daha fazla bilgi edinmek için aşağıdaki videoları izleyin.

Video Açıklama
XML yükünden değişkenleri çıkarma Değişkeni Çıkarma politikasını kullanarak bir XML yükünden değişkenleri çıkarma.
JSON yükünden değişkenleri çıkarma Değişkeni Çıkarma politikasını kullanarak JSON yükünden değişkenleri çıkarma.
Parametrelerden değişkenleri çıkarma Sorgu, üstbilgi, form veya URI parametreleri gibi parametrelerden değişkenleri ayıklayın.
Çok değerli parametrelerden değişkenleri ayıklama Çok değerli parametrelerden değişkenleri ayıklayın.
Sorgu parametresinden değişkenleri çıkarma (Classic Edge) Classic Edge kullanıcı arayüzünü kullanarak bir sorgu parametresinden değişkenleri ayıklayın.
XML veya JSON yükünden değişkenleri çıkarma (Klasik Edge) Klasik Edge kullanıcı arayüzünü kullanarak bir XML veya JSON yükünden değişkenleri ayıklayın.

Örnekler

Bu politika kodu örnekleri, aşağıdaki türlerdeki öğelerden değişkenlerin nasıl çıkarılacağını gösterir:

GitHub

Bu bağlantılar, Edge'de dağıtabileceğiniz ve çalıştırabileceğiniz çalışan API proxy'si örneklerine yönlendirir. Bu politikalar ExtractVariables'ı kullanır ve GitHub'daki Apigee'nin api-platform-samples deposunda yer alır. README dosyalarında, ExtractVariables'ın her durumda nasıl kullanıldığı ve her örneğin nasıl dağıtılıp çalıştırılacağı açıklanmaktadır.

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 almasını söyler. <Pattern> öğesi, URI yoluna uygulanacak kalıbı belirtir. Desen, URI yolunun değişen kısmını gösteren küme parantezleriyle basit bir şablon olarak değerlendirilir.

Ayarlanacak değişkenin adı, <VariablePrefix> öğesinde belirtilen değerin yanı sıra <Pattern> öğesindeki süslü parantezler {} içine alınmış değerle belirlenir. İki değer araya nokta konularak birleştirilir. Örneğin, urirequest.id değişken adı elde edilir. <VariablePrefix> öğesi yoksa değişken adı yalnızca küme parantezleri içine alınmış değerdir.

Yukarıdaki örnek politika kodunun aşağıdaki gelen istekle çalıştığını varsayalım:

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

API proxy'sinin temel yolu /svc1 olsun. Apigee Edge, yukarıdaki ExtractVariables politika kodunu bu gelen isteğe 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, urirequest.id adlı değişkene başvurarak 12797282 dize değerini alabilir.

Örneğin, aşağıdaki AssignMessage 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>

Yukarıdaki örnek politika kodunun aşağıdaki gelen istekle çalıştığını varsayalım:

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 kodlar, queryinfo.dbncode adlı değişkene başvurarak 88271 dize değerini alabilir.

Artık proxy'nizde queryinfo.dbncode değişkenine erişebilirsiniz. Örneğin, aşağıdaki AssignMessage 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ı ada sahip birden fazla sorgu parametresi belirtmenize olanak tanıdığını varsayalım. Bu politikayı, sorgu parametresi "w"nin birden fazla örneğinin değerini ayıklamak için kullanabilirsiniz. Bu sorgu parametrelerine ExtractVariables politikasında referans vermek için dizinleri kullanırsınız. Sorgu parametresinin ilk örneğinde dizin yoktur, ikinci örnek dizin 2'de, üçüncü örnek dizin 3'te yer alır.

Yukarıdaki örnek politika kodunun aşağıdaki gelen istekle çalıştığını varsayalım:

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, queryInfo.secondWeather değişkenini ise Chicago olarak ayarlar.

Artık proxy'nizde queryinfo.firstWeather ve queryinfo.secondWeather değişkenlerine erişebilirsiniz. Örneğin, aşağıdaki AssignMessage 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 taşıyıcı jetonlarını kullandığını varsayalım. Yukarıdaki örnek politika kodunun, şu gibi bir üstbilgi içeren bir OAuth v2.0 jetonu taşıyan istekle çalıştığını düşünün: Authorization: Bearer TU08xptfFfeM7aS0xHqlxTgEAdAM.

API tasarımcısı olarak, önbellek aramasında anahtar olarak jeton değerini (ancak başlığın tamamını değil) kullanmak istediğinizi varsayalım. Jetonu ayıklamak 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 proxy'nizde clientrequest.oauthtoken değişkenine erişebilirsiniz. Örneğin, aşağıdaki AssignMessage 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ıyor. Bu değişkenlerin soneki, <Variable> öğesinin name özelliğiyle 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 proxy'nizde geocoderesponse.latitude değişkenine erişebilirsiniz. Örneğin, aşağıdaki AssignMessage politikası, yanıtın "latitude" adlı üstbilgisine 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ü inceleyin:

<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, directionsresponse değişken ön ekini kullanır. Bu değişkenlerin son eki, <Variable> öğesinin name özelliğiyle 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 proxy'nizde directionresponse.travelmode değişkenine erişebilirsiniz. Örneğin, aşağıdaki AssignMessage politikası, yanıtın "tmode" adlı üst bilgisine 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>

ExtractVariables politikası hakkında

API geliştiricileri, başlıklar, URI yolları, yükler ve sorgu parametreleri dahil olmak üzere iletilerin içeriğine göre farklı şekilde davranan API proxy'leri oluşturur. Genellikle proxy, koşul ifadesinde kullanılmak üzere bu içeriğin bir kısmını ayıklar. Bunu yapmak için ExtractVariables politikasını kullanın.

ExtractVariables politikasını tanımlarken şunları seçebilirsiniz:

  • Ayarlanacak değişkenlerin adları
  • Değişkenlerin kaynağı
  • Kaç değişkenin ayıklanacağı ve ayarlanacağı

Politika yürütüldüğünde içeriğe bir metin kalıbı uygular ve eşleşme bulduğunda belirlenen değişkenin değerini içerikle ayarlar. Diğer politikalar ve kodlar daha sonra bu değişkenleri kullanarak dinamik davranışları etkinleştirebilir veya Edge API Analytics'e iş verileri gönderebilir.

ExtractVariables'ın içeriğe dayalı Analytics raporları oluşturmak için nasıl kullanılabileceğini öğrenmek istiyorsanız Özel analizler kullanarak API mesajı içeriğini analiz etme başlıklı makaleyi inceleyin.

Kapsam

ExtractVariables politikasıyla ayarlanan değişkenler global kapsama sahiptir. Yani ExtractVariables politikası yeni bir değişken tanımladıktan sonra, akışın herhangi bir aşamasındaki herhangi bir politikadan veya koddan (ExtractVariables politikasından sonra yürütülen) bu değişkene erişebilirsiniz. Bu kapsamda şunlar yer alır:

  • 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ı kullanılarak)
  • Hata akışları

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

ExtractVariables politikası, bir istek veya yanıttan bilgi ayıklar ve bu bilgiyi bir değişkene yazar. URI yolu veya XML verileri gibi çıkarabileceğiniz her bilgi türü için eşleştirilecek kalıbı ve çıkarılan bilgileri tutmak üzere kullanılan değişkenin adını belirtirsiniz.

Ancak kalıp eşleştirmenin işleyiş şekli, ayıklama kaynağına bağlıdır. Aşağıdaki bölümlerde, ayıklayabileceğiniz iki temel bilgi kategorisi açıklanmaktadır.

URI yollarını, sorgu parametrelerini, üstbilgileri, form parametrelerini ve değişkenleri eşleştirme

Bir URI yolundan, sorgu parametrelerinden, üstbilgilerden, form parametrelerinden ve değişkenlerden bilgi ayıklarken eşleştirilecek bir veya daha fazla kalıbı 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şme kalıbı 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/"dan sonra görünen değere ayarlanır. Örneğin, API proxy'nizin temel yolunun /basepath/v1 olduğunu varsayalım . http://myCo.com/basepath/v1/a/b adresine gelen bir istekte değişken "b" olarak ayarlanır.

Birden fazla desen belirtme

Eşleşecek birden fazla kalıp belirtebilirsiniz. Bunlar <Pattern> etiketlerine karşılık gelir.

  • Tüm kalıplar eşleşme açısından test edilir.
  • Kalıplardan hiçbiri eşleşmezse politika hiçbir işlem yapmaz ve değişkenler oluşturulmaz.
  • Birden fazla kalıp eşleşirse ayıklama için en uzun yol segmentlerine sahip kalıp kullanılır.
  • Eşleşen iki modelin en uzun yol segmentleri aynıysa ayıklama için politikada ilk belirtilen model 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>

/basepath/v1 temel yoluna sahip 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 ayarlanır.

İstek URL'si şu şekildeyse:

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

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

Birden fazla değişken içeren kalıpları belirtme

Eşleşme deseninde birden fazla değişken belirtebilirsiniz. Örneğin, iki değişkenli bir eşleşme kalıbı belirtiyorsunuz:

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

Temel yolu /basepath/v1 olan bir API proxy'si olduğunu varsayarsak gelen istek URL'si için:

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

...urirequest.pathSeg1 değişkeni "b" olarak, urirequest.pathSeg2 değişkeni ise "d" olarak ayarlanır.

Desendeki birden fazla örneği eşleştirme

Aynı ada sahip bir öğenin birden fazla örneği olduğunda da kalıpları eşleştirebilirsiniz. Örneğin, aynı ada sahip birden fazla sorgu parametresi veya birden fazla üstbilgi içeren bir istekte bulunabilirsiniz. Aşağıdaki istekte "w" adlı iki sorgu parametresi bulunuyor:

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

Bu sorgu parametrelerine ExtractVariables politikasında referans vermek için dizinleri kullanırsınız. Sorgu parametresinin ilk örneğinde dizin yoktur, ikincisi 2. dizinde, üçüncüsü 3. dizindedir. Örneğin, aşağıdaki politika istekteki "w" adlı ikinci sorgu parametresinin değerini ayıklar:

<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 ayarlanır. İkinci sorgu parametresi istekten çıkarılırsa urirequest.secondW değişkeni boş olur. İstek içinde aynı ada sahip birden fazla öğe olduğunda her zaman dizin oluşturmayı kullanın.

Desende ö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 fazla segmentiyle eşleşir.

Örneğin, aşağıdaki örnekte gösterildiği gibi <URIPath> öğesi için 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" gibi yolsonekleri (URI yolunun temel yoldan sonraki kısmı) olan isteklerle eşleşir. İkinci kalıp, "/a/foo/bar/baz/c" gibi "/a/"dan sonraki herhangi bir sayıda yol segmentinin yanı sıra "/a/b/c" ve "/a/foo/bar" ile de eşleşir.

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

*;charset={encoding}

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

ExtractVariables politikasına iletilen değer "{" gibi özel bir karakter içeriyorsa bu karakteri kod dışına almak için "%" karakterini kullanın. Aşağıdaki örnekte, sorgu parametresinin değerinde değişmez karakterler olarak kullanıldıkları için kalıptaki "{" ve "}" karakterleri çıkış karakteriyle gösterilmiştir:

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

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

JSON ve XML eşleştirme

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 ayıklanan bilgilere yönelik JsonPath (JSON) veya XPATH'i (XML) belirtir.

Politikadaki tüm <Variable> etiketleri değerlendirilir. Böylece, tek bir politikadan birden fazla değişkeni doldurabilirsiniz. <Variable> etiketi JSON veya XML'de geçerli bir alan olarak değerlendirilmezse 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>

Aynı değişkene birden fazla yerden yazma

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

Örneğin, aşağıda gösterildiği gibi bir sorgu parametresinde veya bir üstbilgide iletilebilen bir jeton değeri ayıklamak 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 ilgili değişken oluşturulmaz. Bu nedenle, başka bir politika değişkene referans veriyorsa hata oluşabilir.

Bir seçenek, politikayı çözümlenemeyen değişkenleri boş dize (null) olarak değerlendirecek şekilde yapılandırmak için değişkeni referans alan bir politikada <IgnoreUnresolvedVariables> değerini true olarak 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ç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

<Source> öğesi

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

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 de kullanabilirsiniz. Örneğin, AccessEntity politikası tarafından oluşturulan bir öğeden, Service Callout politikası tarafından döndürülen verilerden veya bir XML ya da JSON nesnesinden bilgi ayıklamak için bu politikayı kullanabilirsiniz.

<Source> çözülemezse veya mesaj türü olmayan bir türe çözülürse politika yanıt veremez.

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

Özellikler

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

Verileri ayıklama işleminden sonra <Source> içinde belirtilen yükü temizlemek istiyorsanız true olarak ayarlayın.

<clearPayload> seçeneğini yalnızca ExtractVariables yürütüldükten sonra kaynak iletiye gerek duyulmuyorsa kullanın. Doğru olarak ayarlamak, mesajın kullandığı belleği boşaltır.

yanlış

İsteğe bağlı Boole

<VariablePrefix> öğesi

(İsteğe bağlı) Tam değişken adı, <VariablePrefix>, nokta ve <Pattern> öğesinde veya <Variable> öğesinde {süslü parantez} 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, adın değerinin "user" olduğunu varsayalım.

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

<IgnoreUnresolvedVariables> öğesi

(İsteğe bağlı) Çözülemeyen değişkenleri boş dize (null) olarak değerlendirmek için true olarak ayarlayın. Politikanın, referans verilen herhangi bir değişken çözümlenemediğinde hata vermesini istiyorsanız false olarak ayarlayın.

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

Bir <XMLPayload> içinde XPath referansı çözümlenmemişse politika aşağıdaki hatayı verir:

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

<URIPath> öğesi

(İsteğe bağlıdır ancak daha fazla bilgi için aşağıdaki tablodaki "Görünürlük" satırına bakın.) Bir istek kaynak mesajının proxy.pathsuffix'inden bir değer çıkarır. Kalıba uygulanan yol, API proxy'sinin temel yolunu içermeyen proxy.pathsuffix'tir. Kaynak mesaj yanıt mesaj türüne çözümlenirse bu öğe hiçbir şey yapmaz.

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

Birden fazla <Pattern> öğesi kullanmak mümkündür:

<URIPath>
   <Pattern ignoreCase="false">/accounts/{id}</Pattern>
   <Pattern ignoreCase="false">/accounts/{id}/transactions/{index}</Pattern>
</URIPath>
Varsayılan: Yok
Mevcut olma: İsteğe bağlıdır. Ancak aşağıdakilerden 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 Deseni eşleştirirken büyük/küçük harf duyarlılığının yoksayılacağını belirtir.

yanlış

İsteğe bağlı Boole

<QueryParam> öğesi

(İsteğe bağlıdır ancak daha fazla bilgi için aşağıdaki tablodaki "Görünürlük" satırına bakın.) Bir istek 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>

Aynı ada sahip birden fazla sorgu parametresi varsa parametrelere referans vermek için dizinleri kullanın:

<QueryParam name="w.2">
   <Pattern ignoreCase="true">{secondW}</Pattern>
</QueryParam>
Varsayılan: Yok
Mevcut olma: İsteğe bağlıdır. Ancak aşağıdakilerden 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. Birden fazla sorgu parametresi aynı ada sahipse dizine eklenmiş referans oluşturmayı kullanın. Bu yöntemde sorgu parametresinin ilk örneği dizine eklenmez, ikinci örnek 2. dizine, üçüncü örnek 3. dizine vb. eklenir.

Yok

Zorunlu Dize

<Header> öğesi

(İsteğe bağlıdır ancak daha fazla bilgi için aşağıdaki tablodaki "Görünürlük" satırına bakın.) Belirtilen istek veya yanıt mesajının belirtilen HTTP üstbilgisinden bir değer çıkarır. Birden fazla başlık aynı ada sahipse değerleri bir dizide saklanı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 üstbilgi aynı ada sahipse dizideki üstbilgilere ayrı ayrı referans vermek için dizinleri kullanın:

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

Veya dizideki tüm üstbilgileri listelemek için aşağıdakileri kullanın:

<Header name="myHeader.values">
   <Pattern ignoreCase="true">{myHeaders}</Pattern>
</Header>
Varsayılan: Yok
Mevcut olma: İsteğe bağlıdır. Ancak aşağıdakilerden 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 çıkaracağınız üstbilginin adını belirtir. Birden fazla üstbilgi aynı ada sahipse dizinlenmiş referans kullanın. Bu durumda, üstbilginin ilk örneğinde dizin yoktur, ikinci örnek 2. dizindedir, üçüncü örnek 3. dizindedir vb. Dizideki tüm üstbilgileri almak için .values kullanın.

Yok

Zorunlu Dize

<FormParam> öğesi

(İsteğe bağlıdır ancak daha fazla bilgi için aşağıdaki tablodaki "Görünürlük" satırına bakın.) Belirtilen istek veya yanıt mesajının belirtilen form parametresinden bir değer çıkarır. Form parametreleri yalnızca belirtilen iletinin Content-Type üstbilgisi application/x-www-form-urlencoded olduğunda ayıklanabilir.

<FormParam name="greeting">
    <Pattern>hello {user}</Pattern>
</FormParam>
Varsayılan: Yok
Mevcut olma: İsteğe bağlıdır. Ancak aşağıdakilerden 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 aldığınız form parametresinin adı.

Yok

Zorunlu Dize

<Variable> öğesi

(İsteğe bağlıdır ancak daha fazla bilgi için aşağıdaki tablodaki "Görünürlük" 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
Mevcut olma: İsteğe bağlıdır. Ancak aşağıdakilerden 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

Zorunlu Dize

<JSONPayload> öğesi

(İsteğe bağlıdır ancak daha fazla bilgi için aşağıdaki tablodaki "Görünürlük" satırına bakın.) Değişkenin değerinin çıkarılacağı JSON biçimli mesajı belirtir. JSON çıkarma işlemi yalnızca iletinin Content-Type üstbilgisi application/json olduğunda gerçekleştirilir.

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

<JSONPayload>/<Variable> öğesi

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

<Variable name="name" type="string">
   <JSONPath>{example}</JSONPath>
</Variable>
Varsayılan: Yok
Mevcut olma: JSONPayload öğesinde zorunludur.
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

Zorunlu 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
  • kayan noktalı
  • double
  • nodeset (JSON parçası döndürür)

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

(JSONPayload:Variable öğesinde zorunludur.) JSON biçimli bir iletiden değer ayıklamak için kullanılan JSON yolunu belirtir.

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

<XMLPayload> öğesi

(İsteğe bağlıdır ancak daha fazla bilgi için aşağıdaki tablodaki "Görünürlük" satırına bakın.) Değişkenin değerinin çıkarılacağı XML biçimli mesajı belirtir. XML yükleri yalnızca iletinin Content-Type üstbilgisi 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
Mevcut olma: İsteğe bağlıdır. Ancak aşağıdakilerden 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, yalnızca tek bir değişkenin politika tarafından doldurulduğu anlamına gelir.

yanlış

İ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 aşağıdaki örnekte gösterildiği gibi ad alanlarını burada beyan etmeniz 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 yorum satırı olarak işaretleyebilirsiniz:

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

Özellikler

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

Ad alanı öneki.

Yok

Zorunlu 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
Mevcut olma: İ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

Zorunlu 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
  • kayan noktalı
  • double
  • nodeset (bir XML parçası döndürür)

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

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

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

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

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

Hata referansı

Bu bölümde, bu politika bir hatayı tetiklediğinde döndürülen hata kodları ve hata mesajlarının yanı sıra Edge tarafından ayarlanan hata değişkenleri açıklanmaktadır. Hata kuralları geliştirirken bu bilgilerin farkında olmanız önemlidir. hoşuma gitmesi için bir fırsattır. Daha fazla bilgi için Bilmeniz gerekenler Politika hataları ve Kullanım sorun.

Çalışma zamanı hataları

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

Hata kodu HTTP durumu Neden Düzelt
steps.extractvariables.ExecutionFailed 500

Bu hata aşağıdaki 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şkenler sabittir. Politika bunu ayarlayamadı değişkenine eklenmelidir.
steps.extractvariables.InvalidJSONPath 500 Bu hata,JSONPath politikası. Örneğin, bir JSON yükü Name nesnesine sahip değilse ancak politikada yol olarak Name değerini belirtirseniz bu hata oluşur.
steps.extractvariables.JsonPathParsingFailure 500 Bu hata, politika bir JSON yolunu ayrıştıramadığında ve Source öğesinde belirtilen akış değişkeninden verileri ayıklayın. Genellikle bu Source öğesinde belirtilen akış değişkeninin geçerli öğede mevcut olmaması, akışı sağlar.
steps.extractvariables.SetVariableFailed 500 Bu hata, politika değeri bir değişkene ayarlayamadığında oluşur. Hata genellikle adları ile başlayan birden çok değişkene değer atamaya çalışırsanız aynı kelimeleri iç içe yerleştirilmiş ve noktayla ayrılmış biçimde yazın.
steps.extractvariables.SourceMessageNotAvailable 500 Bu hata, ileti politikanın Source öğesinde belirtilen değişken şunlardan biridir:
  • Kapsam dışında (politikanın yürütüldüğü belirli akışta kullanılamaz) veya
  • Çözümlenemiyor (tanımlanmamış)
steps.extractvariables.UnableToCast 500 Bu hata, politika ayıklanan dosyayı bir değişkene dönüştürün. Bu genellikle bir veri türünü başka bir veri türünün değişkenine dönüştürebilirsiniz.

Dağıtım hataları

Bu politikayı içeren bir proxy dağıttığınızda bu hatalar oluşabilir.

Hata adı Neden Düzelt
NothingToExtract Politikada URIPath, QueryParam, Header, FormParam, XMLPayload veya JSONPayload, çıkarılacak bir şey olmadığından API Proxy dağıtımı başarısız olur.
NONEmptyPrefixMappedToEmptyURI Bu hata, politikanın XMLPayload öğesinin altında Namespace öğesi var ancak URI yok tanımlanmıştır.
DuplicatePrefix Bu hata, politikada şundan daha fazla tanımlanmış aynı ön eke sahipse ortaya çıkar: XMLPayload öğesinin altındaki Namespace öğesinde bir kez.
NoXPathsToEvaluate PolitikanınXPath XMLPayload öğesi olursa API proxy'sinin dağıtımı bu hatayla başarısız olur.
EmptyXPathExpression Politikanın XMLPayload içinde boş bir XPath ifadesi varsa öğesini görürseniz API proxy'sinin dağıtımı başarısız olur.
NoJSONPathsToEvaluate PolitikanınJSONPath JSONPayload öğesi olursa API proxy'sinin dağıtımı bu hatayla başarısız olur.
EmptyJSONPathExpression PolitikanınXPath XMLPayload öğesi olursa API proxy'sinin dağıtımı başarısız olur.
MissingName Politikanın hiçbirinde name özelliği yoksa QueryParam, Header, FormParam veya Variable değerini alırsa API proxy'sinin dağıtımı başarısız olur.
PatternWithoutVariable Politikanın Pattern öğesi içinde belirtilmiş bir değişkeni yoksa API proxy'sinin dağıtımı başarısız olur. Pattern öğesi için şu ad gerekir: ayıklanan verilerin depolanacağı değişken.
CannotBeConvertedToNodeset Politika, Variable türünün olduğu bir XPath ifadesi içeriyorsa nodeset olarak tanımlanır ancak ifade düğüm kümesine dönüştürülemezse API proxy'sinin dağıtımı başarısız olur.
JSONPathCompilationFailed Politika, belirtilen bir JSON Yolu'nu derleyemedi.
InstantiationFailed Politika örneklenemedi.
XPathCompilationFailed XPath öğesinde kullanılan önek veya değer daha sonra API proxy'sinin dağıtımına izin verildikten sonra başarısız olur.
InvalidPattern URIPath gibi öğelerin herhangi birinde Pattern öğe tanımı geçersizse QueryParam, Header, FormParam, XMLPayload veya politika içinde JSONPayload, API proxy'si başarısız oldu.

Hata değişkenleri

Bu değişkenler, politika çalışma zamanında bir hatayı tetiklediğinde ayarlanır. Daha fazla bilgi için Ne, ne ve ne zaman bilmeniz gerekir.

Değişkenler Konum Örnek
fault.name="fault_name" fault_name, yukarıdaki Çalışma zamanı hataları tablosunda listelendiği gibi 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"
   }
}

Örnek hata kuralı

<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şken referansı