شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید . اطلاعات
چه
سیاست ExtractVariables محتوا را از یک درخواست یا پاسخ استخراج میکند و مقدار یک متغیر را به آن محتوا اختصاص میدهد. شما میتوانید هر بخشی از پیام، از جمله هدرها، مسیرهای URI، بارهای JSON/XML، پارامترهای فرم و پارامترهای پرس و جو را استخراج کنید. این سیاست با اعمال یک الگوی متنی به محتوای پیام کار میکند و پس از یافتن یک مورد منطبق، یک متغیر با محتوای پیام مشخص شده تنظیم میکند.
اگرچه شما اغلب از این سیاست برای استخراج اطلاعات از یک پیام درخواست یا پاسخ استفاده میکنید، میتوانید از آن برای استخراج اطلاعات از منابع دیگر، از جمله موجودیتهای ایجاد شده توسط سیاست AccessEntity ، اشیاء XML یا اشیاء JSON نیز استفاده کنید.
پس از استخراج محتوای پیام مشخص شده، میتوانید به عنوان بخشی از پردازش یک درخواست و پاسخ، به متغیر در سایر سیاستها ارجاع دهید.
ویدیوها
برای کسب اطلاعات بیشتر در مورد سیاست ExtractVariables، ویدیوهای زیر را تماشا کنید.
| ویدئو | توضیحات |
|---|---|
| استخراج متغیرها از فایل XML | با استفاده از سیاست Extract Variable، متغیرها را از یک فایل XML استخراج کنید. |
| استخراج متغیرها از JSON payload | با استفاده از سیاست Extract Variable، متغیرها را از یک فایل JSON استخراج کنید. |
| استخراج متغیرها از پارامترها | استخراج متغیرها از پارامترها، مانند پارامترهای پرس و جو، هدر، فرم یا URI. |
| استخراج متغیرها از پارامترهای چند مقداری | استخراج متغیرها از پارامترهای چند مقداری |
| استخراج متغیرها از پارامتر پرس و جو (Classic Edge) | استخراج متغیرها از یک پارامتر پرس و جو با استفاده از رابط کاربری کلاسیک اج. |
| استخراج متغیرها از XML یا JSON payload (کلاسیک اج) | استخراج متغیرها از یک فایل XML یا JSON با استفاده از رابط کاربری کلاسیک Edge. |
نمونهها
این نمونههای کد خطمشی، نحوه استخراج متغیرها از انواع مصنوعات زیر را نشان میدهند:
گیتهاب
این لینکها به نمونههای پروکسی API در حال کار اشاره دارند که میتوانید آنها را روی Edge مستقر و اجرا کنید. آنها از ExtractVariables استفاده میکنند و در مخزن api-platform-samples شرکت 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 Proxy برابر /svc1 باشد. وقتی Apigee Edge کد سیاست ExtractVariables فوق را بر روی این درخواست ورودی اعمال میکند، متغیر urirequest.id را روی 12797282 تنظیم میکند. پس از اجرای سیاست توسط Apigee Edge، سیاستها یا کدهای بعدی در جریان پردازش میتوانند به متغیری به نام urirequest.id مراجعه کنند تا مقدار رشتهای 12797282 را دریافت کنند.
برای مثال، سیاست AssignMessage زیر مقدار آن متغیر را در payload یک پیام درخواست جدید جاسازی میکند:
<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، سیاستها یا کدهای بعدی در جریان پردازش میتوانند برای دریافت مقدار رشتهای 88271 به متغیری به نام queryinfo.dbncode ارجاع دهند.
اکنون میتوانید به متغیر queryinfo.dbncode در پروکسی خود دسترسی داشته باشید. برای مثال، سیاست AssignMessage زیر آن را در payload درخواست کپی میکند:
<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، از شاخصها استفاده میکنید، که در آن اولین نمونه از پارامتر پرسوجو شاخص ندارد، دومی در شاخص ۲، سومی در شاخص ۳ و غیره است.
کد خطمشی نمونه بالا را که با درخواست ورودی زیر کار میکند، در نظر بگیرید:
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 زیر آن را در payload درخواست کپی میکند:
<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 زیر آن را در payload درخواست کپی میکند:
<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>
جیسون
<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 برای ساخت گزارشهای تحلیلی محتوامحور، به بخش «تحلیل محتوای پیام 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 روی هر چیزی که در proxy.pathsuffix بعد از "/a/" ظاهر میشود، تنظیم میشود. برای مثال، فرض کنید مسیر پایه برای API Proxy شما /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 ، آدرس اینترنتی درخواست ورودی به پروکسی API به این شکل است:
http://myCo.com/basepath/v1/a/b
در این مثال، الگوی اول با URI مطابقت دارد و متغیر urirequest.pathSeg روی "b" تنظیم شده است.
اگر آدرس اینترنتی درخواست:
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 Proxy با مسیر پایه /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، از اندیسها استفاده میکنید، که در آن اولین نمونه از پارامتر پرسوجو هیچ اندیسی ندارد، دومی در اندیس ۲، سومی در اندیس ۳ و غیره قرار دارد. برای مثال، سیاست زیر مقدار پارامتر پرسوجوی دوم با نام "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" تنظیم شده است. اگر پارامتر دوم کوئری از درخواست حذف شود، متغیر urirequest.secondW خالی خواهد بود. هر زمان که چندین آیتم با نام یکسان در درخواست وجود داشته باشد، از اندیسگذاری استفاده کنید.
استفاده از کاراکترهای ویژه در الگو
هنگام تطبیق مسیرهای URI، میتوانید از کاراکترهای wildcard "*" و "**" در الگو استفاده کنید، که در آن:
- "*" با هر یک از بخشهای مسیر مطابقت دارد.
- «**» با چندین بخش از مسیر مطابقت دارد.
برای مثال، شما الگوها را به عنصر <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 ارسال میشود حاوی یک کاراکتر خاص مانند "{" باشد، از کاراکتر "%" برای escape کردن آن استفاده کنید. مثال زیر کاراکترهای "{" و "}" را در الگو escape میکند زیرا آنها به عنوان کاراکترهای تحتاللفظی در مقدار پارامتر پرسوجو استفاده میشوند:
<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>
نوشتن در یک متغیر در چندین جا
هنگام انتخاب نام متغیرهایی که میخواهید تنظیم کنید، دقت کنید. این خطمشی به صورت متوالی از اولین الگوی استخراج تا آخرین اجرا میشود. اگر خطمشی مقداری را از چندین مکان در یک متغیر بنویسد، آخرین نوشته در خطمشی، مقدار متغیر را تعیین میکند. (این ممکن است همان چیزی باشد که شما میخواهید.)
برای مثال، شما میخواهید یک مقدار توکن را استخراج کنید که میتواند یا در یک پارامتر پرسوجو یا در یک هدر ارسال شود، همانطور که در زیر نشان داده شده است:
<!-- 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 تنظیم کنید تا سیاست را طوری پیکربندی کنید که با هر متغیر غیرقابل حل به عنوان یک رشته خالی (null) رفتار کند:
<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>
برای مثال، فرض کنید مقدار name برابر با "user" باشد.
- اگر
<VariablePrefix>مشخص نشده باشد، مقادیر استخراج شده به متغیری به نامuserاختصاص داده میشوند. - اگر
<VariablePrefix>به عنوان myprefix مشخص شده باشد، مقادیر استخراج شده به متغیری به نامmyprefix.userاختصاص داده میشوند.
| پیشفرض: | ناموجود |
| حضور: | اختیاری |
| نوع: | رشته |
عنصر <نادیده گرفتن متغیرهای حل نشده>
(اختیاری) برای اینکه هر متغیر غیرقابل حل را به عنوان یک رشته خالی (null) در نظر بگیرید، روی true تنظیم کنید. اگر میخواهید سیاست در صورت غیرقابل حل بودن هر متغیر ارجاع شده، خطا صادر کند، روی false تنظیم کنید.
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
| پیشفرض: | نادرست |
| حضور: | اختیاری |
| نوع: | بولی |
اگر ارجاع XPath در <XMLPayload> حل نشده باشد، این خطمشی خطای زیر را نشان میدهد:
{ "fault":{ "faultstring":"Unresolved xpath path in policy policy_name.", "detail":{ "errorcode":"steps.extractvariables.InvalidXPath" } } }
عنصر <URIPath>
(اختیاری است، اما برای اطلاعات بیشتر به ردیف Presence در جدول زیر مراجعه کنید.) مقداری را از proxy.pathsuffix یک پیام منبع درخواست استخراج میکند. مسیری که به الگو اعمال میشود proxy.pathsuffix است که شامل مسیر پایه برای API Proxy نمیشود. اگر پیام منبع به نوع پیام response تبدیل شود، این عنصر هیچ کاری انجام نمیدهد.
<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>| پیشفرض: | ناموجود |
| حضور: | اختیاری است. با این حال، باید حداقل یکی از موارد زیر را وارد کنید: <URIPath> ، <QueryParam> ، <Header> ، <FormParam> ، <JSONPayload> یا <XMLPayload>. |
| نوع: | ناموجود |
ویژگیها
| ویژگی | توضیحات | پیشفرض | حضور | نوع |
|---|---|---|---|---|
| نادیده گرفتن حروف بزرگ و کوچک | مشخص میکند که هنگام تطبیق الگو، حروف بزرگ و کوچک نادیده گرفته شوند. | نادرست | اختیاری | بولی |
عنصر <QueryParam>
(اختیاری است، اما برای اطلاعات بیشتر به ردیف Presence در جدول زیر مراجعه کنید.) مقداری را از پارامتر پرسوجوی مشخصشده از یک پیام منبع درخواست استخراج میکند. اگر پیام منبع به نوع پیام پاسخ (response ) تبدیل شود، این عنصر هیچ کاری انجام نمیدهد.
<QueryParam name="code">
<Pattern ignoreCase="true">DBN{dbncode}</Pattern>
</QueryParam>اگر چندین پارامتر کوئری نام یکسانی دارند، از اندیسها برای ارجاع به پارامترها استفاده کنید:
<QueryParam name="w.2">
<Pattern ignoreCase="true">{secondW}</Pattern>
</QueryParam>| پیشفرض: | ناموجود |
| حضور: | اختیاری است. با این حال، باید حداقل یکی از موارد زیر را وارد کنید: <URIPath> ، <QueryParam> ، <Header> ، <FormParam> ، <JSONPayload> یا <XMLPayload>. |
| نوع: | ناموجود |
ویژگیها
| ویژگی | توضیحات | پیشفرض | حضور | نوع |
|---|---|---|---|---|
| نام | نام پارامتر پرسوجو را مشخص میکند. اگر چندین پارامتر پرسوجو نام یکسانی داشته باشند، از ارجاع فهرستبندیشده استفاده کنید، که در آن اولین نمونه از پارامتر پرسوجو هیچ فهرستی ندارد، دومی در فهرست ۲، سومی در فهرست ۳ و غیره است. | ناموجود | مورد نیاز | رشته |
عنصر <سربرگ>
(اختیاری است، اما برای اطلاعات بیشتر به ردیف Presence در جدول زیر مراجعه کنید.) مقداری را از هدر 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>| پیشفرض: | ناموجود |
| حضور: | اختیاری است. با این حال، باید حداقل یکی از موارد زیر را وارد کنید: <URIPath> ، <QueryParam> ، <Header> ، <FormParam> ، <JSONPayload> یا <XMLPayload>. |
| نوع: | ناموجود |
ویژگیها
| ویژگی | توضیحات | پیشفرض | حضور | نوع |
|---|---|---|---|---|
| نام | نام هدری را که مقدار را از آن استخراج میکنید، مشخص میکند. اگر چندین هدر نام یکسانی داشته باشند، از ارجاع فهرستبندی شده استفاده کنید، که در آن اولین نمونه هدر هیچ فهرستی ندارد، دومی در فهرست ۲، سومی در فهرست ۳ و غیره است. .values برای دریافت همه هدرهای موجود در آرایه استفاده کنید. | ناموجود | مورد نیاز | رشته |
عنصر <FormParam>
(اختیاری است، اما برای اطلاعات بیشتر به ردیف Presence در جدول زیر مراجعه کنید.) مقداری را از پارامتر فرم مشخص شده از پیام درخواست یا پاسخ مشخص شده استخراج میکند. پارامترهای فرم فقط زمانی قابل استخراج هستند که سربرگ Content-Type پیام مشخص شده application/x-www-form-urlencoded باشد.
<FormParam name="greeting">
<Pattern>hello {user}</Pattern>
</FormParam>| پیشفرض: | ناموجود |
| حضور: | اختیاری است. با این حال، باید حداقل یکی از موارد زیر را وارد کنید: <URIPath> ، <QueryParam> ، <Header> ، <FormParam> ، <JSONPayload> یا <XMLPayload>. |
| نوع: | ناموجود |
ویژگیها
| ویژگی | توضیحات | پیشفرض | حضور | نوع |
|---|---|---|---|---|
| نام | نام پارامتر فرم که مقدار را از آن استخراج میکنید. | ناموجود | مورد نیاز | رشته |
عنصر <متغیر>
(اختیاری است، اما برای اطلاعات بیشتر به ردیف Presence در جدول زیر مراجعه کنید.) نام متغیری را مشخص میکند که مقدار از آن استخراج میشود.
<Variable name="myVar">
<Pattern>hello {user}</Pattern>
</Variable>برای استخراج دو مقدار از متغیر:
<Variable name="myVar">
<Pattern>hello {firstName} {lastName}</Pattern>
</Variable>| پیشفرض: | ناموجود |
| حضور: | اختیاری است. با این حال، باید حداقل یکی از موارد زیر را وارد کنید: <URIPath> ، <QueryParam> ، <Header> ، <FormParam> ، <JSONPayload> یا <XMLPayload>. |
| نوع: | ناموجود |
ویژگیها
| ویژگی | توضیحات | پیشفرض | حضور | نوع |
|---|---|---|---|---|
| نام | نام متغیری که مقدار از آن استخراج میشود. | ناموجود | مورد نیاز | رشته |
عنصر <JSONPayload>
(اختیاری است، اما برای اطلاعات بیشتر به ردیف Presence در جدول زیر مراجعه کنید.) پیام با فرمت JSON را که مقدار متغیر از آن استخراج میشود، مشخص میکند. استخراج JSON فقط زمانی انجام میشود که هدر Content-Type پیام application/json باشد.
<JSONPayload> <Variable name="name" type="string"> <JSONPath>{example}</JSONPath> </Variable> </JSONPayload>
| پیشفرض: | ناموجود |
| حضور: | اختیاری است. با این حال، باید حداقل یکی از موارد زیر را وارد کنید: <URIPath> ، <QueryParam> ، <Header> ، <FormParam> ، <JSONPayload> یا <XMLPayload>. |
| نوع: | ناموجود |
عنصر <JSONPayload>/<Variable>
(در عنصر JSONPayload الزامی است.) متغیری را مشخص میکند که مقدار استخراجشده به آن اختصاص داده میشود. میتوانید چندین تگ <Variable> را در عنصر <JSONPayload> برای پر کردن چندین متغیر قرار دهید.
<Variable name="name" type="string"> <JSONPath>{example}</JSONPath> </Variable>
| پیشفرض: | ناموجود |
| حضور: | در عنصر JSONPayload الزامی است. |
| نوع: | ناموجود |
ویژگیها
| ویژگی | توضیحات | پیشفرض | حضور | نوع |
|---|---|---|---|---|
| نام | نام متغیری را که مقدار استخراج شده به آن اختصاص داده خواهد شد، مشخص میکند. | نام | مورد نیاز | رشته |
| نوع | نوع دادهی مقدار متغیر را مشخص میکند. | ناموجود | اختیاری | رشته. انتخاب از:
|
عنصر <JSONPayload>/<Variable>/<JSONPath>
(در عنصر JSONPayload:Variable الزامی است.) مسیر JSON مورد استفاده برای استخراج یک مقدار از یک پیام با فرمت JSON را مشخص میکند.
<Variable name="name"> <JSONPath>$.rss.channel.title</JSONPath> </Variable>
| پیشفرض: | ناموجود |
| حضور: | مورد نیاز |
| نوع: | رشته |
عنصر <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>
| پیشفرض: | ناموجود |
| حضور: | اختیاری است. با این حال، باید حداقل یکی از موارد زیر را وارد کنید: <URIPath> ، <QueryParam> ، <Header> ، <FormParam> ، <JSONPayload> یا <XMLPayload>. |
| نوع: | ناموجود |
ویژگیها
| ویژگی | توضیحات | پیشفرض | حضور | نوع |
|---|---|---|---|---|
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>
| پیشفرض: | ناموجود |
| حضور: | اختیاری |
| نوع: | رشته |
ویژگیها
| ویژگی | توضیحات | پیشفرض | حضور | نوع |
|---|---|---|---|---|
prefix | پیشوند فضای نام. | ناموجود | مورد نیاز | رشته |
عنصر <XMLPayload>/<Variable>
(اختیاری) متغیری را مشخص میکند که مقدار استخراجشده به آن اختصاص داده خواهد شد.
<Variable name="name" type="boolean"> <XPath>/test/example</XPath> </Variable>
| پیشفرض: | ناموجود |
| حضور: | اختیاری |
| نوع: | ناموجود |
ویژگیها
| ویژگی | توضیحات | پیشفرض | حضور | نوع |
|---|---|---|---|---|
| نام | نام متغیری را که مقدار استخراج شده به آن اختصاص داده خواهد شد، مشخص میکند. | نام | مورد نیاز | رشته |
| نوع | نوع دادهی مقدار متغیر را مشخص میکند. | بولی | اختیاری | رشته. انتخاب از:
|
عنصر <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>
| پیشفرض: | ناموجود |
| حضور: | مورد نیاز |
| نوع: | رشته |
مرجع خطا
این بخش کدهای خطا و پیامهای خطایی را که برگردانده میشوند و متغیرهای خطا را که توسط 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 با استفاده از تجزیه و تحلیلهای سفارشی