شما در حال مشاهده اسناد 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 در هر مورد و نحوه استقرار و اجرای هر نمونه را توضیح می دهند.
- استخراج و اختصاص نمونه متغیرها (استخراج داده ها از پیام های JSON و XML)
- نمونه موجودیت دسترسی
- نمونه صفحه بندی و کش
- یک نمونه URL هدف را تغییر مسیر دهید
- نمونه ترکیب خط مشی
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 | نام داخلی سیاست. مقدار مشخصه در صورت تمایل، از عنصر | N/A | مورد نیاز |
continueOnError | برای بازگرداندن خطا در صورت شکست خط مشی، روی روی | نادرست | اختیاری |
enabled | برای اجرای خط مشی روی برای خاموش کردن خط مشی، روی | درست است | اختیاری |
async | این ویژگی منسوخ شده است. | نادرست | منسوخ شده است |
عنصر <DisplayName>
علاوه بر ویژگی name
برای برچسبگذاری خطمشی در ویرایشگر پروکسی رابط کاربری مدیریت با نامی متفاوت و به زبان طبیعی، از آن استفاده کنید.
<DisplayName>Policy Display Name</DisplayName>
پیش فرض | N/A اگر این عنصر را حذف کنید، از مقدار ویژگی |
---|---|
حضور | اختیاری |
تایپ کنید | رشته |
عنصر <منبع>
(اختیاری) متغیری را که باید تجزیه شود را مشخص می کند. مقدار <Source>
به طور پیش فرض برای message
است. مقدار message
به زمینه حساس است. در یک جریان درخواست، message
به پیام درخواست حل می شود. در یک جریان پاسخ، message
به پیام پاسخ حل می شود.
در حالی که اغلب از این خط مشی برای استخراج اطلاعات از یک درخواست یا پیام پاسخ استفاده می کنید، می توانید از آن برای استخراج اطلاعات از هر متغیری استفاده کنید. برای مثال، میتوانید از آن برای استخراج اطلاعات از یک موجودیت ایجاد شده توسط خطمشی AccessEntity ، از دادههای بازگردانده شده توسط خطمشی Service Callout ، یا استخراج اطلاعات از یک شی XML یا JSON استفاده کنید.
اگر <Source>
قابل حل نباشد، یا به یک نوع غیر پیام حل شود، خط مشی پاسخ نمی دهد.
<Source clearPayload="true|false">request</Source>
پیش فرض: | پیام |
حضور: | اختیاری |
نوع: | رشته |
صفات
صفت | توضیحات | پیش فرض | حضور | تایپ کنید |
---|---|---|---|---|
clearPayload | اگر میخواهید پس از استخراج دادهها، محموله مشخص شده در <Source> را پاک کنید، روی 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 | اختیاری | رشته انتخاب از:
|
عنصر <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 پس از پر شدن یک متغیر، روی | نادرست | اختیاری | بولی |
عنصر <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 |
صفات
صفت | توضیحات | پیش فرض | حضور | تایپ کنید |
---|---|---|---|---|
نام | نام متغیری را که مقدار استخراج شده به آن اختصاص داده می شود را مشخص می کند. | نام | مورد نیاز | رشته |
نوع | نوع داده مقدار متغیر را مشخص می کند. | بولی | اختیاری | رشته انتخاب از:
|
عنصر <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 | این خطا زمانی رخ می دهد که:
| build |
steps.extractvariables.ImmutableVariable | 500 | متغیر مورد استفاده در خط مشی تغییرناپذیر است. خط مشی قادر به تنظیم این متغیر نبود. | |
steps.extractvariables.InvalidJSONPath | 500 | اگر از یک مسیر JSON نامعتبر در عنصر JSONPath خط مشی استفاده شود، این خطا رخ می دهد. به عنوان مثال، اگر یک بار JSON دارای Name شیء نباشد، اما Name به عنوان مسیر در خط مشی مشخص کنید، این خطا رخ می دهد. | build |
steps.extractvariables.JsonPathParsingFailure | 500 | این خطا زمانی رخ می دهد که خط مشی قادر به تجزیه یک مسیر JSON و استخراج داده ها از متغیر جریان مشخص شده در عنصر Source نباشد. به طور معمول این اتفاق می افتد اگر متغیر جریان مشخص شده در عنصر Source در جریان فعلی وجود نداشته باشد. | build |
steps.extractvariables.SetVariableFailed | 500 | اگر خط مشی نتواند مقدار یک متغیر را تنظیم کند، این خطا رخ می دهد. این خطا معمولاً در صورتی اتفاق میافتد که بخواهید مقادیری را به چندین متغیر اختصاص دهید که نام آنها با کلمات مشابه در قالب جدا شده از نقطه تو در تو آغاز میشود. | build |
steps.extractvariables.SourceMessageNotAvailable | 500 | این خطا در صورتی رخ می دهد که متغیر پیام مشخص شده در عنصر Source سیاست یکی از این موارد باشد:
| build |
steps.extractvariables.UnableToCast | 500 | این خطا در صورتی رخ می دهد که خط مشی قادر به ارسال مقدار استخراج شده به یک متغیر نباشد. معمولاً اگر بخواهید مقدار یک نوع داده را روی متغیری از نوع داده دیگر تنظیم کنید، این اتفاق می افتد. | build |
خطاهای استقرار
این خطاها ممکن است زمانی رخ دهند که یک پروکسی حاوی این خط مشی را مستقر می کنید.
نام خطا | علت | رفع کنید |
---|---|---|
NothingToExtract | اگر خط مشی هیچ یک از عناصر URIPath ، QueryParam ، Header ، FormParam ، XMLPayload ، یا JSONPayload را نداشته باشد، استقرار پروکسی API ناموفق است، زیرا چیزی برای استخراج وجود ندارد. | build |
NONEmptyPrefixMappedToEmptyURI | این خطا در صورتی رخ می دهد که خط مشی دارای پیشوندی باشد که در عنصر Namespace زیر عنصر XMLPayload تعریف شده است، اما URI تعریف نشده باشد. | build |
DuplicatePrefix | این خطا در صورتی رخ می دهد که خط مشی دارای پیشوند یکسانی باشد که بیش از یک بار در عنصر Namespace زیر عنصر XMLPayload تعریف شده است. | build |
NoXPathsToEvaluate | اگر این خطمشی عنصر XPath را در عنصر XMLPayload نداشته باشد، استقرار پراکسی API با این خطا با شکست مواجه میشود. | build |
EmptyXPathExpression | اگر خط مشی دارای عبارت XPath خالی در عنصر XMLPayload باشد، استقرار پروکسی API با شکست مواجه می شود. | build |
NoJSONPathsToEvaluate | اگر این خطمشی عنصر JSONPath در عنصر JSONPayload نداشته باشد، استقرار پراکسی API با این خطا با شکست مواجه میشود. | build |
EmptyJSONPathExpression | اگر خط مشی دارای عبارت XPath خالی در عنصر XMLPayload باشد، استقرار پروکسی API با شکست مواجه می شود. | build |
MissingName | اگر خط مشی دارای ویژگی name در هیچ یک از عناصر خط مشی مانند QueryParam ، Header ، FormParam یا Variable نباشد، در آن صورت استقرار پروکسی API با شکست مواجه می شود. | build |
PatternWithoutVariable | اگر این خط مشی دارای متغیر مشخص شده در عنصر Pattern نباشد، استقرار پروکسی API با شکست مواجه می شود. عنصر Pattern به نام متغیری نیاز دارد که داده های استخراج شده در آن ذخیره می شود. | build |
CannotBeConvertedToNodeset | اگر خط مشی دارای عبارت XPath باشد که در آن نوع Variable به عنوان nodeset تعریف شده است، اما عبارت را نمی توان به nodeset تبدیل کرد، در این صورت استقرار پراکسی API با شکست مواجه می شود. | build |
JSONPathCompilationFailed | خط مشی نمی تواند مسیر JSON مشخصی را کامپایل کند. | |
InstantiationFailed | این خط مشی قابل اجرا نبود. | |
XPathCompilationFailed | اگر پیشوند یا مقدار مورد استفاده در عنصر XPath بخشی از هیچ یک از فضاهای نام اعلام شده در خط مشی نباشد، در این صورت استقرار پراکسی API با شکست مواجه می شود. | build |
InvalidPattern | اگر تعریف عنصر Pattern در هر یک از عناصر مانند URIPath ، QueryParam ، Header ، FormParam ، XMLPayload یا JSONPayload در خطمشی نامعتبر باشد، در این صورت استقرار پراکسی API با شکست مواجه میشود. | build |
متغیرهای خطا
این متغیرها زمانی تنظیم می شوند که این خط مشی خطایی را در زمان اجرا ایجاد کند. برای اطلاعات بیشتر، به آنچه باید در مورد خطاهای خط مشی بدانید مراجعه کنید.
متغیرها | کجا | مثال |
---|---|---|
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 را با استفاده از تجزیه و تحلیل سفارشی تجزیه و تحلیل کنید