سیاست 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
حضور: مورد نیاز
نوع: رشته

مرجع خطا

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

خطاهای زمان اجرا

این خطاها ممکن است هنگام اجرای سیاست رخ دهند.

کد خطا وضعیت HTTP علت رفع کنید
steps.extractvariables.ExecutionFailed 500

این خطا زمانی رخ می دهد که:

  • محموله ورودی (JSON، XML) خالی است.
  • ورودی (JSON، XML، و غیره) که به خط‌مشی ارسال می‌شود، نامعتبر یا نادرست است.
steps.extractvariables.ImmutableVariable 500 متغیر مورد استفاده در خط مشی تغییرناپذیر است. خط مشی قادر به تنظیم این متغیر نبود.
steps.extractvariables.InvalidJSONPath 500 اگر از یک مسیر JSON نامعتبر در عنصر JSONPath خط مشی استفاده شود، این خطا رخ می دهد. به عنوان مثال، اگر یک بار JSON دارای Name شیء نباشد، اما Name به عنوان مسیر در خط مشی مشخص کنید، این خطا رخ می دهد.
steps.extractvariables.JsonPathParsingFailure 500 این خطا زمانی رخ می دهد که خط مشی قادر به تجزیه یک مسیر JSON و استخراج داده ها از متغیر جریان مشخص شده در عنصر Source نباشد. به طور معمول این اتفاق می افتد اگر متغیر جریان مشخص شده در عنصر Source در جریان فعلی وجود نداشته باشد.
steps.extractvariables.SetVariableFailed 500 اگر خط مشی نتواند مقدار یک متغیر را تنظیم کند، این خطا رخ می دهد. این خطا معمولاً در صورتی اتفاق می‌افتد که بخواهید مقادیری را به چندین متغیر اختصاص دهید که نام آنها با کلمات مشابه در قالب جدا شده از نقطه تو در تو آغاز می‌شود.
steps.extractvariables.SourceMessageNotAvailable 500 این خطا در صورتی رخ می دهد که متغیر پیام مشخص شده در عنصر Source سیاست یکی از این موارد باشد:
  • خارج از محدوده (در جریان خاصی که سیاست در آن اجرا می شود موجود نیست) یا
  • قابل حل نیست (تعریف نشده است)
steps.extractvariables.UnableToCast 500 این خطا در صورتی رخ می دهد که خط مشی قادر به ارسال مقدار استخراج شده به یک متغیر نباشد. معمولاً اگر بخواهید مقدار یک نوع داده را روی متغیری از نوع داده دیگر تنظیم کنید، این اتفاق می افتد.

خطاهای استقرار

این خطاها ممکن است زمانی رخ دهند که یک پروکسی حاوی این خط مشی را مستقر می کنید.

نام خطا علت رفع کنید
NothingToExtract اگر خط مشی هیچ یک از عناصر URIPath ، QueryParam ، Header ، FormParam ، XMLPayload ، یا JSONPayload را نداشته باشد، استقرار پروکسی API ناموفق است، زیرا چیزی برای استخراج وجود ندارد.
NONEmptyPrefixMappedToEmptyURI این خطا در صورتی رخ می دهد که خط مشی دارای پیشوندی باشد که در عنصر Namespace زیر عنصر XMLPayload تعریف شده است، اما URI تعریف نشده باشد.
DuplicatePrefix این خطا در صورتی رخ می دهد که خط مشی دارای پیشوند یکسانی باشد که بیش از یک بار در عنصر Namespace زیر عنصر XMLPayload تعریف شده است.
NoXPathsToEvaluate اگر این خط‌مشی عنصر XPath را در عنصر XMLPayload نداشته باشد، استقرار پراکسی API با این خطا با شکست مواجه می‌شود.
EmptyXPathExpression اگر خط مشی دارای عبارت XPath خالی در عنصر XMLPayload باشد، استقرار پروکسی API با شکست مواجه می شود.
NoJSONPathsToEvaluate اگر این خط‌مشی عنصر JSONPath در عنصر JSONPayload نداشته باشد، استقرار پراکسی API با این خطا با شکست مواجه می‌شود.
EmptyJSONPathExpression اگر خط مشی دارای عبارت XPath خالی در عنصر XMLPayload باشد، استقرار پروکسی API با شکست مواجه می شود.
MissingName اگر خط مشی دارای ویژگی name در هیچ یک از عناصر خط مشی مانند QueryParam ، Header ، FormParam یا Variable نباشد، در آن صورت استقرار پروکسی API با شکست مواجه می شود.
PatternWithoutVariable اگر این خط مشی دارای متغیر مشخص شده در عنصر Pattern نباشد، استقرار پروکسی API با شکست مواجه می شود. عنصر Pattern به نام متغیری نیاز دارد که داده های استخراج شده در آن ذخیره می شود.
CannotBeConvertedToNodeset اگر خط مشی دارای عبارت XPath باشد که در آن نوع Variable به عنوان nodeset تعریف شده است، اما عبارت را نمی توان به nodeset تبدیل کرد، در این صورت استقرار پراکسی API با شکست مواجه می شود.
JSONPathCompilationFailed خط مشی نمی تواند مسیر JSON مشخصی را کامپایل کند.
InstantiationFailed این خط مشی قابل اجرا نبود.
XPathCompilationFailed اگر پیشوند یا مقدار مورد استفاده در عنصر XPath بخشی از هیچ یک از فضاهای نام اعلام شده در خط مشی نباشد، در این صورت استقرار پراکسی API با شکست مواجه می شود.
InvalidPattern اگر تعریف عنصر Pattern در هر یک از عناصر مانند URIPath ، QueryParam ، Header ، FormParam ، XMLPayload یا JSONPayload در خط‌مشی نامعتبر باشد، در این صورت استقرار پراکسی API با شکست مواجه می‌شود.

متغیرهای خطا

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

متغیرها کجا مثال
fault.name=" fault_name " fault_name نام خطا است، همانطور که در جدول خطاهای Runtime در بالا ذکر شده است. نام خطا آخرین قسمت کد خطا است. fault.name = "SourceMessageNotAvailable"
extractvariables. policy_name .failed policy_name نام سیاستی است که توسط کاربر مشخص شده است که خطا را ایجاد کرده است. extractvariables.EV-ParseJsonResponse.failed = true

نمونه پاسخ خطا

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

مثال قانون خطا

<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 را با استفاده از تجزیه و تحلیل سفارشی تجزیه و تحلیل کنید

مرجع متغیرها