سياسة استخراج المتغيرات

أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
info

الأدوات المستخدمة

تستخرج سياسة ExtractVariables المحتوى من طلب أو ردّ وتضبط قيمة متغيّر على هذا المحتوى. يمكنك استخراج أي جزء من الرسالة، بما في ذلك العناوين ومسارات URI وحمولات JSON/XML ومَعلمات النماذج ومَعلمات طلبات البحث. تعمل السياسة من خلال تطبيق نمط نصي على محتوى الرسالة، وعند العثور على تطابق، يتم ضبط متغيّر باستخدام محتوى الرسالة المحدّد.

على الرغم من أنّك تستخدم هذه السياسة غالبًا لاستخراج المعلومات من رسالة طلب أو ردّ، يمكنك أيضًا استخدامها لاستخراج المعلومات من مصادر أخرى، بما في ذلك الكيانات التي تم إنشاؤها بواسطة سياسة AccessEntity أو عناصر XML أو عناصر JSON.

بعد استخراج محتوى الرسالة المحدّد، يمكنك الرجوع إلى المتغيّر في سياسات أخرى كجزء من معالجة الطلب والرد.

الفيديوهات

شاهِد الفيديوهات التالية لمعرفة المزيد حول سياسة ExtractVariables.

فيديو الوصف
استخراج المتغيرات من حمولة XML استخرِج المتغيّرات من حمولة XML باستخدام سياسة "استخراج المتغيّرات".
استخراج المتغيّرات من حِمل JSON استخرِج المتغيرات من حمولة JSON باستخدام سياسة "استخراج المتغيرات".
استخراج المتغيرات من المَعلمات استخراج المتغيرات من المَعلمات، مثل مَعلمات طلب البحث أو العنوان أو النموذج أو عنوان URI
استخراج المتغيرات من المَعلمات المتعدّدة القيم استخراج المتغيّرات من المَعلمات المتعدّدة القيم
استخراج المتغيرات من مَعلمة طلب البحث (Classic Edge) استخراج متغيرات من مَعلمة طلب بحث باستخدام واجهة مستخدم Classic Edge
استخراج المتغيرات من حمولة XML أو JSON (Classic Edge) استخرِج المتغيّرات من حمولة XML أو JSON باستخدام واجهة مستخدم Classic Edge.

نماذج

توضّح عيّنات رموز السياسات البرمجية هذه كيفية استخراج المتغيّرات من الأنواع التالية من العناصر:

GitHub

تشير هذه الروابط إلى عيّنات تعمل لوكيل واجهة برمجة التطبيقات يمكنك نشرها وتشغيلها على Edge. تستخدم هذه السياسات ExtractVariables ويمكن العثور عليها في مستودع api-platform-samples على GitHub. توضّح ملفات README كيفية استخدام سياسة ExtractVariables في كل حالة، وكيفية نشر كل نموذج وتشغيله.

عناوين URI

<ExtractVariables name="ExtractVariables-1">
   <DisplayName>Extract a portion of the url path</DisplayName>
   <Source>request</Source>
   <URIPath>
      <Pattern ignoreCase="true">/accounts/{id}</Pattern>
   </URIPath>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

ضَع في اعتبارك نموذج رمز السياسة أعلاه. يخبر العنصر <URIPath> سياسة ExtractVariables باستخراج المعلومات من مسار URI. تحدّد السمة <Pattern> النمط الذي سيتم تطبيقه على مسار معرّف الموارد المنتظم (URI). يتم التعامل مع النمط كنموذج بسيط، وتشير الأقواس المعقوفة إلى الجزء المتغيّر من مسار URI.

يتم تحديد اسم المتغيّر المطلوب ضبطه من خلال القيمة المحدّدة في العنصر <VariablePrefix>، بالإضافة إلى القيمة المضمّنة بين قوسَين معقوفَين {} في العنصر <Pattern>. يتم الربط بين القيمتين بنقطة فاصلة، ما يؤدي إلى اسم متغيّر مثل urirequest.id. في حال عدم توفّر العنصر <VariablePrefix>، يكون اسم المتغيّر هو القيمة المضمّنة بين قوسين معقوفين.

لنفترض أنّ رمز السياسة النموذجية أعلاه يعمل مع الطلب الوارد التالي:

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

لنفترض أنّ basepath لـ API Proxy هو /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>

لنفترض أنّ تصميم واجهة برمجة التطبيقات يتيح لك تحديد مَعلمات طلب بحث متعدّدة بالاسم نفسه. يمكنك استخدام هذه السياسة لاستخراج قيمة مثيلات متعدّدة من مَعلمة طلب البحث "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>

لنفترض أنّ واجهة برمجة التطبيقات تستخدم رموز OAuth المميزة للإصدار 2.0. لنفترض أنّ نموذج رمز السياسة أعلاه يعمل مع طلب يحمل رمز OAuth 2.0 المميز يتضمّن عنوانًا على النحو التالي: Authorization: Bearer TU08xptfFfeM7aS0xHqlxTgEAdAM.

بصفتك مصمّم واجهة برمجة التطبيقات، لنفترض أنّك تريد استخدام قيمة الرمز المميّز (وليس العنوان بأكمله) كمفتاح في عملية بحث في ذاكرة التخزين المؤقت. يمكنك استخدام رمز سياسة 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

ينشئ مطوّرو واجهات برمجة التطبيقات خوادم وكيلة لواجهات برمجة التطبيقات تتصرف بشكل مختلف استنادًا إلى محتوى الرسائل، بما في ذلك العناوين ومسارات معرّف الموارد المنتظم (URI) والحمولات ومعلَمات طلب البحث. في كثير من الأحيان، يستخرج الخادم الوكيل جزءًا من هذا المحتوى لاستخدامه في عبارة شرطية. استخدِم سياسة ExtractVariables لتنفيذ ذلك.

عند تحديد سياسة ExtractVariables، يمكنك اختيار ما يلي:

  • أسماء المتغيّرات المطلوب ضبطها
  • مصدر المتغيّرات
  • عدد المتغيّرات المطلوب استخراجها وضبطها

عند تنفيذ السياسة، يتم تطبيق نمط نصي على المحتوى، وعند العثور على تطابق، يتم ضبط قيمة المتغيّر المحدّد باستخدام المحتوى. يمكن أن تستهلك السياسات والرموز الأخرى هذه المتغيّرات لتفعيل السلوك الديناميكي أو لإرسال بيانات المؤسسة إلى Edge API Analytics.

للاطّلاع على كيفية استخدام ExtractVariables لإنشاء تقارير &quot;إحصاءات Google&quot; المستندة إلى المحتوى، راجِع تحليل محتوى رسائل واجهة برمجة التطبيقات باستخدام إحصاءات مخصّصة.

النطاق

تتضمّن المتغيّرات التي يتم ضبطها باستخدام سياسة 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/". على سبيل المثال، لنفترض أنّ المسار الأساسي لخادم وكيل واجهة برمجة التطبيقات هو /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>

لنفترض أنّ خادمًا وكيلاً لواجهة برمجة التطبيقات يتضمّن مسارًا أساسيًا /basepath/v1، وأنّ عنوان URL لطلب البيانات الواردة إلى الخادم الوكيل لواجهة برمجة التطبيقات يتّخذ الشكل التالي:

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>

لنفترض مرة أخرى أنّ هناك خادمًا وكيلاً لواجهة برمجة التطبيقات يتضمّن مسارًا أساسيًا هو /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، يمكنك استخدام الفهارس، حيث لا يتضمّن المثال الأول لمَعلمة طلب البحث أي فهرس، بينما يكون المثال الثاني في الفهرس 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". إذا تم حذف مَعلمة طلب البحث الثانية من الطلب، سيكون المتغيّر 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={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> في السياسة، ما يتيح لك ملء عدة متغيرات من سياسة واحدة. إذا لم يتم تقييم العلامة <المتغير> إلى حقل صالح في 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

الاسم الداخلي للسياسة. يمكن لقيمة السمة name أن تحتوي على أحرف وأرقام ومسافات وواصلات وشرطات سفلية ونقاط. لا يمكن لهذه القيمة يتجاوز 255 حرفًا.

يمكنك، إذا أردت، استخدام العنصر <DisplayName> لتصنيف السياسة محرر الخادم الوكيل لواجهة مستخدم الإدارة باسم مختلف بلغة طبيعية.

لا ينطبق مطلوب
continueOnError

اضبط القيمة على false لعرض رسالة خطأ عند تعذُّر تنفيذ سياسة. هذا متوقّع السلوك في معظم السياسات.

يمكنك ضبط القيمة على true لمواصلة تنفيذ المسار حتى بعد تطبيق إحدى السياسات. فشل.

خطأ اختياري
enabled

اضبط القيمة على true لفرض السياسة.

اضبط القيمة على false من أجل إيقاف السياسة. لن تكون السياسة ويتم فرضها حتى لو ظلت مرتبطة بتدفق.

صحيح اختياري
async

تم إيقاف هذه السمة نهائيًا.

خطأ منهي العمل به

&lt;DisplayName&gt; عنصر

استخدِمه مع السمة name لتصنيف السياسة في إدارة خادم وكيل لواجهة المستخدم باسم مختلف بلغة طبيعية.

<DisplayName>Policy Display Name</DisplayName>
تلقائي

لا ينطبق

إذا لم تستخدم هذا العنصر، سيتم ضبط قيمة السمة name للسياسة على النحو التالي: استخدام البيانات المختلفة.

التواجد في المنزل اختياري
النوع سلسلة

العنصر <Source>

(اختياري) تحدّد هذه السمة المتغيّر الذي سيتم تحليله. تكون القيمة التلقائية لـ <Source> هي message. قيمة message حساسة للسياق. في مسار الطلب، يتم تحويل message إلى رسالة الطلب. في مسار الردّ، يتم تحويل message إلى رسالة الردّ.

على الرغم من أنّك تستخدم هذه السياسة غالبًا لاستخراج المعلومات من رسالة طلب أو ردّ، يمكنك استخدامها لاستخراج المعلومات من أي متغيّر. على سبيل المثال، يمكنك استخدامها لاستخراج المعلومات من كيان تم إنشاؤه بواسطة سياسة AccessEntity، أو من البيانات التي تعرضها سياسة Service Callout، أو لاستخراج المعلومات من عنصر XML أو JSON.

إذا تعذّر حلّ <Source> أو تم حله إلى نوع غير نوع الرسالة، لن تستجيب السياسة.

<Source clearPayload="true|false">request</Source>
القيمة التلقائية: رسالة
الظهور: اختياري
النوع: سلسلة

السمات

السمة الوصف تلقائي التواجد في المنزل النوع
clearPayload

اضبط القيمة على true إذا أردت محو الحمولة المحدّدة في <Source> بعد استخراج البيانات منها.

لا تستخدِم الخيار <clearPayload> إلا إذا لم تكن رسالة المصدر مطلوبة بعد تنفيذ ExtractVariables. ضبط القيمة على true يؤدي إلى إخلاء مساحة الذاكرة التي تستخدمها الرسالة.

خطأ

اختياري منطقي

العنصر <VariablePrefix>

(اختياري) يتم إنشاء اسم المتغيّر الكامل من خلال دمج <VariablePrefix> ونقطة والاسم الذي تحدّده بين {قوسين معقوفين} في العنصر <Pattern> أو العنصر <Variable>. على سبيل المثال: myprefix.id أو myprefix.dbncode أو myprefix.oauthtoken.

<VariablePrefix>myprefix</VariablePrefix>

على سبيل المثال، لنفترض أنّ قيمة الاسم هي "user".

  • إذا لم يتم تحديد <VariablePrefix>، يتم تعيين القيم المستخرَجة إلى متغيّر باسم user.
  • إذا تم تحديد <VariablePrefix> كبادئة، سيتم تعيين القيم المستخرَجة إلى متغيّر اسمه myprefix.user.
القيمة التلقائية: لا ينطبق
الظهور: اختياري
النوع: سلسلة

العنصر <IgnoreUnresolvedVariables>

(اختياري) اضبط القيمة على true للتعامل مع أي متغيّر لا يمكن حله على أنّه سلسلة فارغة (null). اضبط القيمة على 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 لخادم وكيل واجهة برمجة التطبيقات. إذا تم تحديد نوع الرسالة المصدر على أنّه رد، لن يؤدي هذا العنصر أي إجراء.

<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>.
النوع: لا ينطبق

السمات

السمة الوصف تلقائي التواجد في المنزل النوع
الاسم تحدّد هذه السمة اسم مَعلمة طلب البحث. إذا كانت عدة معلَمات طلب بحث تحمل الاسم نفسه، استخدِم الإشارة المفهرسة، حيث لا يتضمّن المثال الأول لمعلَمة طلب البحث أي فهرس، بينما يتضمّن المثال الثاني الفهرس 2، والثالث الفهرس 3، وهكذا.

لا ينطبق

مطلوب سلسلة

عنصر <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>.
النوع: لا ينطبق

السمات

السمة الوصف تلقائي التواجد في المنزل النوع
الاسم تحدّد هذه السمة اسم العنوان الذي تستخرج منه القيمة. إذا كانت هناك عناوين متعددة تحمل الاسم نفسه، استخدِم الإشارة المفهرسة، حيث لا يتضمّن المثال الأول من العنوان أي فهرس، بينما يتضمّن المثال الثاني الفهرس 2، والثالث الفهرس 3، وهكذا. استخدِم .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.
النوع: لا ينطبق

السمات

السمة الوصف تلقائي التواجد في المنزل النوع
الاسم

تحدّد هذه السمة اسم المتغيّر الذي سيتم تعيين القيمة المستخرَجة له.

الاسم

مطلوب سلسلة
النوع تحدّد هذه السمة نوع بيانات قيمة المتغيّر. لا ينطبق اختياري

سلسلة. اختَر من بين:

  • سلسلة
  • قيمة منطقية
  • عدد صحيح
  • طويلة
  • عدد عائم
  • مزدوج
  • nodeset (إرجاع جزء JSON)

العنصر <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

اضبط القيمة على true لإيقاف تقييم 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>
القيمة التلقائية: لا ينطبق
الظهور: اختياري
النوع: لا ينطبق

السمات

السمة الوصف تلقائي التواجد في المنزل النوع
الاسم

تحدّد هذه السمة اسم المتغيّر الذي سيتم تعيين القيمة المستخرَجة له.

الاسم

مطلوب سلسلة
النوع تحدّد هذه السمة نوع بيانات قيمة المتغيّر. منطقي اختياري

سلسلة. اختَر من بين:

  • سلسلة
  • قيمة منطقية
  • عدد صحيح
  • طويلة
  • عدد عائم
  • مزدوج
  • nodeset (إرجاع مقتطف XML)

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

(مطلوبة ضمن العنصر XMLPayload:Variable) تحدّد هذه السمة XPath المعرَّف للمتغيّر. يُسمح فقط باستخدام تعبيرات XPath 1.0.

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

مثال مع مساحة اسم في حال استخدام مساحات الأسماء في تعبيرات XPath، يجب تعريف مساحات الأسماء في القسم <XMLPayload><Namespaces> من السياسة.

<Variable name="name" type="boolean">
   <XPath>/foo:test/foo:example</XPath>
</Variable>
القيمة التلقائية: لا ينطبق
الظهور: مطلوب
النوع: سلسلة

مرجع الخطأ

يصف هذا القسم رموز الخطأ ورسائل الخطأ التي يتم عرضها ومتغيرات الأخطاء التي تم ضبطها من خلال Edge عندما تؤدي هذه السياسة إلى ظهور خطأ. من المهم معرفة هذه المعلومات إذا كنت تضع قواعد خطأ التعامل مع الأخطاء. للحصول على مزيد من المعلومات، يمكنك الاطّلاع على ما تحتاج إلى معرفته حول أخطاء السياسة والتعامل مع المعالجة والأخطاء.

أخطاء بيئة التشغيل

يمكن أن تحدث هذه الأخطاء عند تنفيذ السياسة.

رمز الخطأ رموز حالة HTTP السبب إصلاح
steps.extractvariables.ExecutionFailed 500

يحدث هذا الخطأ في الحالات التالية:

  • حمولة البيانات المُدخلة (JSON أو XML) فارغة.
  • الإدخال (JSON وXML وغيرهما) الذي تم إدخاله إلى السياسة غير صالح أو مكتوب بشكل غير صحيح.
steps.extractvariables.ImmutableVariable 500 يكون المتغيّر المستخدَم في السياسة غير قابل للتغيير. تعذَّر على السياسة ضبط هذا الإعداد المتغير.
steps.extractvariables.InvalidJSONPath 500 يحدث هذا الخطأ في حال استخدام مسار JSON غير صالح في العنصر JSONPath ضمن . على سبيل المثال، إذا لم تحتوي حمولة JSON على الكائن Name، ولكن إذا حدّدت Name كمسار في السياسة، سيحدث هذا الخطأ.
steps.extractvariables.JsonPathParsingFailure 500 يحدث هذا الخطأ عندما يتعذّر على السياسة تحليل مسار JSON استخراج البيانات من متغيّر التدفق المحدَّد في العنصر Source عادةً ما تكون هذه إذا لم يكن متغيّر التدفق المحدّد في العنصر Source متاحًا في العنصر الحالي التدفق.
steps.extractvariables.SetVariableFailed 500 يحدث هذا الخطأ إذا لم تتمكّن السياسة من ضبط القيمة على متغيّر. يحدث الخطأ بشكل عام إذا حاولت تعيين قيم لمتغيرات متعددة تبدأ أسماؤها باستخدام الكلمات نفسها بتنسيق مدمج ومفصول بالنقاط.
steps.extractvariables.SourceMessageNotAvailable 500 يحدث هذا الخطأ إذا كانت الرسالة المتغيّر المحدَّد في العنصر Source في السياسة تكون إما:
  • خارج النطاق (لا تتوفّر خلال المسار المحدّد الذي يتم فيه تنفيذ السياسة)
  • يتعذّر حلّها (غير محدَّد)
steps.extractvariables.UnableToCast 500 يحدث هذا الخطأ إذا تعذَّر على السياسة بث الملف المستخلص إلى متغير. ويحدث هذا الأمر عادةً إذا حاولت تعيين قيمة نوع بيانات إلى متغير من نوع بيانات آخر.

أخطاء النشر

يمكن أن تحدث هذه الأخطاء عند نشر خادم وكيل يحتوي على هذه السياسة.

اسم الخطأ السبب إصلاح
NothingToExtract إذا كانت السياسة لا تحتوي على أي من العناصر URIPath أو QueryParam، Header أو FormParam أو XMLPayload أو JSONPayload، فشل نشر خادم وكيل واجهة برمجة التطبيقات، نظرًا لعدم وجود أي شيء لاستخراجه.
NONEmptyPrefixMappedToEmptyURI يحدث هذا الخطأ إذا كانت السياسة تحتوي على بادئة محددة في عنصر Namespace ضمن العنصر XMLPayload، ولكن لم يتم تحديد عنوان URI محددة.
DuplicatePrefix يحدث هذا الخطأ إذا كانت السياسة تحتوي على البادئة نفسها المحدَّدة أكثر من مرة واحدة في العنصر Namespace ضمن العنصر XMLPayload.
NoXPathsToEvaluate وإذا لم تتضمّن السياسة عنصر XPath في XMLPayload، ثم تعذَّر نشر الخادم الوكيل لواجهة برمجة التطبيقات مع ظهور هذا الخطأ.
EmptyXPathExpression إذا كانت السياسة تتضمّن تعبير XPath فارغًا في XMLPayload فسيتم إخفاق نشر الخادم الوكيل لواجهة برمجة التطبيقات.
NoJSONPathsToEvaluate وإذا لم تتضمّن السياسة عنصر JSONPath في JSONPayload، ثم تعذَّر نشر الخادم الوكيل لواجهة برمجة التطبيقات مع ظهور هذا الخطأ.
EmptyJSONPathExpression وإذا كانت السياسة تتضمّن تعبير XPath فارغًا في XMLPayload، ثم تعذَّر نشر الخادم الوكيل لواجهة برمجة التطبيقات.
MissingName إذا لم تتضمّن السياسة السمة name في أي من السياسة عناصر مثل QueryParam أو Header أو FormParam أو Variable، حيثما يكون ذلك مطلوبًا، سيتعذّر نشر الخادم الوكيل لواجهة برمجة التطبيقات.
PatternWithoutVariable إذا لم يتم تحديد متغيّر لهذه السياسة في العنصر Pattern، فسيفشل نشر الخادم الوكيل لواجهة برمجة التطبيقات. يتطلب العنصر Pattern اسم المتغير الذي سيتم فيه تخزين البيانات المستخرجة.
CannotBeConvertedToNodeset إذا تضمّنت السياسة تعبير XPath حيث يكون النوع Variable بأنها nodeset، ولكن لا يمكن تحويل التعبير إلى مجموعة العقدة، فسيفشل نشر الخادم الوكيل لواجهة برمجة التطبيقات.
JSONPathCompilationFailed لم تتمكّن السياسة من تجميع مسار JSON محدَّد.
InstantiationFailed تعذّر إنشاء مثيل للسياسة.
XPathCompilationFailed إذا كانت البادئة أو القيمة المستخدمة في العنصر XPath ليست جزءًا من أي من بمساحات الاسم المعلَن عنها في السياسة، فإن نشر الخادم الوكيل لواجهة برمجة التطبيقات فشل.
InvalidPattern إذا كان تعريف العنصر Pattern غير صالح في أي من العناصر مثل URIPath، QueryParam وHeader وFormParam وXMLPayload أو JSONPayload ضمن السياسة، ثم نشر تعذّر الخادم الوكيل لواجهة برمجة التطبيقات.

متغيّرات الأخطاء

يتم ضبط هذه المتغيّرات عندما تؤدي هذه السياسة إلى ظهور خطأ في وقت التشغيل. لمزيد من المعلومات يمكنك الاطّلاع على ما تحتاج إلى معرفتها حول أخطاء السياسة.

المتغيرات المكان مثال
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>

المخططات

مواضيع ذات صلة

تحليل محتوى رسائل واجهة برمجة التطبيقات باستخدام إحصاءات مخصّصة

مرجع المتغيّرات