سیاست ExtractVariables

شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید .
اطلاعات

چی

خط مشی ExtractVariables محتوا را از یک درخواست یا پاسخ استخراج می کند و مقدار یک متغیر را برای آن محتوا تعیین می کند. می‌توانید هر بخشی از پیام را استخراج کنید، از جمله سرصفحه‌ها، مسیرهای URI، بارهای JSON/XML، پارامترهای فرم و پارامترهای پرس و جو. این خط‌مشی با اعمال یک الگوی متنی برای محتوای پیام کار می‌کند و پس از یافتن مطابقت، متغیری را با محتوای پیام مشخص شده تنظیم می‌کند.

در حالی که اغلب از این خط‌مشی برای استخراج اطلاعات از یک درخواست یا پیام پاسخ استفاده می‌کنید، می‌توانید از آن برای استخراج اطلاعات از منابع دیگر نیز استفاده کنید، از جمله موجودیت‌های ایجاد شده توسط خط‌مشی AccessEntity ، اشیاء XML یا اشیاء JSON.

پس از استخراج محتوای پیام مشخص شده، می توانید به عنوان بخشی از پردازش درخواست و پاسخ به متغیر در سایر خط مشی ها ارجاع دهید.

ویدیوها

ویدیوهای زیر را تماشا کنید تا درباره سیاست ExtractVariables بیشتر بدانید.

ویدیو توضیحات
استخراج متغیرها از محموله XML استخراج متغیرها از یک محموله XML با استفاده از خط مشی Extract Variable.
استخراج متغیرها از JSON payload با استفاده از خط مشی Extract Variable متغیرها را از یک بار JSON استخراج کنید.
استخراج متغیرها از پارامترها استخراج متغیرها از پارامترها، مانند پارامترهای query، header، form یا URI.
استخراج متغیرها از پارامترهای چند مقداری استخراج متغیرها از پارامترهای چند مقداری
استخراج متغیرها از پارامتر پرس و جو (کلاسیک Edge) استخراج متغیرها از یک پارامتر پرس و جو با استفاده از Classic Edge UI.
استخراج متغیرها از محموله XML یا JSON (کلاسیک Edge) با استفاده از رابط کاربری Classic Edge، متغیرها را از یک بار XML یا JSON استخراج کنید.

نمونه ها

این نمونه کد خط مشی نحوه استخراج متغیرها از انواع مصنوعات زیر را نشان می دهد:

GitHub

این پیوندها به نمونه‌های پراکسی API فعال اشاره می‌کنند که می‌توانید آن‌ها را مستقر کرده و روی Edge اجرا کنید. آنها از ExtractVariables استفاده می کنند و در مخزن نمونه های پلتفرم Apigee در GitHub قرار دارند. README ها نحوه استفاده از ExtractVariables در هر مورد و نحوه استقرار و اجرای هر نمونه را توضیح می دهند.

URI ها

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

نمونه کد خط مشی بالا را در نظر بگیرید. عنصر <URIPath> به خط مشی ExtractVariables می گوید که اطلاعات را از مسیر URI استخراج کند. عنصر <Pattern> الگوی مورد استفاده در مسیر URI را مشخص می کند. این الگو به‌عنوان یک الگوی ساده در نظر گرفته می‌شود که بریس‌های فرفری نشان‌دهنده بخش متغیر مسیر URI هستند.

نام متغیری که قرار است تنظیم شود با مقدار مشخص شده در عنصر <VariablePrefix> و همچنین مقدار محصور شده در پرانتزهای مجعد {} در عنصر <Pattern> تعیین می شود. این دو مقدار توسط یک نقطه میانی به هم متصل می شوند که به عنوان مثال یک نام متغیر از urirequest.id ایجاد می شود. اگر عنصر <VariablePrefix> وجود نداشته باشد، نام متغیر فقط مقدار محصور شده در پرانتزهای فرفری است.

نمونه کد خط مشی بالا را در نظر بگیرید که با درخواست ورودی زیر کار می کند:

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

فرض کنید مسیر پایه برای پروکسی API /svc1 است. وقتی Apigee Edge کد خط مشی ExtractVariables بالا را برای این درخواست ورودی اعمال می کند، متغیر urirequest.id را روی 12797282 تنظیم می کند. بعد از اینکه Apigee Edge سیاست را اجرا کرد، سیاست‌ها یا کدهای بعدی در جریان پردازش می‌توانند به متغیری به نام urirequest.id مراجعه کنند تا مقدار رشته 12797282 را دریافت کنند.

به عنوان مثال، خط مشی AssignMessage زیر مقدار آن متغیر را در بارگذاری پیام درخواستی جدید جاسازی می کند:

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

پارامترهای پرس و جو

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

نمونه کد خط مشی بالا را در نظر بگیرید که با درخواست ورودی زیر کار می کند:

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

وقتی Apigee Edge کد خط مشی ExtractVariables بالا را برای این درخواست ورودی اعمال می کند، متغیر queryinfo.dbncode روی 88271 تنظیم می کند. پس از اجرای Apigee Edge، خط مشی ها یا کدهای بعدی در جریان پردازش می توانند به متغیر queryinfo.dbncode مراجعه کنند تا مقدار رشته 88271 را دریافت کنند.

اکنون می توانید به متغیر queryinfo.dbncode در پروکسی خود دسترسی داشته باشید. به عنوان مثال، خط مشی AssignMessage زیر آن را در بارگذاری درخواست کپی می کند:

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

چند پارامتر

<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 شما به شما امکان می دهد چندین پارامتر پرس و جو را با یک نام مشخص کنید. می توانید از این خط مشی برای استخراج مقدار چند نمونه از پارامتر پرس و جو "w" استفاده کنید. برای ارجاع به این پارامترهای پرس و جو در خط مشی ExtractVariables، از ایندکس ها استفاده می کنید، که در آن اولین نمونه از پارامتر پرس و جو هیچ شاخصی ندارد، نمونه دوم در شاخص 2، سوم در شاخص 3 و غیره است.

نمونه کد خط مشی بالا را در نظر بگیرید که با درخواست ورودی زیر کار می کند:

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

وقتی Apigee Edge کد خط مشی ExtractVariables بالا را برای این درخواست دریافتی اعمال می کند، متغیر queryinfo.firstWeather را روی Boston و متغیر queryInfo.secondWeather را در Chicago تنظیم می کند.

اکنون می توانید به متغیر queryinfo.firstWeather و queryinfo.secondWeather در پروکسی خود دسترسی داشته باشید. به عنوان مثال، خط مشی AssignMessage زیر آن را در بارگذاری درخواست کپی می کند:

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

سرصفحه ها

<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 شما از توکن های حامل OAuth v2.0 استفاده می کند. نمونه کد خط مشی بالا را در نظر بگیرید که با درخواستی حاوی نشانه OAuth v2.0 است که شامل سرصفحه ای مانند این است: Authorization: Bearer TU08xptfFfeM7aS0xHqlxTgEAdAM.

به عنوان طراح API، فرض کنید که می خواهید از مقدار توکن (اما نه کل هدر) به عنوان یک کلید در جستجوی حافظه پنهان استفاده کنید. می توانید از کد خط مشی ExtractVariables در بالا برای استخراج توکن استفاده کنید.

وقتی Apigee Edge کد خط مشی ExtractVariables را در بالا به این هدر اعمال می کند، متغیر clientrequest.oauthtoken را روی TU08xptfFfeM7aS0xHqlxTgEAdAM تنظیم می کند.

اکنون می توانید به متغیر clientrequest.oauthtoken در پروکسی خود دسترسی داشته باشید. به عنوان مثال، خط مشی AssignMessage زیر آن را در بارگذاری درخواست کپی می کند:

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

بار پاسخ JSON زیر را در نظر بگیرید:

{
  "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 کد خط‌مشی ExtractVariables بالا را برای این پیام JSON اعمال می‌کند، دو متغیر را تنظیم می‌کند: geocoderesponse.latitude و geocoderesponse.longitude . هر دو متغیر از یک پیشوند متغیر geocoderesponse استفاده می کنند. پسوند این متغیرها به صراحت توسط ویژگی name عنصر <Variable> مشخص می شود.

متغیر geocoderesponse.latitude مقدار 37.42291810 را دریافت می کند. متغیر geocoderesponse.longitude مقدار -122.08542120 را دریافت می کند.

اکنون می توانید به متغیر geocoderesponse.latitude در پروکسی خود دسترسی داشته باشید. به عنوان مثال، خط مشی AssignMessage زیر آن را در یک هدر به نام "latitude" در پاسخ کپی می کند:

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

بار پاسخ XML زیر را در نظر بگیرید:

<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 کد خط مشی ExtractVariables را در بالا به این پیام XML اعمال می کند، سه متغیر تنظیم می کند: directionsresponse.travelmode, directionsresponse.duration ، و directionsresponse.timeunit . همه متغیرها از پیشوند متغیر یکسانی جهت directionsresponse استفاده می کنند. پسوند این متغیرها به صراحت توسط ویژگی name عنصر <Variable> مشخص می شود.

متغیر directionsresponse.travelmode مقدار DRIVING را دریافت می کند. متغیر directionsresponse.duration مقدار 19 را دریافت می کند. متغیر directionsresponse.timeunit مقدار minutes را دریافت می کند.

اکنون می توانید به متغیر directionresponse.travelmode در پروکسی خود دسترسی داشته باشید. به عنوان مثال، خط مشی AssignMessage زیر آن را در یک هدر به نام "tmode" در پاسخ کپی می کند:

<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

توسعه‌دهندگان API پروکسی‌های API را می‌سازند که بر اساس محتوای پیام‌ها، از جمله سرصفحه‌ها، مسیرهای URI، بارهای پرداخت و پارامترهای پرس و جو، رفتار متفاوتی دارند. اغلب، پروکسی بخشی از این محتوا را برای استفاده در یک دستور شرط استخراج می کند. برای این کار از خط مشی ExtractVariables استفاده کنید.

هنگام تعریف خط مشی ExtractVariables، می توانید انتخاب کنید:

  • نام متغیرهایی که قرار است تنظیم شوند
  • منبع متغیرها
  • چند متغیر استخراج و تنظیم شود

هنگام اجرا، خط مشی یک الگوی متنی را به محتوا اعمال می کند و پس از یافتن مطابقت، مقدار متغیر تعیین شده را با محتوا تنظیم می کند. سپس سایر خط‌مشی‌ها و کدها می‌توانند آن متغیرها را برای فعال کردن رفتار پویا یا ارسال داده‌های تجاری به Edge API Analytics مصرف کنند.

برای اینکه ببینید چگونه می‌توان از ExtractVariables برای ساخت گزارش‌های Analytics مبتنی بر محتوا استفاده کرد، به تحلیل محتوای پیام API با استفاده از تجزیه و تحلیل سفارشی مراجعه کنید.

دامنه

متغیرهای تنظیم شده با خط مشی ExtractVariables دارای دامنه جهانی هستند. یعنی پس از اینکه سیاست ExtractVariables یک متغیر جدید را تعریف کرد، می توانید از هر خط مشی یا کدی در هر مرحله از جریان (که بعد از سیاست ExtractVariables اجرا می شود) به آن متغیر دسترسی داشته باشید. این شامل:

  • PreFlow: ProxyEndpoint و TargetEndpoint (درخواست و پاسخ)
  • PostFlow: ProxyEndpoint و TargetEndpoint (درخواست و پاسخ)
  • PostClientFlow: ProxyEndpoint (فقط پاسخ، با استفاده از خط مشی ثبت پیام )
  • جریان خطا

درباره تطبیق و ایجاد متغیر

خط مشی ExtractVariables اطلاعات را از یک درخواست یا پاسخ استخراج می کند و آن اطلاعات را در یک متغیر می نویسد. برای هر نوع اطلاعاتی که می توانید استخراج کنید، مانند مسیر URI یا داده های XML، الگوی مطابقت و نام متغیر مورد استفاده برای نگهداری اطلاعات استخراج شده را مشخص می کنید.

با این حال، نحوه عملکرد تطبیق الگو به منبع استخراج بستگی دارد. بخش‌های زیر دو دسته اصلی اطلاعاتی را که می‌توانید استخراج کنید، توضیح می‌دهد.

تطبیق مسیرهای URI، پارامترهای پرس و جو، هدرها، پارامترهای فرم و متغیرها

هنگام استخراج اطلاعات از مسیر URI، پارامترهای پرس و جو، سرصفحه ها، پارامترهای فرم و متغیرها، از تگ <Pattern> برای تعیین یک یا چند الگو برای مطابقت استفاده می کنید. به عنوان مثال، مثال خط مشی زیر یک الگوی منطبق برای مسیر URI را نشان می دهد:

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

در این مثال، متغیر urirequest.pathSeg روی هر چیزی که پس از "/a/" در پسوند proxy.path ظاهر می شود، تنظیم می شود. برای مثال، فرض کنید مسیر پایه برای پروکسی API شما /basepath/v1 است. با یک درخواست ورودی به http://myCo.com/basepath/v1/a/b ، متغیر روی "b" تنظیم می شود.

تعیین الگوهای متعدد

شما می توانید الگوهای متعددی را برای مطابقت، مطابق با برچسب های <Pattern> مشخص کنید، که در آن:

  • همه الگوها برای مطابقت آزمایش می شوند.
  • اگر هیچ یک از الگوها مطابقت نداشته باشد، خط مشی کاری انجام نمی دهد و متغیر(های) ایجاد نمی شود.
  • اگر بیش از یک الگو مطابقت داشته باشد، از الگوی با طولانی ترین بخش های مسیر برای استخراج استفاده می شود.
  • اگر دو الگوی منطبق دارای بخش‌های طولانی‌ترین مسیر مشابه باشند، از الگوی مشخص‌شده در ابتدا برای استخراج استفاده می‌شود.

در مثال بعدی، شما یک خط مشی ایجاد می کنید که شامل سه الگوی منطبق برای مسیر URI است:

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

فرض کنید، برای یک پروکسی API با مسیر پایه /basepath/v1 ، URL درخواست ورودی به پروکسی API به این شکل است:

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

در این مثال، الگوی اول با URI مطابقت دارد و متغیر urirequest.pathSeg روی "b" تنظیم شده است.

اگر URL درخواست این است:

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

... سپس الگوی سوم مطابقت دارد و متغیر urirequest.pathSeg روی "d" تنظیم می شود.

تعیین الگوهایی با متغیرهای متعدد

می توانید چندین متغیر را در الگوی منطبق مشخص کنید. به عنوان مثال، شما یک الگوی منطبق با دو متغیر را مشخص می کنید:

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

مجدداً یک پروکسی API با مسیر پایه /basepath/v1 برای URL درخواست ورودی فرض کنید:

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

... متغیر urirequest.pathSeg1 روی "b" و متغیر urirequest.pathSeg2 روی "d" تنظیم شده است.

تطبیق چندین نمونه در الگو

همچنین می توانید الگوها را زمانی که چندین نمونه از یک مورد با نام مشابه وجود دارد مطابقت دهید. به عنوان مثال، می‌توانید درخواستی ارسال کنید که حاوی چندین پارامتر کوئری یا چندین سرصفحه با یک نام باشد. درخواست زیر شامل دو پارامتر پرس و جو به نام "w" است:

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

برای ارجاع به این پارامترهای پرس و جو در خط مشی ExtractVariables، از ایندکس ها استفاده می کنید، که در آن اولین نمونه از پارامتر query فاقد ایندکس است، نمونه دوم در شاخص 2، سوم در شاخص 3 و غیره است. به عنوان مثال، خط مشی زیر مقدار را استخراج می کند. از دومین پارامتر پرس و جو با نام "w" در درخواست:

<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 روی "2" تنظیم شده است. اگر دومین پارامتر query از درخواست حذف شود، متغیر urirequest.secondW خالی است. هر زمان که چندین مورد با نام یکسان در درخواست وجود داشت از نمایه سازی استفاده کنید.

استفاده از کاراکترهای خاص در الگو

هنگام تطبیق مسیرهای URI، می توانید از کاراکترهای عام "*" و "**" در الگو استفاده کنید، جایی که:

  • "*" با هر بخش از مسیر مطابقت دارد
  • "**" با چندین بخش از مسیر مطابقت دارد

به عنوان مثال، الگوهایی را برای عنصر <URIPath> مطابق شکل زیر مشخص می کنید:

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

الگوی اول درخواست‌ها را با پسوندهای مسیر (بخشی از مسیر URI که مسیر پایه را دنبال می‌کند) مطابقت می‌دهد، مانند «/a/b/c»، «/a/foo/bar»، و غیره. الگوی دوم با هر تعداد از بخش‌های مسیر پس از آن مطابقت دارد. «/a/»، مانند «/a/foo/bar/baz/c»، و همچنین «/a/b/c» و «/a/foo/bar».

هنگام تعیین الگوها برای پارامترهای پرس و جو، سرصفحه ها و پارامترهای فرم، کاراکتر "*" تعیین می کند که با هر تعداد کاراکتر مطابقت داشته باشد. به عنوان مثال، هنگام تطبیق یک هدر، الگو را به صورت زیر مشخص کنید:

*;charset={رمزگذاری}

این الگو با مقادیر "text/xml;charset=UTF-16" و "application/xml;charset=ASCII" مطابقت دارد.

اگر مقدار ارسال شده به خط مشی ExtractVariables حاوی یک کاراکتر خاص مانند "{" باشد، از نویسه "%" برای فرار از آن استفاده کنید. مثال زیر از کاراکترهای "{" و "}" در الگو فرار می کند زیرا آنها به عنوان کاراکترهای تحت اللفظی در مقدار پارامتر query استفاده می شوند:

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

در این مثال، الگو با مقدار "{user} Steve" مطابقت دارد اما با مقدار "user Steve" مطابقت ندارد.

تطبیق JSON و XML

هنگام استخراج داده ها از JSON و XML، یک یا چند تگ <Variable> را در خط مشی مشخص می کنید. تگ <Variable> نام متغیر مقصد را که اطلاعات استخراج شده در آن ذخیره می شود و JsonPath (JSON) یا XPATH (XML) را برای اطلاعات استخراج شده مشخص می کند.

همه تگ های <Variable> در خط مشی ارزیابی می شوند، به طوری که می توانید چندین متغیر را از یک خط مشی واحد پر کنید. اگر تگ <Variable> به یک فیلد معتبر در JSON یا XML ارزیابی نشود، متغیر مربوطه ایجاد نمی‌شود.

مثال زیر یک خط مشی ExtractVariables را نشان می دهد که دو متغیر از بدنه 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>

نوشتن روی یک متغیر در چندین مکان

در انتخاب نام متغیرها برای تنظیم دقت کنید. این خط مشی به صورت متوالی از اولین الگوی استخراج تا آخرین الگو اجرا می شود. اگر خط مشی یک مقدار را برای یک متغیر از چندین مکان بنویسد، آخرین نوشتن در خط مشی مقدار متغیر را تعیین می کند. (ممکن است این همان چیزی باشد که شما می خواهید.)

به عنوان مثال، شما می خواهید یک مقدار توکن استخراج کنید که می تواند در یک پارامتر query یا در یک هدر ارسال شود، همانطور که در زیر نشان داده شده است:

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

کنترل اتفاقاتی که در صورت عدم تطابق رخ می دهد

اگر الگو مطابقت نداشته باشد، متغیر مربوطه ایجاد نمی شود. بنابراین، اگر سیاست دیگری به متغیر ارجاع دهد، می تواند باعث خطا شود.

یک گزینه این است که <IgnoreUnresolvedVariables> را روی true در یک خط مشی تنظیم کنید که به متغیر ارجاع می دهد تا خط مشی را پیکربندی کند تا هر متغیر غیرقابل حلی را به عنوان یک رشته خالی (تهی) در نظر بگیرد:

<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>

مرجع عنصر

مرجع عنصر عناصر و ویژگی های خط مشی ExtractVariables را توصیف می کند.

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

<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">

جدول زیر ویژگی هایی را توصیف می کند که برای همه عناصر اصلی خط مشی مشترک هستند:

صفت توضیحات پیش فرض حضور
name

نام داخلی سیاست. مقدار مشخصه name می تواند شامل حروف، اعداد، فاصله، خط تیره، زیرخط و نقطه باشد. این مقدار نمی تواند بیش از 255 کاراکتر باشد.

در صورت تمایل، از عنصر <DisplayName> برای برچسب گذاری خط مشی در ویرایشگر پروکسی UI مدیریت با نامی به زبان طبیعی دیگر استفاده کنید.

N/A مورد نیاز
continueOnError

برای بازگرداندن خطا در صورت شکست خط مشی، روی false تنظیم کنید. این رفتار مورد انتظار برای اکثر سیاست ها است.

روی true تنظیم کنید تا اجرای جریان حتی پس از شکست خط مشی ادامه یابد.

نادرست اختیاری
enabled

برای اجرای خط مشی روی true تنظیم کنید.

برای خاموش کردن خط مشی، روی false تنظیم کنید. این سیاست حتی اگر به یک جریان وابسته باشد اجرا نخواهد شد.

درست است اختیاری
async

این ویژگی منسوخ شده است.

نادرست منسوخ شده است

عنصر <DisplayName>

علاوه بر ویژگی name برای برچسب‌گذاری خط‌مشی در ویرایشگر پروکسی رابط کاربری مدیریت با نامی متفاوت و به زبان طبیعی، از آن استفاده کنید.

<DisplayName>Policy Display Name</DisplayName>
پیش فرض

N/A

اگر این عنصر را حذف کنید، از مقدار ویژگی name خط مشی استفاده می شود.

حضور اختیاری
تایپ کنید رشته

عنصر <منبع>

(اختیاری) متغیری را که باید تجزیه شود را مشخص می کند. مقدار <Source> به طور پیش فرض برای message است. مقدار message به زمینه حساس است. در یک جریان درخواست، message به پیام درخواست حل می شود. در یک جریان پاسخ، message به پیام پاسخ حل می شود.

در حالی که اغلب از این خط مشی برای استخراج اطلاعات از یک درخواست یا پیام پاسخ استفاده می کنید، می توانید از آن برای استخراج اطلاعات از هر متغیری استفاده کنید. برای مثال، می‌توانید از آن برای استخراج اطلاعات از یک موجودیت ایجاد شده توسط خط‌مشی AccessEntity ، از داده‌های بازگردانده شده توسط خط‌مشی Service Callout ، یا استخراج اطلاعات از یک شی XML یا JSON استفاده کنید.

اگر <Source> قابل حل نباشد، یا به یک نوع غیر پیام حل شود، خط مشی پاسخ نمی دهد.

<Source clearPayload="true|false">request</Source>
پیش فرض: پیام
حضور: اختیاری
نوع: رشته

صفات

صفت توضیحات پیش فرض حضور تایپ کنید
clearPayload

اگر می‌خواهید پس از استخراج داده‌ها، محموله مشخص شده در <Source> را پاک کنید، روی true تنظیم کنید.

تنها در صورتی از گزینه <clearPayload> استفاده کنید که پس از اجرای ExtractVariables به پیام منبع نیاز نباشد. تنظیم روی true حافظه استفاده شده توسط پیام را آزاد می کند.

نادرست

اختیاری بولی

عنصر <VariablePrefix>

(اختیاری) نام کامل متغیر با پیوستن به <VariablePrefix> ، یک نقطه، و نامی که در {پرانتزهای فرفری} در عنصر <Pattern> یا عنصر <Variable> تعریف می‌کنید ایجاد می‌شود. به عنوان مثال: myprefix.id ، myprefix.dbncode ، یا myprefix.oauthtoken.

<VariablePrefix>myprefix</VariablePrefix>

به عنوان مثال، فرض کنید مقدار نام "user" باشد.

  • اگر <VariablePrefix> مشخص نشده باشد، مقادیر استخراج شده به متغیری به نام user اختصاص داده می شود.
  • اگر <VariablePrefix> به عنوان myprefix مشخص شود، مقادیر استخراج شده به متغیری به نام myprefix.user اختصاص داده می شود.
پیش فرض: N/A
حضور: اختیاری
نوع: رشته

عنصر <IgnoreUnresolvedVariables>

(اختیاری) روی true تنظیم کنید تا هر متغیر غیرقابل حلی را به عنوان یک رشته خالی (تهی) در نظر بگیرید. اگر می‌خواهید خط‌مشی زمانی که متغیر ارجاع‌شده غیرقابل حل است، خطایی ایجاد کند، آن را روی false تنظیم کنید.

<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
پیش فرض: نادرست
حضور: اختیاری
نوع: بولی

اگر مرجع XPath در <XMLPayload> حل نشده باشد، خط مشی خطای زیر را ایجاد می کند:

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

عنصر <URIPath>

(اختیاری است، اما برای اطلاعات بیشتر به ردیف Presence در جدول زیر مراجعه کنید.) مقداری را از پسوند proxy.path یک پیام منبع درخواست استخراج می کند. مسیر اعمال شده به الگو، پسوند proxy.path است که شامل مسیر پایه برای پروکسی API نمی شود. اگر پیام منبع به یک نوع پیام پاسخ داده شود، این عنصر هیچ کاری انجام نمی دهد.

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

امکان استفاده از چندین عنصر <Pattern> وجود دارد:

<URIPath>
   <Pattern ignoreCase="false">/accounts/{id}</Pattern>
   <Pattern ignoreCase="false">/accounts/{id}/transactions/{index}</Pattern>
</URIPath>
پیش فرض: N/A
حضور: اختیاری. با این حال، باید حداقل یکی از موارد زیر را وارد کنید: <URIPath> ، <QueryParam> ، <Header> ، <FormParam> ، <JSONPayload> ، یا <XMLPayload>.
نوع: N/A

صفات

صفت توضیحات پیش فرض حضور تایپ کنید
ignorecase برای نادیده گرفتن حروف کوچک هنگام تطبیق پدر مشخص می کند.

نادرست

اختیاری بولی

عنصر <QueryParam>

(اختیاری است، اما برای اطلاعات بیشتر به ردیف حضور در جدول زیر مراجعه کنید.) مقداری را از پارامتر پرس و جوی مشخص شده پیام منبع درخواست استخراج می کند. اگر پیام منبع به یک نوع پیام پاسخ داده شود، این عنصر هیچ کاری انجام نمی دهد.

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

اگر چندین پارامتر پرس و جو دارای نام یکسانی هستند، برای ارجاع به پارامترها از شاخص ها استفاده کنید:

<QueryParam name="w.2">
   <Pattern ignoreCase="true">{secondW}</Pattern>
</QueryParam>
پیش فرض: N/A
حضور: اختیاری. با این حال، باید حداقل یکی از موارد زیر را وارد کنید: <URIPath> ، <QueryParam> ، <Header> ، <FormParam> ، <JSONPayload> ، یا <XMLPayload>.
نوع: N/A

صفات

صفت توضیحات پیش فرض حضور تایپ کنید
نام نام پارامتر پرس و جو را مشخص می کند. اگر چند پارامتر پرس و جو دارای نام یکسانی هستند، از ارجاع نمایه شده استفاده کنید، جایی که اولین نمونه از پارامتر پرس و جو فاقد ایندکس است، نمونه دوم در شاخص 2، سوم در شاخص 3 و غیره است.

N/A

مورد نیاز رشته

عنصر <Header>

(اختیاری است، اما برای اطلاعات بیشتر به ردیف حضور در جدول زیر مراجعه کنید.) مقداری را از هدر HTTP مشخص شده درخواست یا پیام پاسخ مشخص شده استخراج می کند. اگر چندین هدر یک نام داشته باشند، مقادیر آنها در یک آرایه ذخیره می شود.

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

اگر چندین هدر یک نام دارند، از شاخص ها برای ارجاع سرصفحه های مجزا در آرایه استفاده کنید:

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

یا موارد زیر را برای لیست کردن تمام سرصفحه های آرایه:

<Header name="myHeader.values">
   <Pattern ignoreCase="true">{myHeaders}</Pattern>
</Header>
پیش فرض: N/A
حضور: اختیاری. با این حال، باید حداقل یکی از موارد زیر را وارد کنید: <URIPath> ، <QueryParam> ، <Header> ، <FormParam> ، <JSONPayload> ، یا <XMLPayload>.
نوع: N/A

صفات

صفت توضیحات پیش فرض حضور تایپ کنید
نام نام هدری را که مقدار را از آن استخراج می کنید مشخص می کند. اگر چندین سرصفحه دارای نام یکسانی هستند، از ارجاع نمایه شده استفاده کنید، که در آن نمونه اول سرصفحه فاقد ایندکس، دومی در اندیس 2، سومی در نمایه 3، و غیره است. از .values ​​برای دریافت همه هدرهای آرایه استفاده کنید.

N/A

مورد نیاز رشته

عنصر <FormParam>

(اختیاری است، اما برای اطلاعات بیشتر به ردیف حضور در جدول زیر مراجعه کنید.) مقداری را از پارامتر فرم مشخص شده درخواست یا پیام پاسخ مشخص شده استخراج می کند. پارامترهای فرم تنها زمانی قابل استخراج هستند که هدر Content-Type پیام مشخص شده application/x-www-form-urlencoded باشد.

<FormParam name="greeting">
    <Pattern>hello {user}</Pattern>
</FormParam>
پیش فرض: N/A
حضور: اختیاری. با این حال، باید حداقل یکی از موارد زیر را وارد کنید: <URIPath> ، <QueryParam> ، <Header> ، <FormParam> ، <JSONPayload> ، یا <XMLPayload>.
نوع: N/A

صفات

صفت توضیحات پیش فرض حضور تایپ کنید
نام نام پارامتر فرم که مقدار را از آن استخراج می کنید.

N/A

مورد نیاز رشته

عنصر <Variable>

(اختیاری است، اما برای اطلاعات بیشتر به ردیف Presence در جدول زیر مراجعه کنید.) نام متغیری را مشخص می کند که از آن مقداری استخراج شود.

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

برای استخراج دو مقدار از متغیر:

<Variable name="myVar">
   <Pattern>hello {firstName} {lastName}</Pattern>
</Variable>
پیش فرض: N/A
حضور: اختیاری. با این حال، باید حداقل یکی از موارد زیر را وارد کنید: <URIPath> ، <QueryParam> ، <Header> ، <FormParam> ، <JSONPayload> ، یا <XMLPayload>.
نوع: N/A

صفات

صفت توضیحات پیش فرض حضور تایپ کنید
نام نام متغیری که از آن مقدار استخراج می شود.

N/A

مورد نیاز رشته

عنصر <JSONPayload>

(اختیاری است، اما برای اطلاعات بیشتر به ردیف Presence در جدول زیر مراجعه کنید.) پیامی با فرمت JSON را مشخص می کند که مقدار متغیر از آن استخراج می شود. استخراج JSON فقط زمانی انجام می‌شود که هدر نوع محتوای پیام application/json باشد.

<JSONPayload>
   <Variable name="name" type="string">
      <JSONPath>{example}</JSONPath>
   </Variable>
</JSONPayload>
پیش فرض: N/A
حضور: اختیاری. با این حال، باید حداقل یکی از موارد زیر را وارد کنید: <URIPath> ، <QueryParam> ، <Header> ، <FormParam> ، <JSONPayload> ، یا <XMLPayload>.
نوع: N/A

عنصر <JSONPayload>/<Variable>

(در عنصر JSONPayload لازم است.) متغیری را که در آن مقدار استخراج شده اختصاص داده شده است، مشخص می کند. می توانید چندین تگ <Variable> را در عنصر <JSONPayload> اضافه کنید تا چندین متغیر را پر کنید.

<Variable name="name" type="string">
   <JSONPath>{example}</JSONPath>
</Variable>
پیش فرض: N/A
حضور: در عنصر JSONPayload مورد نیاز است.
نوع: N/A

صفات

صفت توضیحات پیش فرض حضور تایپ کنید
نام

نام متغیری را که مقدار استخراج شده به آن اختصاص داده می شود را مشخص می کند.

نام

مورد نیاز رشته
نوع نوع داده مقدار متغیر را مشخص می کند. N/A اختیاری

رشته انتخاب از:

  • رشته
  • بولی
  • عدد صحیح
  • طولانی
  • شناور
  • دو برابر کردن
  • nodeset (بخش JSON را برمی گرداند)

عنصر <JSONPayload>/<متغیر>/<JSONPath>

(در عنصر JSONPayload:Variable لازم است.) مسیر JSON مورد استفاده برای استخراج یک مقدار از یک پیام با فرمت JSON را مشخص می کند.

<Variable name="name">
   <JSONPath>$.rss.channel.title</JSONPath>
</Variable>
پیش فرض: N/A
حضور: مورد نیاز
نوع: رشته

عنصر <XMLPayload>

(اختیاری است، اما برای اطلاعات بیشتر به ردیف Presence در جدول زیر مراجعه کنید.) پیام با قالب XML را مشخص می کند که مقدار متغیر از آن استخراج می شود. محموله‌های XML تنها زمانی استخراج می‌شوند که هدر Content-Type محتوا text/xml ، application/xml یا application/*+xml باشد.

<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>
پیش فرض: N/A
حضور: اختیاری. با این حال، باید حداقل یکی از موارد زیر را وارد کنید: <URIPath> ، <QueryParam> ، <Header> ، <FormParam> ، <JSONPayload> ، یا <XMLPayload>.
نوع: N/A

صفات

صفت توضیحات پیش فرض حضور تایپ کنید
stopPayloadProcessing

برای توقف ارزیابی XPath پس از پر شدن یک متغیر، روی true تنظیم کنید. این به این معنی است که فقط یک متغیر با خط مشی پر شده است.

نادرست

اختیاری بولی

عنصر <XMLPayload>/<Namespaces>

(اختیاری) فضای نام مورد استفاده در ارزیابی XPath را مشخص می کند. اگر از فضاهای نام در عبارات XPath خود استفاده می کنید، باید فضاهای نام را در اینجا اعلام کنید، همانطور که در مثال زیر نشان داده شده است.

<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 خود استفاده نمی کنید، می توانید عنصر <Namespaces> را حذف یا نظر دهید، همانطور که مثال زیر نشان می دهد:

<XMLPayload stopPayloadProcessing="false">
  <!-- <Namespaces/> -->
  <Variable name="legName" type="string">
    <XPath>/Directions/route/leg/name</XPath>
  </Variable>
</XMLPayload>
پیش فرض: N/A
حضور: اختیاری
نوع: رشته

صفات

صفت توضیحات پیش فرض حضور تایپ کنید
prefix

پیشوند فضای نام.

N/A

مورد نیاز رشته

عنصر <XMLPayload>/<Variable>

(اختیاری) متغیری را مشخص می کند که مقدار استخراج شده به آن اختصاص داده شود.

<Variable name="name" type="boolean">
   <XPath>/test/example</XPath>
</Variable>
پیش فرض: N/A
حضور: اختیاری
نوع: N/A

صفات

صفت توضیحات پیش فرض حضور تایپ کنید
نام

نام متغیری را که مقدار استخراج شده به آن اختصاص داده می شود را مشخص می کند.

نام

مورد نیاز رشته
نوع نوع داده مقدار متغیر را مشخص می کند. بولی اختیاری

رشته انتخاب از:

  • رشته
  • بولی
  • عدد صحیح
  • طولانی
  • شناور
  • دو برابر کردن
  • nodeset (یک قطعه XML را برمی گرداند)

عنصر <XMLPayload>/<Variable>/<XPath>

(در عنصر XMLPayload:Variable لازم است.) XPath تعریف شده برای متغیر را مشخص می کند. فقط عبارات XPath 1.0 پشتیبانی می شوند.

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

مثال با فضای نام. اگر از فضاهای نام در عبارات XPath خود استفاده می کنید، باید فضاهای نام را در بخش <XMLPayload><Namespaces> خط مشی اعلام کنید.

<Variable name="name" type="boolean">
   <XPath>/foo:test/foo:example</XPath>
</Variable>
پیش فرض: N/A
حضور: مورد نیاز
نوع: رشته

مرجع خطا

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Cause Fix
steps.extractvariables.ExecutionFailed 500

This error occurs when:

  • The input payload (JSON, XML) is empty.
  • The input (JSON, XML, etc) passed to the policy is invalid or malformed.
steps.extractvariables.ImmutableVariable 500 A variable used in the policy is immutable. The policy was unable to set this variable.
steps.extractvariables.InvalidJSONPath 500 This error occurs if an invalid JSON path is used in the JSONPath element of the policy. For example, if a JSON payload does not have the object Name, but you specify Name as the path in the policy, then this error occurs.
steps.extractvariables.JsonPathParsingFailure 500 This error occurs when the policy is unable to parse a JSON path and extract data from the flow variable specified in Source element. Typically this happens if the flow variable specified in the Source element does not exist in the current flow.
steps.extractvariables.SetVariableFailed 500 This error occurs if the policy could not set the value to a variable. The error generally happens if you try to assign values to multiple variables whose names start with the same words in a nested dot-separated format.
steps.extractvariables.SourceMessageNotAvailable 500 This error occurs if the message variable specified in the Source element of the policy is either:
  • Out of scope (not available in the specific flow where the policy is being executed) or
  • Can't be resolved (is not defined)
steps.extractvariables.UnableToCast 500 This error occurs if the policy was unable to cast the extracted value to a variable. Typically this happens if you attempt to set the value of one data type to a variable of another data type.

Deployment errors

These errors can occur when you deploy a proxy containing this policy.

Error name Cause Fix
NothingToExtract If the policy does not have any of the elements URIPath, QueryParam, Header, FormParam, XMLPayload, or JSONPayload, the deployment of the API Proxy fails, because there's nothing to extract.
NONEmptyPrefixMappedToEmptyURI This error occurs if the policy has a prefix defined in the Namespace element under the XMLPayload element, but no URI is defined.
DuplicatePrefix This error occurs if the policy has the same prefix defined more than once in the Namespace element under the XMLPayload element.
NoXPathsToEvaluate If the policy does not have the XPath element within the XMLPayload element, then the deployment of the API proxy fails with this error.
EmptyXPathExpression If the policy has an empty XPath expression within the XMLPayload element, then the deployment of the API proxy fails.
NoJSONPathsToEvaluate If the policy does not have the JSONPath element within the JSONPayload element, then the deployment of the API proxy fails with this error.
EmptyJSONPathExpression If the policy has an empty XPath expression within the XMLPayload element, then the deployment of the API proxy fails.
MissingName If the policy does not have the name attribute in any of the policy elements like QueryParam, Header, FormParam or Variable, where it is required, then the deployment of the API proxy fails.
PatternWithoutVariable If the policy does not have a variable specified within the Pattern element, then the deployment of the API proxy fails. The Pattern element requires the name of the variable in which extracted data will be stored.
CannotBeConvertedToNodeset If the policy has an XPath expression where the Variable type is defined as nodeset, but the expression cannot be converted to nodeset, then the deployment of the API proxy fails.
JSONPathCompilationFailed The policy could not compile a specified JSON Path.
InstantiationFailed The policy could not be instantiated.
XPathCompilationFailed If the prefix or the value used in the XPath element is not part of any of the declared namespaces in the policy, then the deployment of the API proxy fails.
InvalidPattern If the Pattern element definition is invalid in any of the elements like URIPath, QueryParam, Header, FormParam, XMLPayload or JSONPayload within the policy, then the deployment of the API proxy fails.

Fault variables

These variables are set when this policy triggers an error at runtime. For more information, see What you need to know about policy errors.

Variables Where Example
fault.name="fault_name" fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. fault.name = "SourceMessageNotAvailable"
extractvariables.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. extractvariables.EV-ParseJsonResponse.failed = true

Example error response

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

Example fault rule

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

طرحواره ها

موضوعات مرتبط

محتوای پیام API را با استفاده از تجزیه و تحلیل سفارشی تجزیه و تحلیل کنید

مرجع متغیرها