درحال مشاهده اسناد Apigee Edge هستید.
به
اسناد Apigee X بروید. اطلاعات
چه
خطمشی ExtractVariables محتوا را از درخواست یا پاسخ استخراج میکند و مقدار متغیر را روی آن محتوا تنظیم میکند. میتوانید هر بخشی از پیام را، ازجمله سرایندها، مسیرهای نشانی وب، بار JSON/XML، پارامترهای فرم، و پارامترهای پُرسمان استخراج کنید. این خطمشی با اعمال الگوی نوشتاری روی محتوای پیام کار میکند و درصورت یافتن مطابقت، متغیری را با محتوای پیام مشخصشده تنظیم میکند.
اگرچه اغلب از این خطمشی برای استخراج اطلاعات از پیام درخواست یا پاسخ استفاده میکنید، میتوانید از آن برای استخراج اطلاعات از منابع دیگر نیز استفاده کنید، ازجمله نهادهای ایجادشده توسط خطمشی AccessEntity، اشیاء XML، یا اشیاء JSON.
پساز استخراج محتوای پیام مشخصشده، میتوانید به متغیر در خطمشیهای دیگر بهعنوان بخشی از پردازش درخواست و پاسخ ارجاع دهید.
ویدیوها
برای کسب اطلاعات بیشتر درباره خطمشی ExtractVariables، ویدیوهای زیر را تماشا کنید.
| ویدیو | شرح |
|---|---|
| استخراج متغیرها از پایهبار XML | بااستفاده از خطمشی «استخراج متغیر»، متغیرها را از پایهبار XML استخراج کنید. |
| استخراج متغیرها از پایهبار JSON | بااستفاده از خطمشی «استخراج متغیر»، متغیرها را از پایهبار JSON استخراج کنید. |
| استخراج متغیرها از پارامترها | متغیرها را از پارامترها، مثل پارامترهای پُرسمان، سرایند، فرم، یا نشانی وب، استخراج کنید. |
| استخراج متغیرها از پارامترهای چندمقداری | متغیرها را از پارامترهای چندمقداری استخراج کنید. |
| استخراج متغیرها از پارامتر پُرسمان (Classic Edge) | استخراج متغیرها از پارامتر پُرسمان بااستفاده از «میانای کاربر Classic Edge». |
| استخراج متغیرها از پایهبار XML یا JSON (Classic Edge) | بااستفاده از «میانای کاربر Classic Edge»، متغیرها را از پایهبار XML یا JSON استخراج کنید. |
نمونهها
این نمونههای کد خطمشی نشان میدهند که چگونه متغیرها را از انواع زیر آرتیفکتها استخراج کنید:
GitHub
این پیوندها به نمونههای کارگزار نیابتی API اشاره میکنند که میتوانید آنها را در Edge مستقر و اجرا کنید. آنها از ExtractVariables استفاده میکنند و در مخزن api-platform-samples در Apigee در GitHub قرار دارند. فایلهای README توضیح میدهند که چگونه از ExtractVariables در هر مورد استفاده میشود و چگونه هر نمونه را پیادهسازی و اجرا کنید.
- استخراج و اختصاص دادن نمونه متغیرها (استخراج دادهها از پیامهای JSON و XML)
- دسترسی به نمونه نهاد
- نمونه صفحهبندی و ذخیره در حافظه نهان
- تغییر مسیر نمونه نشانی وب مقصد
- نمونه ترکیب خطمشی
URIs
<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 میگوید اطلاعات را از مسیر نشانی وب استخراج کند. عنصر
<Pattern> الگویی را که باید روی مسیر نشانی وب اِعمال شود مشخص میکند. این
الگو بهعنوان یک الگوی ساده درنظر گرفته میشود و آکولادها بخش متغیر
مسیر نشانی وب را نشان میدهند.
نام متغیری که باید تنظیم شود با مقدار مشخصشده در عنصر
<VariablePrefix> و همچنین مقدار محصور در آکولاد {}
در عنصر <Pattern> تعیین میشود. این دو مقدار با یک نقطه میانی به هم میپیوندند و
نام متغیری مانند urirequest.id ایجاد میکنند. اگر عنصر
<VariablePrefix> وجود نداشته باشد، نام متغیر فقط مقدار
محصور در آکولاد است.
کد خطمشی نمونه بالا را درنظر بگیرید که با درخواست ورودی زیر کار میکند:
GET http://org1-test.apigee.net/svc1/accounts/12797282
فرض کنید مسیر پایه برای «پراکسی میانای برنامهسازی کاربردی» /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، از نمایهها استفاده میکنید، بهطوریکه اولین نمونه پارامتر پُرسمان نمایه ندارد، دومین نمونه در نمایه ۲، سومین نمونه در نمایه ۳، و غیره قرار دارد.
کد خطمشی نمونه بالا را درنظر بگیرید که با درخواست ورودی زیر کار میکند:
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>فرض کنید میانای برنامهسازی کاربردی شما از OAuth v2.0 bearer tokens استفاده میکند. کد خطمشی نمونه بالا را درنظر بگیرید
که با درخواستی کار میکند که کد 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 استفاده میکنند. پسوند این متغیرها بهطور صریح توسط عنصر
<Variable> و مشخصه name مشخص میشود.
متغیر 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 استفاده میکنند. پسوند این متغیرها بهطور صریح توسط عنصر <Variable> و
مشخصه name مشخص میشود.
متغیر 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» استفاده کنند.
برای دیدن اینکه چگونه میتوان از ExtractVariables برای ساختن گزارشهای Analytics محتوا-محور استفاده کرد، به تجزیهوتحلیل محتوای پیام API بااستفاده از Analytics سفارشی مراجعه کنید.
حوزه
متغیرهای تنظیمشده با خطمشی ExtractVariables دارای محدوده جهانی هستند. یعنی پساز اینکه خطمشی ExtractVariables متغیر جدیدی را تعریف کرد، میتوانید از هر خطمشی یا کدی در هر مرحله از جریان (که پساز خطمشی ExtractVariables اجرا میشود) به آن متغیر دسترسی پیدا کنید. این شامل موارد زیر میشود:
- PreFlow: ProxyEndpoint و TargetEndpoint (درخواست و پاسخ)
- PostFlow: ProxyEndpoint و TargetEndpoint (درخواست و پاسخ)
- PostClientFlow: ProxyEndpoint (فقط پاسخ، بااستفاده از خطمشی ثبت پیام)
- جریانهای خطا
درباره مطابقت و ساخت متغیر
خطمشی ExtractVariables اطلاعات را از درخواست یا پاسخ استخراج میکند و آن اطلاعات را در متغیر مینویسد. برای هر نوع اطلاعاتی که میتوانید استخراج کنید، مثل مسیر نشانی وب یا دادههای XML، الگویی را که باید مطابقت داده شود و نام متغیری را که برای نگهداری اطلاعات استخراجشده استفاده میشود مشخص میکنید.
بااینحال، نحوه عملکرد تطبیق الگو به منبع استخراج بستگی دارد. بخشهای زیر دو دسته اصلی اطلاعاتی را که میتوانید استخراج کنید شرح میدهد.
مسیرهای نشانی وب، پارامترهای پُرسمان، سرایندها، پارامترهای فرم، و متغیرهای منطبق
هنگام استخراج اطلاعات از مسیر نشانی وب، پارامترهای پُرسمان، سرایندها، پارامترهای فرم، و متغیرها، از برچسب <Pattern> برای مشخص کردن یک یا چند الگوی تطبیق استفاده میکنید. برای مثال، خطمشی نمونه زیر یک الگوی منطبق برای مسیر نشانی وب نشان میدهد:
<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/» ظاهر میشود تنظیم شده است. برای مثال، فرض کنید مسیر پایه برای «پراکسی میانای برنامهسازی کاربردی» شما /basepath/v1 باشد . با درخواست ورودی به http://myCo.com/basepath/v1/a/b متغیر روی «b» تنظیم میشود.
مشخص کردن چندین الگو
میتوانید چندین الگو را برای مطابقت مشخص کنید که با برچسبهای <Pattern> مطابقت دارند، در اینجا:
- همه الگوها برای مطابقت آزمایش میشوند.
- اگر هیچیک از الگوها مطابقت نداشته باشد، خطمشی هیچ کاری انجام نمیدهد و متغیر(ها) ایجاد نمیشود.
- اگر بیشاز یک الگو مطابقت داشته باشد، الگویی که طولانیترین بخشهای مسیر را دارد برای استخراج استفاده میشود.
- اگر دو الگوی منطبق دارای بخشهای طولانیترین مسیر یکسان باشند، الگویی که ابتدا در خطمشی مشخص شده است برای استخراج استفاده میشود.
در مثال بعدی، خطمشیای ایجاد میکنید که حاوی سه الگوی تطبیق برای مسیر نشانی وب است:
<ExtractVariables name="ExtractVariables-1">
<Source>request</Source>
<URIPath>
<Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
<Pattern ignoreCase="true">/a/b/{pathSeg}</Pattern>
<Pattern ignoreCase="true">/a/b/c/{pathSeg}</Pattern>
</URIPath>
<VariablePrefix>urirequest</VariablePrefix>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>فرض کنید برای یک «پراکسی میانای برنامهسازی کاربردی» با مسیر پایه /basepath/v1 ، نشانی وب درخواست ورودی به پراکسی میانای برنامهسازی کاربردی به این شکل است:
http://myCo.com/basepath/v1/a/b
در این مثال، الگوی اول با شناسه منبع یکنواخت مطابقت دارد و متغیر 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>دوباره فرض کنید «پراکسی میانای برنامهسازی کاربردی» با مسیر پایه /basepath/v1 برای درخواست ورودی نشانی وب:
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 روی «۲» تنظیم شده است. اگر پارامتر پُرسمان دوم از درخواست حذف شود، متغیر urirequest.secondW خالی است. هرگاه چندین مورد با نام یکسان در درخواست وجود دارد، از نمایه کردن استفاده کنید.
استفاده از نویسههای خاص در الگو
هنگام مطابقت دادن مسیرهای نشانی وب، میتوانید از نویسههای عام «*» و «**» در الگو استفاده کنید، در این الگو:
- «*» با هریک از بخشهای مسیر مطابقت دارد
- «**» با چندین بخش از مسیر مطابقت دارد
برای مثال، الگوهایی را برای عنصر <URIPath> مشخص میکنید، همانطور که در زیر نشان داده شده است:
<URIPath>
<Pattern ignoreCase="true">/a/*/{id}</Pattern>
<Pattern ignoreCase="true">/a/**/{id}</Pattern>
</URIPath>الگوی اول با درخواستهایی که پسوند مسیر دارند (بخشی از مسیر نشانی وب که پساز مسیر پایه میآید) مثل «/a/b/c»، «/a/foo/bar»، و غیره مطابقت دارد. الگوی دوم با هر تعداد بخش مسیر پساز «/a/» مثل «/a/foo/bar/baz/c» و همچنین «/a/b/c» و «/a/foo/bar» مطابقت دارد.
هنگام مشخص کردن الگوها برای پارامترهای پُرسمان، سرایندها، و پارامترهای فرم، نویسه «*» مشخص میکند که با هر تعداد نویسه مطابقت داشته باشد. برای مثال، هنگام مطابقت دادن سرصفحه، الگو را بهصورت زیر مشخص کنید: pattern as:
*;charset={encoding}
این الگو با مقادیر «text/xml;charset=UTF-16» و «application/xml;charset=ASCII» مطابقت دارد.
اگر مقدار منتقلشده به خطمشی ExtractVariables حاوی نویسه خاصی مثل «{» باشد، از نویسه «٪» برای فرار از آن استفاده کنید. در مثال زیر، نویسههای «{» و «}» در الگو گریز داده میشوند زیرا بهعنوان نویسههای حرفی در مقدار پارامتر پُرسمان استفاده میشوند:
<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> را در خطمشیای که به متغیر ارجاع میدهد روی
درست تنظیم کنید تا خطمشی پیکربندی شود و
هر متغیر غیرقابلحلی را بهعنوان رشته خالی (تهی) درنظر بگیرد:
<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>
(اختیاری) متغیری را که باید تجزیه شود مشخص میکند. مقدار
<Source> بهطور پیشفرض message است. مقدار message
حروفحساس است. در جریان درخواست، message به پیام درخواست تبدیل میشود. در
جریان پاسخ، message به پیام پاسخ تبدیل میشود.
اگرچه اغلب از این خطمشی برای استخراج اطلاعات از پیام درخواست یا پاسخ استفاده میکنید،
میتوانید از آن برای استخراج اطلاعات از هر متغیری استفاده کنید. برای مثال، میتوانید از آن برای استخراج اطلاعات از نهادی که توسط خطمشی AccessEntity ایجاد شده است، از دادههای برگشتی توسط خطمشی
«تماس با سرویس»، یا استخراج اطلاعات از شیء XML یا JSON استفاده کنید.
اگر <Source> قابلحل نباشد یا به نوع غیرپیام حل شود،
خطمشی نمیتواند پاسخ دهد.
<Source clearPayload="true|false">request</Source>
| پیشفرض: | پیام |
| حضور: | اختیاری |
| نوع: | رشته |
مشخصهها
| مشخصه | شرح | پیشفرض | حضور | نوع |
|---|---|---|---|---|
| clearPayload |
اگر میخواهید پساز استخراج دادهها از <Source>، بار داده مشخصشده در آن را پاک کنید، روی درست تنظیم کنید. |
نادرست |
اختیاری | بولی |
عنصر <VariablePrefix>
(اختیاری) نام کامل متغیر با پیوستن
<VariablePrefix>، یک نقطه، و نامی که در {آکولاد} در
عنصر <Pattern> یا عنصر <Variable> تعریف میکنید ایجاد میشود. برای مثال:
myprefix.id، myprefix.dbncode، یا myprefix.oauthtoken.
<VariablePrefix>myprefix</VariablePrefix>
برای مثال، فرض کنید مقدار نام «کاربر» باشد.
- اگر
<VariablePrefix>مشخص نشده باشد، مقادیر استخراجشده به متغیری بهنامuserاختصاص داده میشود. - اگر
<VariablePrefix>بهعنوان پیشوند من مشخص شده باشد، مقادیر استخراجشده به متغیری بهنامmyprefix.userاختصاص داده میشود.
| پیشفرض: | موجود نیست |
| حضور: | اختیاری |
| نوع: | رشته |
عنصر <IgnoreUnresolvedVariables>
(اختیاری) برای درنظر گرفتن هر متغیر غیرقابلحلی بهعنوان رشته خالی
(تهی)، روی true تنظیم کنید. اگر میخواهید وقتی هریک از متغیرهای ارجاعدادهشده
قابلحل نیست، خطمشی خطا ایجاد کند، روی false تنظیم کنید.
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
| پیشفرض: | نادرست |
| حضور: | اختیاری |
| نوع: | بولی |
اگر مرجع XPath در <XMLPayload> حلنشده باشد، خطمشی خطای زیر را برمیگرداند:
{ "fault":{ "faultstring":"Unresolved xpath path in policy policy_name.", "detail":{ "errorcode":"steps.extractvariables.InvalidXPath" } } }
عنصر <URIPath>
(اختیاری، اما برای اطلاعات بیشتر، ردیف «حضور» را در جدول زیر ببینید.) مقدار را از proxy.pathsuffix پیام منبع درخواست استخراج میکند. مسیر اعمالشده به الگو proxy.pathsuffix است که شامل basepath برای «پراکسی 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>| پیشفرض: | موجود نیست |
| حضور: | اختیاری. بااینحال، باید حداقل یکی از موارد زیر را اضافه کنید:
<URIPath>، <QueryParam>، <Header>،
<FormParam>، <JSONPayload>، یا
<XMLPayload>. |
| نوع: | موجود نیست |
مشخصهها
| مشخصه | شرح | پیشفرض | حضور | نوع |
|---|---|---|---|---|
| ignoreCase | مشخص میکند که هنگام مطابقت دادن الگو، به بزرگی و کوچکی حروف توجه نشود. |
نادرست |
اختیاری | بولی |
عنصر <QueryParam>
(اختیاری، اما برای اطلاعات بیشتر، ردیف «حضور» را در جدول زیر ببینید.) مقداری را از پارامتر پُرسمان مشخصشده پیام منبع درخواست استخراج میکند. اگر پیام منبع به نوع پیام پاسخ تبدیل شود، این عنصر هیچ کاری انجام نمیدهد.
<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>. |
| نوع: | موجود نیست |
مشخصهها
| مشخصه | شرح | پیشفرض | حضور | نوع |
|---|---|---|---|---|
| نام | نام پارامتر پُرسمان را مشخص میکند. اگر چندین پارامتر پُرسمان نام یکسانی داشته باشند، از ارجاع نمایهدار استفاده کنید، بهطوریکه اولین نمونه پارامتر پُرسمان نمایه نداشته باشد، دومین نمونه در نمایه ۲، سومین نمونه در نمایه ۳، و غیره. |
موجود نیست |
الزامی | رشته |
عنصر <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>| پیشفرض: | موجود نیست |
| حضور: | اختیاری. بااینحال، باید حداقل یکی از موارد زیر را اضافه کنید:
<URIPath>، <QueryParam>، <Header>،
<FormParam>، <JSONPayload>، یا
<XMLPayload>. |
| نوع: | موجود نیست |
مشخصهها
| مشخصه | شرح | پیشفرض | حضور | نوع |
|---|---|---|---|---|
| نام | نام سرایندی را که مقدار را از آن استخراج میکنید مشخص میکند. اگر چندین سرایند
نام یکسانی داشته باشند، از ارجاع نمایهدار استفاده کنید، جایی که نمونه اول سرایند
نمایه ندارد، نمونه دوم در نمایه ۲، نمونه سوم در نمایه ۳، و غیره. از
.values برای دریافت همه سرایندها در آرایه استفاده کنید. |
موجود نیست |
الزامی | رشته |
عنصر <FormParam>
(اختیاری، اما برای اطلاعات بیشتر، ردیف «حضور» را در جدول زیر ببینید.) مقدار را از پارامتر فرم مشخصشده پیام درخواست یا پاسخ استخراج میکند. پارامترهای فرم
فقط زمانی استخراج میشود که سرایند Content-Type پیام مشخصشده
application/x-www-form-urlencoded باشد.
<FormParam name="greeting">
<Pattern>hello {user}</Pattern>
</FormParam>| پیشفرض: | موجود نیست |
| حضور: | اختیاری. بااینحال، باید حداقل یکی از موارد زیر را اضافه کنید:
<URIPath>، <QueryParam>، <Header>،
<FormParam>، <JSONPayload>، یا
<XMLPayload>. |
| نوع: | موجود نیست |
مشخصهها
| مشخصه | شرح | پیشفرض | حضور | نوع |
|---|---|---|---|---|
| نام | نام پارامتر فرمی که مقدار را از آن استخراج میکنید. |
موجود نیست |
الزامی | رشته |
عنصر <Variable>
(اختیاری، اما برای اطلاعات بیشتر، ردیف «حضور» را در جدول زیر ببینید.) نام متغیری را که باید مقدار از آن استخراج شود مشخص میکند.
<Variable name="myVar">
<Pattern>hello {user}</Pattern>
</Variable>برای استخراج دو مقدار از متغیر:
<Variable name="myVar">
<Pattern>hello {firstName} {lastName}</Pattern>
</Variable>| پیشفرض: | موجود نیست |
| حضور: | اختیاری. بااینحال، باید حداقل یکی از موارد زیر را اضافه کنید:
<URIPath>، <QueryParam>، <Header>،
<FormParam>، <JSONPayload>، یا
<XMLPayload>. |
| نوع: | موجود نیست |
مشخصهها
| مشخصه | شرح | پیشفرض | حضور | نوع |
|---|---|---|---|---|
| نام | نام متغیری که مقدار باید از آن استخراج شود. |
موجود نیست |
الزامی | رشته |
عنصر <JSONPayload>
(اختیاری، اما برای اطلاعات بیشتر، ردیف «حضور» را در جدول زیر ببینید.) پیام با قالب 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>
(اختیاری، اما برای اطلاعات بیشتر، ردیف «حضور» را در جدول زیر ببینید.) پیام با قالب 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 |
۵۰۰ |
این خطا زمانی رخ میدهد که:
|
build |
steps.extractvariables.ImmutableVariable |
۵۰۰ | متغیری که در خطمشی استفاده شده است تغییرناپذیر است. خطمشی نتوانست این متغیر را تنظیم کند. | |
steps.extractvariables.InvalidJSONPath |
۵۰۰ | این خطا زمانی رخ میدهد که مسیر JSON نامعتبر در عنصر JSONPath خطمشی
استفاده شود. برای مثال، اگر بار JSON شیء Name را نداشته باشد،
اما Name را بهعنوان مسیر در خطمشی مشخص کنید، این خطا رخ میدهد. |
build |
steps.extractvariables.JsonPathParsingFailure |
۵۰۰ | این خطا زمانی رخ میدهد که خطمشی نتواند مسیر JSON را تجزیه کند و
دادهها را از متغیر جاری مشخصشده در عنصر Source استخراج کند. معمولاً این اتفاق زمانی میافتد که متغیر جاریسازی مشخصشده در عنصر Source در جاریسازی کنونی وجود نداشته باشد. |
build |
steps.extractvariables.SetVariableFailed |
۵۰۰ | این خطا زمانی رخ میدهد که خطمشی نتواند مقدار را روی متغیر تنظیم کند. این خطا معمولاً زمانی رخ میدهد که سعی میکنید مقادیر را به چندین متغیر اختصاص دهید که نام آنها با کلمات یکسان در قالب نقطهای تو در تو شروع میشود. | build |
steps.extractvariables.SourceMessageNotAvailable |
۵۰۰ | این خطا زمانی رخ میدهد که متغیر پیام
مشخصشده در عنصر Source خطمشی
یا:
|
build |
steps.extractvariables.UnableToCast |
۵۰۰ | اگر خطمشی نتواند مقدار استخراجشده را به متغیری تبدیل کند، این خطا رخ میدهد. معمولاً این اتفاق زمانی میافتد که سعی کنید مقدار یک نوع داده را روی متغیری از نوع داده دیگر تنظیم کنید. | build |
خطاهای استقرار
این خطاها ممکن است زمانی رخ دهند که یک پراکسی حاوی این خطمشی را مستقر میکنید.
| نام خطا | علت | رفع اشکال |
|---|---|---|
NothingToExtract |
اگر خطمشی هیچیک از عناصر URIPath، QueryParam،
Header، FormParam، XMLPayload، یا JSONPayload را نداشته باشد،
استقرار «پراکسی میانای برنامهسازی کاربردی» ناموفق خواهد بود، زیرا چیزی برای استخراج وجود ندارد. |
build |
NONEmptyPrefixMappedToEmptyURI |
این خطا زمانی رخ میدهد که خطمشی پیشوندی داشته باشد که در عنصر
Namespace تحت عنصر XMLPayload تعریف شده است، اما هیچ نشانی وب یکنواختی
تعریف نشده باشد. |
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 |
اگر خطمشی در هیچیک از عناصر خطمشی مثل QueryParam، Header، FormParam، یا Variable ویژگی name را نداشته باشد، درحالیکه این ویژگی الزامی است، استقرار پراکسی 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 نام خطا است، همانطور که در جدول خطاهای زمان اجرا در بالا فهرست شده است. نام خطا آخرین بخش کد خطا است. | 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>
طرحوارهها
موضوعات مرتبط
تجزیهوتحلیل محتوای پیام «میانای برنامهسازی کاربردی» بااستفاده از تجزیهوتحلیل سفارشی