سياسة AccessEntity

يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
المعلومات

الموضوع

لاسترداد الملفات الشخصية للكيانات التي تحدّدها من مخزن بيانات Apigee Edge. تضع السياسة الملف الشخصي في متغيّر يتبع اسمه التنسيق AccessEntity.{policy_name}. يمكنك استخدام AccessEntity للوصول إلى الملفات الشخصية للكيانات التالية:

  • تطبيق
  • منتج واجهة برمجة التطبيقات
  • الشركة
  • مطوّر الشركة
  • مفتاح العميل
  • المطوّر

تعمل السياسة AccessEntity كبحث في قاعدة بيانات وقت التشغيل استنادًا إلى السياسة. يمكنك استخدام معلومات الملف الشخصي التي تعرضها هذه السياسة لتفعيل السلوك الديناميكي، مثل التوجيه المشروط لنقطة النهاية وتنفيذ التدفق وتنفيذ السياسات.

يمكنك استخدام السياسة AccessEntity للحصول على بيانات الملف الشخصي للكيان بتنسيق XML ووضعها في متغيّر. يمكنك تحديد الكيان الذي تريد الحصول عليه من خلال تحديد نوع الكيان ومعرّف واحد أو أكثر يحدّد الكيان الذي تريده من النوع. يمكنك لاحقًا في سياسة أخرى استرداد بيانات الملف الشخصي للكيان باستخدام سياسة أخرى، مثل سياسة استخراجVariables أو سياسة AssignMessage.

عيّنات

تعرض النماذج التالية السمة AccessEntity التي يتم استخدامها مع السياستَين ExtractVariables وAssignMessage لاستخراج عنوان البريد الإلكتروني الخاص بالمطوّر وإضافته إلى عنوان HTTP.

الحصول على عنوان بريد إلكتروني للمطوِّر لاستخدامه في سياسات أخرى

يمكنك إعداد سياسة AccessEntity لتحديد الملف الشخصي للكيان الذي تريد الحصول عليه من Edge، بالإضافة إلى مكان وضع بيانات الملف الشخصي.

في المثال التالي، تحصل السياسة على ملف شخصي للكيان developer باستخدام مفتاح واجهة برمجة التطبيقات الذي يتم تمريره كمَعلمة طلب بحث لتحديد مطوّر البرامج. يتم وضع الملف الشخصي في متغيّر يتبع اسمه النموذج AccessEntity.{policy_name}. وبالتالي، سيكون المتغيّر الذي تم ضبطه من خلال هذه السياسة هو AccessEntity.GetDeveloperProfile.

<AccessEntity name="GetDeveloperProfile">
  <!-- This is the type entity whose profile we need to pull from the Edge datastore. -->
  <EntityType  value="developer"/>
  <!-- We tell the policy to use the API key (presented as query parameter) to identify the developer. -->
  <EntityIdentifier ref="request.queryparam.apikey" type="consumerkey"/> 
</AccessEntity>

استخدِم سياسة أخرى لاسترداد قيمة الملف الشخصي للكيان من المتغيّر الذي تم ضبطه من خلال AccessEntity.

في المثال التالي، تسترد سياسة ExtractVariables قيمة من المتغيّر AccessEntity.GetDeveloperProfile الذي تم ضبطه سابقًا على AccessEntity.

يُرجى العِلم أنّ القيمة التي يتم استردادها يتم تحديدها كتعبير XPath في العنصر XMLPayload. ويتم وضع القيمة المستخرجة في متغيّر developer.email.

<ExtractVariables name="SetDeveloperProfile">
  <!-- The source element points to the variable populated by AccessEntity policy. 
  The format is <policy-type>.<policy-name>.
  In this case, the variable contains the whole developer profile. -->
  <Source>AccessEntity.GetDeveloperProfile</Source> 
  <VariablePrefix>developer</VariablePrefix>
  <XMLPayload>
    <Variable name="email" type="string"> 
        <!-- You parse elements from the developer profile using XPath. -->
      <XPath>/Developer/Email</XPath>
    </Variable>
  </XMLPayload>
</ExtractVariables>

تعمل سياسة AssignMessage التالية على استرداد البريد الإلكتروني الخاص بالمطوّر الذي تم ضبطه من خلال سياسة استخراج المتغيّرات.

<!-- We'll use this policy to return the variables set in the developer profile, 
just so that we can easily see them in the response. -->
<AssignMessage name="EchoVariables">
  <AssignTo createNew="false" type="response"></AssignTo>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <Set>
    <Headers>
      <Header name="X-Developer-email">{developer.email}</Header>
    </Headers>
  </Set>
</AssignMessage>

مرجع العنصر

المعلومات الأساسية لبنية سياسة AccessEntity هي:

<AccessEntity name="policy_name">
  <EntityType  value="entity_type"/>
  <EntityIdentifier ref="entity_identifier" type="identifier_type"/> 
  <SecondaryIdentifier ref="secondary_identifier" type="identifier_type"/>
</AccessEntity>

يمكنك الوصول إلى عناصر متعدّدة من النوع نفسه من خلال تجميعها في عنصر Identifiers:

<AccessEntity name="name_of_the_policy">
  <EntityType  value="type_of_entity"/>
  <Identifiers>
    <Identifier>
      <EntityIdentifier ref="reference_to_entity_identifier" type*="identifier_type"/> 
      <SecondaryIdentifier ref="reference_to_secondary_entity_identifier" type="identifier_type"/><!-- optional -->
    </Identifier >
    <Identifier>
      <EntityIdentifier ref="reference_to_entity_identifier" type*="identifier_type"/> 
      <SecondaryIdentifier ref="reference_to_secondary_entity_identifier" type="identifier_type"/><!-- optional -->
    </Identifier >
  </Identifiers>
</AccessEntity>

سمات <AccessEntity>

<AccessEntity async="false" continueOnError="false" enabled="true" name="policy_name">

يوضِّح الجدول التالي السمات الشائعة لجميع العناصر الرئيسية للسياسة:

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

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

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

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

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

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

false إجراء اختياري
enabled

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

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

صحيح إجراء اختياري
async

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

false منهي العمل به

العنصر <DisplayName>

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

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

لا ينطبق

إذا لم تستخدم هذا العنصر، سيتم استخدام قيمة السمة name الخاصة بالسياسة.

التواجد في المنزل إجراء اختياري
Type سلسلة

العنصر <EntityIdentifier>

تحدد هذه السمة الكيان المعيّن -- من النوع المحدد في EntityType -- للحصول عليه.

<EntityIdentifier ref="value_variable" type="identifier_type"/> 

تلقائي

لا ينطبق

الحضور

مطلوبة

النوع

سلسلة

السمات

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

تمثّل هذه السمة المتغيّر الذي يوفّر مصدر المعرّف، مثل request.queryparam.apikey.

لا ينطبق مطلوبة. سلسلة
كتابة تمثّل هذه السمة النوع الذي يعبئه المتغيّر في السمة ref، مثل consumerkey. راجِع أنواع الكيانات ومعرّفاتها للحصول على قائمة بالقيم. مطلوبة. سلسلة

مثال

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AccessEntity async="false" continueOnError="false" enabled="true" name="GetCompany">
    <DisplayName>GetCompanyProfile</DisplayName>
    <EntityType value="company"></EntityType>
    <EntityIdentifier ref="request.queryparam.apikey" type="consumerkey"/>
</AccessEntity>

عنصر <EntityType>

تحدد نوع الكيان المطلوب استرداده من مخزن البيانات.

<EntityType  value="entity_type"/>

تلقائي

لا ينطبق

الحضور

مطلوبة

النوع

سلسلة

استخدِم العنصر EntityIdentifier لتحديد الكيان الذي تريده من النوع المعيّن. للاطّلاع على مرجع لأنواع الكيانات، يُرجى الاطّلاع على أنواع الكيانات ومعرّفاتها.

السمات

السمة الوصف تلقائي التواجد في المنزل Type
القيمة أحد أنواع الكيانات المتاحة. للاطّلاع على قائمة، يمكنك مراجعة أنواع الكيانات ومعرّفاتها. بلا عُري مطلوبة. سلسلة

عنصر <secondaryidentifier>

جنبًا إلى جنب مع EntityIdentifier، تحدّد قيمة لتحديد المثيل المطلوب من EntityType المحدّد.

<SecondaryIdentifier ref="value_variable" type="identifier_type"/>

تلقائي

لا ينطبق

الحضور

إجراء اختياري

النوع

سلسلة

إنّ استخدام السمة SecondaryIdentifier عند تحديد عنصر EntityIdentifier فقط لا يضمن حصولك على كيان واحد. لمزيد من المعلومات، راجِع حصر النتائج باستخدام معرّفات ثانوية.

ولا يمكن استخدام عناصر SecondaryIdentifier متعدّدة.

السمات

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

تمثّل هذه السمة المتغيّر الذي يوفّر مصدر المعرّف، مثل request.queryparam.apikey.

لا ينطبق مطلوبة. سلسلة
كتابة تمثّل هذه السمة النوع الذي يعبئه المتغيّر في السمة ref، مثل consumerkey. راجِع أنواع الكيانات ومعرّفاتها للحصول على قائمة بالقيم. مطلوبة. سلسلة

مثال

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AccessEntity async="false" continueOnError="false" enabled="true" name="GetAPIProduct">
    <DisplayName>GetAPIProduct</DisplayName>
    <EntityType value="apiproduct"></EntityType>
    <EntityIdentifier ref="developer.app.name" type="appname"/> 
    <SecondaryIdentifier ref="developer.id" type="developerid"/> 
</AccessEntity>

ملاحظات الاستخدام

تضييق نطاق النتائج باستخدام المعرّفات الثانوية

بالنسبة إلى بعض الكيانات، قد لا يكون معرّف واحد محدّدًا بما يكفي للحصول على الكيان الذي تريده. وفي هذه الحالات، يمكنك استخدام معرّف ثانوي لتضييق نطاق النتائج.

قد تبدو عملية ضبط السياسة الأولى التي قد تكون واسعة النطاق كما يلي:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AccessEntity async="false" continueOnError="false" enabled="true" name="GetApp">
    <DisplayName>GetAppProfile</DisplayName>
    <EntityType value="apiproduct"></EntityType>
    <EntityIdentifier ref="request.queryparam.apikey" type="consumerkey"/>
</AccessEntity>

بما أنّه يمكن ربط تطبيق بعدة منتجات لواجهة برمجة التطبيقات، قد لا يؤدي استخدام معرّف التطبيق فقط إلى عرض منتج واجهة برمجة التطبيقات الذي تريده (يمكنك الحصول فقط على المنتج الأول من بين عدة منتجات متطابقة).

بدلًا من ذلك، للحصول على نتيجة أكثر دقة، يمكنك استخدام SecondaryIdentifier. على سبيل المثال، قد يكون لديك متغيّرا appname وdeveloperid في المسار لأنّه تتم تعبئةهما تلقائيًا أثناء تبادل OAuth 2.0. يمكنك استخدام قيم هذه المتغيّرات في سياسة AccessEntity للحصول على تفاصيل الملف الشخصي في التطبيق الذي يقدّم الطلب.

قد تظهر إعدادات السياسة الأكثر تحديدًا على النحو التالي:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AccessEntity async="false" continueOnError="false" enabled="true" name="GetApp">
    <DisplayName>GetAppProfile</DisplayName>
    <EntityType value="apiproduct"></EntityType>
    <EntityIdentifier ref="developer.app.name" type="appname"/> 
    <SecondaryIdentifier ref="developer.id" type="developerid"/> 
</AccessEntity>

أنواع الكيانات والمعرّفات المتوافقة

تتيح AccessEntity أنواع الكيانات والمعرّفات التالية:

قيمة EntityType أنواع معرّفات الكيانات أنواع المعرّفات الثانوية
apiproduct appid apiresource
apiproductname
appname apiresource
developeremail
developerid
companyname
consumerkey apiresource
app appid
appname developeremail
developerid
companyname
consumerkey
authorizationcode authorizationcode
company appid
company
consumerkey
companydeveloper companyname
consumerkey consumerkey
consumerkey_scope consumerkey
developer appid
consumerkey
developeremail
developerid
requesttoken requesttoken consumerkey
verifier verifier

مثال على ملف XML للملف الشخصي للكيان

لاسترداد القيمة التي تريدها للملف الشخصي للكيان باستخدام XPath، ستحتاج إلى معرفة معلومات حول بنية ملف XML الخاص بالملف الشخصي. للاطّلاع على مثال على البنية، استخدِم طلب بيانات من واجهة برمجة التطبيقات للإدارة للحصول على XML للكيان الذي تريده. للحصول على التفاصيل، يُرجى الرجوع إلى مرجع واجهة برمجة التطبيقات للإدارة.

تتضمن الأقسام التالية رمزًا لاستدعاءات واجهة برمجة التطبيقات، بالإضافة إلى مثال على XML من الاستدعاء.

التطبيقات

$ curl -H "Accept:text/xml" -X GET \
https://api.enterprise.apigee.com/v1/o/{org_name}/apps/{app_id} \
-u email:password

راجِع أيضًا الحصول على التطبيق في مؤسسة حسب رقم تعريف التطبيق في مرجع واجهة برمجة تطبيقات إدارة Edge.

أو الصيغة التالية:

$ curl -H "Accept:text/xml" -X GET \
https://api.enterprise.apigee.com/v1/o/{org_name}/developers/{developer_email}/apps/{app_name} \
-u email:password

ويمكنك أيضًا الاطّلاع على الحصول على تفاصيل تطبيق المطور في مرجع واجهة برمجة تطبيقات إدارة Edge.

نموذج للملف الشخصي:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<App name="thomas-app">
    <AccessType>read</AccessType>
    <ApiProducts/>
    <Credentials>
        <Credential>
            <Attributes/>
            <ConsumerKey>wrqOOOiPArFI0WRoB1gAJMRbOguekJ5w</ConsumerKey>
            <ConsumerSecret>WvOhDrJ8m6kzz7Ni</ConsumerSecret>
            <ApiProducts>
                <ApiProduct>
                    <Name>FreeProduct</Name>
                    <Status>approved</Status>
                </ApiProduct>
            </ApiProducts>
            <Scopes/>
            <Status>approved</Status>
        </Credential>
    </Credentials>
    <AppFamily>default</AppFamily>
    <AppId>ab308c13-bc99-4c50-8434-0e0ed1b86075</AppId>
    <Attributes>
        <Attribute>
            <Name>DisplayName</Name>
            <Value>Tom's Weather App</Value>
        </Attribute>
    </Attributes>
    <CallbackUrl>http://tom.app/login</CallbackUrl>
    <CreatedAt>1362502872727</CreatedAt>
    <CreatedBy>admin@apigee.com</CreatedBy>
    <DeveloperId>PFK8IwOeAOW01JKA</DeveloperId>
    <LastModifiedAt>1362502872727</LastModifiedAt>
    <LastModifiedBy>admin@apigee.com</LastModifiedBy>
    <Scopes/>
    <Status>approved</Status>
</App>

منتج واجهة برمجة التطبيقات

$ curl  -H "Accept:text/xml" -X GET \
https://api.enterprise.apigee.com/v1/o/{org_name}/apiproducts/{apiproduct_name} \
-u email:password

راجِع أيضًا الحصول على منتج واجهة برمجة التطبيقات في مرجع واجهة برمجة التطبيقات لإدارة Edge.

يسترد نموذج XPath هذا مورد واجهة برمجة التطبيقات الثاني (URI) من منتج واجهة برمجة التطبيقات المسمى weather_free:

/ApiProduct['@name=weather_free']/ApiResources/ApiResource[1]/text()

نموذج الملف الشخصي الذي يتم عرضه بتنسيق XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ApiProduct name="weather_free">
    <ApiResources>
        <ApiResource>/forecastrss, /reports</ApiResource>
    </ApiResources>
    <ApprovalType>auto</ApprovalType>
    <Attributes>
        <Attribute>
            <Name>description</Name>
            <Value>Introductory API Product</Value>
        </Attribute>
        <Attribute>
            <Name>developer.quota.interval</Name>
            <Value>1</Value>
        </Attribute>
        <Attribute>
            <Name>developer.quota.limit</Name>
            <Value>1</Value>
        </Attribute>
        <Attribute>
            <Name>developer.quota.timeunit</Name>
            <Value>minute</Value>
        </Attribute>
        <Attribute>
            <Name>servicePlan</Name>
            <Value>Introductory</Value>
        </Attribute>
    </Attributes>
    <CreatedAt>1355847839224</CreatedAt>
    <CreatedBy>andrew@apigee.com</CreatedBy>
    <Description>Free API Product</Description>
    <DisplayName>Free API Product</DisplayName>
    <Environments/>
    <LastModifiedAt>1355847839224</LastModifiedAt>
    <LastModifiedBy>andrew@apigee.com</LastModifiedBy>
    <Proxies/>
    <Scopes/>
</ApiProduct>

الشركة

$ curl   -H "Accept:text/xml" -X GET \
https://api.enterprise.apigee.com/v1/o/{org_name}/companies/{company_name} \
-u email:password

راجِع أيضًا الحصول على تفاصيل الشركة في مرجع واجهة برمجة تطبيقات إدارة Edge.

نموذج للملف الشخصي:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Company name="theramin">
    <Apps/>
    <DisplayName>Theramin Corporation</DisplayName>
    <Organization>apigee-pm</Organization>
    <Status>active</Status>
    <Attributes>
        <Attribute>
            <Name>billing_code</Name>
            <Value>13648765</Value>
        </Attribute>
    </Attributes>
    <CreatedAt>1349208631291</CreatedAt>
    <CreatedBy>andrew@apigee.com</CreatedBy>
    <LastModifiedAt>1349208631291</LastModifiedAt>
    <LastModifiedBy>andrew@apigee.com</LastModifiedBy>
</Company>

مطوّر الشركة

$ curl -H "Accept:text/xml" -X GET \
https://api.enterprise.apigee.com/v1/o/{org_name}/companies/{company_name}/developers/{developer_name} \
-u email:password

نموذج للملف الشخصي:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Developers>
    <Developer>
        <Email>ntesla@theramin.com</Email>
        <Role>developer</Role>
    </Developer>
</Developers>

مفتاح العميل

$ curl -H "Accept:text/xml" -X GET \
https://api.enterprise.apigee.com/v1/o/{org_name}/developers/{developer_email}/apps/{app_name}/keys/{consumer_key} \
-u email:password

راجِع أيضًا الحصول على التفاصيل الأساسية لتطبيق مطوِّر في مرجع واجهة برمجة التطبيقات لإدارة Edge.

نموذج XPath:

/Credential/ApiProducts/ApiProduct[Name='weather_free']/Status/text()

نموذج للملف الشخصي:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Credential>
    <Attributes/>
    <ConsumerKey>XLotL3PRxNkUGXhGAFDPOr6fqtvAhuZe</ConsumerKey>
    <ConsumerSecret>iNUyEaOOh96KR3YL</ConsumerSecret>
    <ApiProducts>
        <ApiProduct>
            <Name>weather_free</Name>
            <Status>approved</Status>
        </ApiProduct>
    </ApiProducts>
    <Scopes/>
    <Status>approved</Status>
</Credential>

المطوّر

$ curl -H "Accept:text/xml" -X GET \
https://api.enterprise.apigee.com/v1/o/{org_name}/developers/{developer_email} \
-u email:password

واطّلِع أيضًا على الحصول على مطوّر في مرجع واجهة برمجة تطبيقات إدارة Edge.

نموذج XPath:

/Developer/Attributes/Attribute[Name='my_custom_attribute']/Value/text()
/Developer/Email/text()

نموذج للملف الشخصي:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Developer>
    <Apps>
        <App>weatherappx</App>
        <App>weatherapp</App>
    </Apps>
    <Email>ntesla@theramin.com</Email>
    <DeveloperId>4Y4xd0KRZ1wmHJqu</DeveloperId>
    <FirstName>Nikola</FirstName>
    <LastName>Tesla</LastName>
    <UserName>theramin</UserName>
    <OrganizationName>apigee-pm</OrganizationName>
    <Status>active</Status>
    <Attributes>
        <Attribute>
            <Name>project_type</Name>
            <Value>public</Value>
        </Attribute>
    </Attributes>
    <CreatedAt>1349797040634</CreatedAt>
    <CreatedBy>rsaha@apigee.com</CreatedBy>
    <LastModifiedAt>1349797040634</LastModifiedAt>
    <LastModifiedBy>rsaha@apigee.com</LastModifiedBy>
</Developer>

متغيرات التدفق

عند استرداد الملف الشخصي للكيان المحدّد في سياسة AccessEntity، تتم إضافة كائن الملف الشخصي بتنسيق XML إلى سياق الرسالة على شكل متغيّر. ويمكن الوصول إليه مثل أي متغيّر آخر، مع الإشارة إلى اسم المتغيّر. يتم ضبط الاسم المقدَّم من المستخدم لسياسة AccessEntity كبادئة المتغير لاسم المتغيّر.

على سبيل المثال، إذا تم تنفيذ سياسة AccessEntity باسم GetDeveloper، يتم تخزين الملف الشخصي بتنسيق XML في المتغيّر المسمى AccessEntity.GetDeveloper. يمكن بعد ذلك تحليل الملف الشخصي بتنسيق XML باستخدام XPath المحدّد في سياسة "الاستخراجات" التي تحدّد AccessEntity.GetDeveloper كمصدر له.

مرجع الخطأ

للحصول على معلومات ذات صلة، يمكنك الاطّلاع على المعلومات التي يجب معرفتها عن الأخطاء المتعلقة بالسياسات وأخطاء المعالجة.

أخطاء في وقت التشغيل

بلا عُري

أخطاء النشر

اسم الخطأ سلسلة الخطأ رموز حالة HTTP يحدث عند
InvalidEntityType Invalid type [entity_type] in ACCESSENTITYStepDefinition [policy_name] لا ينطبق يجب أن يكون نوع الكيان المستخدَم من الأنواع المتوافقة.

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