خط مشی AccessEntity

شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید .
اطلاعات

چه

پروفایل‌های موجودیتی را که شما از مخزن داده Apigee Edge مشخص می‌کنید، بازیابی می‌کند. این سیاست، پروفایل را در متغیری قرار می‌دهد که نام آن از قالب AccessEntity.{policy_name} پیروی می‌کند. می‌توانید AccessEntity برای دسترسی به پروفایل‌های موجودیت‌های زیر استفاده کنید:

  • برنامه
  • محصول API
  • شرکت
  • توسعه‌دهنده شرکت
  • کلید مصرف کننده
  • توسعه‌دهنده

سیاست AccessEntity به عنوان یک جستجوی پایگاه داده زمان اجرا مبتنی بر سیاست عمل می‌کند. شما می‌توانید از اطلاعات پروفایل برگردانده شده توسط این سیاست برای فعال کردن رفتار پویا، مانند مسیریابی شرطی نقطه پایانی، اجرای جریان، و اعمال سیاست استفاده کنید.

شما از سیاست AccessEntity برای دریافت داده‌های پروفایل موجودیت به صورت XML و قرار دادن آن در یک متغیر استفاده می‌کنید. شما موجودیتی را که می‌خواهید دریافت کنید با مشخص کردن نوع موجودیت و یک یا چند شناسه که مشخص می‌کنند کدام موجودیت از آن نوع را می‌خواهید، شناسایی می‌کنید. بعداً، در یک سیاست دیگر، می‌توانید داده‌های پروفایل موجودیت را با یک سیاست دیگر، مانند سیاست ExtractVariables یا سیاست AssignMessage، بازیابی کنید.

نمونه‌ها

نمونه‌های زیر نشان می‌دهند که AccessEntity همراه با سیاست‌های ExtractVariables و AssignMessage برای استخراج ایمیل توسعه‌دهنده و افزودن آن به هدر HTTP استفاده می‌شود.

دریافت ایمیل توسعه‌دهنده برای استفاده در سایر سیاست‌ها

سیاست AccessEntity طوری تنظیم کنید که مشخص کند کدام نمایه موجودیت از Edge دریافت شود، و همچنین داده‌های نمایه کجا قرار داده شوند.

در مثال زیر، این سیاست با استفاده از یک کلید API که به عنوان پارامتر پرس‌وجو برای شناسایی توسعه‌دهنده ارسال می‌شود، یک پروفایل موجودیت 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 زیر، ایمیل توسعه‌دهنده‌ای که توسط خط‌مشی ExtractVariables تنظیم شده است را بازیابی می‌کند.

<!-- 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> برای برچسب گذاری خط مشی در ویرایشگر پروکسی UI مدیریت با نامی به زبان طبیعی دیگر استفاده کنید.

N/A مورد نیاز
continueOnError

برای بازگرداندن خطا در صورت شکست خط مشی، روی false تنظیم کنید. این رفتار مورد انتظار برای اکثر سیاست ها است.

روی true تنظیم کنید تا اجرای جریان حتی پس از شکست خط مشی ادامه یابد.

نادرست اختیاری
enabled

برای اجرای خط مشی روی true تنظیم کنید.

برای خاموش کردن خط مشی، روی false تنظیم کنید. این سیاست حتی اگر به یک جریان وابسته باشد اجرا نخواهد شد.

درست است اختیاری
async

این ویژگی منسوخ شده است.

نادرست منسوخ شده است

عنصر <DisplayName>

علاوه بر ویژگی name برای برچسب‌گذاری خط‌مشی در ویرایشگر پروکسی رابط کاربری مدیریت با نامی متفاوت و به زبان طبیعی، از آن استفاده کنید.

<DisplayName>Policy Display Name</DisplayName>
پیش فرض

N/A

اگر این عنصر را حذف کنید، از مقدار ویژگی name خط مشی استفاده می شود.

حضور اختیاری
تایپ کنید رشته

عنصر <EntityIdentifier>

موجودیت خاصی را -- از نوع داده شده در EntityType -- که باید دریافت شود، مشخص می‌کند.

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

پیش‌فرض

ناموجود

حضور

مورد نیاز

نوع

رشته

ویژگی‌ها

ویژگی توضیحات پیش‌فرض حضور نوع
مرجع

متغیری که منبع شناسه را ارائه می‌دهد، مانند request.queryparam.apikey .

ناموجود الزامی است. رشته
نوع نوعی که توسط متغیر موجود در ویژگی ref پر شده است. مانند consumerkey . برای لیستی از مقادیر ، به انواع و شناسه‌های Entity مراجعه کنید. الزامی است. رشته

مثال

<?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 برای مشخص کردن موجودیت از نوع داده شده‌ای که می‌خواهید استفاده کنید. برای مرجع انواع موجودیت، به انواع و شناسه‌های Entity مراجعه کنید.

ویژگی‌ها

ویژگی توضیحات پیش‌فرض حضور نوع
ارزش یکی از انواع موجودیت‌های پشتیبانی‌شده. برای مشاهده‌ی لیست، به بخش انواع و شناسه‌های موجودیت مراجعه کنید. هیچ کدام. الزامی است. رشته

عنصر <SecondaryIdentifier>

در رابطه با EntityIdentifier ، مقداری را برای شناسایی نمونه مورد نظر از EntityType داده شده مشخص می‌کند.

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

پیش‌فرض

ناموجود

حضور

اختیاری

نوع

رشته

استفاده از SecondaryIdentifier زمانی که فقط یک EntityIdentifier مشخص می‌شود، تضمین نمی‌کند که شما یک موجودیت واحد دریافت کنید. برای اطلاعات بیشتر به بخش محدود کردن نتایج با شناسه‌های ثانویه مراجعه کنید.

استفاده از چندین عنصر SecondaryIdentifier پشتیبانی نمی‌شود.

ویژگی‌ها

ویژگی توضیحات پیش‌فرض حضور نوع
مرجع

متغیری که منبع شناسه را ارائه می‌دهد، مانند request.queryparam.apikey .

ناموجود الزامی است. رشته
نوع نوعی که توسط متغیر موجود در ویژگی ref پر شده است. مانند consumerkey . برای لیستی از مقادیر ، به انواع و شناسه‌های Entity مراجعه کنید. الزامی است. رشته

مثال

<?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>

از آنجا که یک برنامه می‌تواند با چندین محصول API مرتبط باشد، استفاده صرف از شناسه برنامه ممکن است محصول API مورد نظر شما را برنگرداند (ممکن است فقط اولین محصول از چندین محصول منطبق را دریافت کنید).

در عوض، برای دریافت نتیجه دقیق‌تر، می‌توانید از یک SecondaryIdentifier استفاده کنید. برای مثال، ممکن است متغیرهای appname و developerid را در جریان داشته باشید زیرا این متغیرها به طور پیش‌فرض در طول تبادل OAuth 2.0 پر می‌شوند. می‌توانید از مقادیر این متغیرها در یک AccessEntity policy برای دریافت جزئیات پروفایل در برنامه درخواست‌کننده استفاده کنید.

پیکربندی دقیق‌تر سیاست شما ممکن است به این شکل باشد:

<?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 از انواع موجودیت‌ها و شناسه‌های زیر پشتیبانی می‌کند.

مقدار نوع موجودیت انواع شناسه موجودیت انواع شناسه ثانویه
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 نمایه داشته باشید. برای مثالی از ساختار، از یک فراخوانی API مدیریت برای دریافت XML برای موجودیت مورد نظر خود استفاده کنید. برای جزئیات بیشتر، به مرجع API مدیریت مراجعه کنید.

بخش‌های زیر شامل کد مربوط به فراخوانی‌های API به همراه نمونه‌ای از XML مربوط به آن فراخوانی است.

برنامه‌ها

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

همچنین به بخش «دریافت برنامه در یک سازمان بر اساس شناسه برنامه» در مرجع API مدیریت 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

همچنین به بخش «دریافت جزئیات برنامه توسعه‌دهنده» در مرجع API مدیریت 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>

محصول API

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

همچنین به مرجع Get API Product در Edge management API مراجعه کنید.

نمونه XPath، دومین منبع API (URI) را از محصول API با نام 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

همچنین به بخش «دریافت جزئیات کلیدی برای یک برنامه توسعه‌دهنده» در مرجع API مدیریت 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

همچنین به مرجع Get Developer در Edge management API مراجعه کنید.

نمونه 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 تعریف شده در یک سیاست ExtractVariables که AccessEntity.GetDeveloper به عنوان منبع خود مشخص می‌کند، تجزیه شود.

مرجع خطا

برای اطلاعات مرتبط، به آنچه باید در مورد خطاهای خط مشی و خطاهای مدیریتی بدانید مراجعه کنید.

خطاهای زمان اجرا

هیچ یک.

خطاهای استقرار

نام خطا رشته خطا وضعیت HTTP زمانی رخ می دهد
InvalidEntityType Invalid type [entity_type] in ACCESSENTITYStepDefinition [policy_name] N/A نوع موجودیت مورد استفاده باید یکی از انواع پشتیبانی شده باشد.

مباحث مرتبط

،

شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید .
اطلاعات

چه

پروفایل‌های موجودیتی را که شما از مخزن داده Apigee Edge مشخص می‌کنید، بازیابی می‌کند. این سیاست، پروفایل را در متغیری قرار می‌دهد که نام آن از قالب AccessEntity.{policy_name} پیروی می‌کند. می‌توانید AccessEntity برای دسترسی به پروفایل‌های موجودیت‌های زیر استفاده کنید:

  • برنامه
  • محصول API
  • شرکت
  • توسعه‌دهنده شرکت
  • کلید مصرف کننده
  • توسعه‌دهنده

سیاست AccessEntity به عنوان یک جستجوی پایگاه داده زمان اجرا مبتنی بر سیاست عمل می‌کند. شما می‌توانید از اطلاعات پروفایل برگردانده شده توسط این سیاست برای فعال کردن رفتار پویا، مانند مسیریابی شرطی نقطه پایانی، اجرای جریان، و اعمال سیاست استفاده کنید.

شما از سیاست AccessEntity برای دریافت داده‌های پروفایل موجودیت به صورت XML و قرار دادن آن در یک متغیر استفاده می‌کنید. شما موجودیتی را که می‌خواهید دریافت کنید با مشخص کردن نوع موجودیت و یک یا چند شناسه که مشخص می‌کنند کدام موجودیت از آن نوع را می‌خواهید، شناسایی می‌کنید. بعداً، در یک سیاست دیگر، می‌توانید داده‌های پروفایل موجودیت را با یک سیاست دیگر، مانند سیاست ExtractVariables یا سیاست AssignMessage، بازیابی کنید.

نمونه‌ها

نمونه‌های زیر نشان می‌دهند که AccessEntity همراه با سیاست‌های ExtractVariables و AssignMessage برای استخراج ایمیل توسعه‌دهنده و افزودن آن به هدر HTTP استفاده می‌شود.

دریافت ایمیل توسعه‌دهنده برای استفاده در سایر سیاست‌ها

سیاست AccessEntity طوری تنظیم کنید که مشخص کند کدام نمایه موجودیت از Edge دریافت شود، و همچنین داده‌های نمایه کجا قرار داده شوند.

در مثال زیر، این سیاست با استفاده از یک کلید API که به عنوان پارامتر پرس‌وجو برای شناسایی توسعه‌دهنده ارسال می‌شود، یک پروفایل موجودیت 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 زیر، ایمیل توسعه‌دهنده‌ای که توسط خط‌مشی ExtractVariables تنظیم شده است را بازیابی می‌کند.

<!-- 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> برای برچسب گذاری خط مشی در ویرایشگر پروکسی UI مدیریت با نامی به زبان طبیعی دیگر استفاده کنید.

N/A مورد نیاز
continueOnError

برای بازگرداندن خطا در صورت شکست خط مشی، روی false تنظیم کنید. این رفتار مورد انتظار برای اکثر سیاست ها است.

روی true تنظیم کنید تا اجرای جریان حتی پس از شکست خط مشی ادامه یابد.

نادرست اختیاری
enabled

برای اجرای خط مشی روی true تنظیم کنید.

برای خاموش کردن خط مشی، روی false تنظیم کنید. این سیاست حتی اگر به یک جریان وابسته باشد اجرا نخواهد شد.

درست است اختیاری
async

این ویژگی منسوخ شده است.

نادرست منسوخ شده است

عنصر <DisplayName>

علاوه بر ویژگی name برای برچسب‌گذاری خط‌مشی در ویرایشگر پروکسی رابط کاربری مدیریت با نامی متفاوت و به زبان طبیعی، از آن استفاده کنید.

<DisplayName>Policy Display Name</DisplayName>
پیش فرض

N/A

اگر این عنصر را حذف کنید، از مقدار ویژگی name خط مشی استفاده می شود.

حضور اختیاری
تایپ کنید رشته

عنصر <EntityIdentifier>

موجودیت خاصی را -- از نوع داده شده در EntityType -- که باید دریافت شود، مشخص می‌کند.

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

پیش‌فرض

ناموجود

حضور

مورد نیاز

نوع

رشته

ویژگی‌ها

ویژگی توضیحات پیش‌فرض حضور نوع
مرجع

متغیری که منبع شناسه را ارائه می‌دهد، مانند request.queryparam.apikey .

ناموجود الزامی است. رشته
نوع نوعی که توسط متغیر موجود در ویژگی ref پر شده است. مانند consumerkey . برای لیستی از مقادیر ، به انواع و شناسه‌های Entity مراجعه کنید. الزامی است. رشته

مثال

<?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 برای مشخص کردن موجودیت از نوع داده شده‌ای که می‌خواهید استفاده کنید. برای مرجع انواع موجودیت، به انواع و شناسه‌های Entity مراجعه کنید.

ویژگی‌ها

ویژگی توضیحات پیش‌فرض حضور نوع
ارزش یکی از انواع موجودیت‌های پشتیبانی‌شده. برای مشاهده‌ی لیست، به بخش انواع و شناسه‌های موجودیت مراجعه کنید. هیچ کدام. الزامی است. رشته

عنصر <SecondaryIdentifier>

در رابطه با EntityIdentifier ، مقداری را برای شناسایی نمونه مورد نظر از EntityType داده شده مشخص می‌کند.

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

پیش‌فرض

ناموجود

حضور

اختیاری

نوع

رشته

استفاده از SecondaryIdentifier زمانی که فقط یک EntityIdentifier مشخص می‌شود، تضمین نمی‌کند که شما یک موجودیت واحد دریافت کنید. برای اطلاعات بیشتر به بخش محدود کردن نتایج با شناسه‌های ثانویه مراجعه کنید.

استفاده از چندین عنصر SecondaryIdentifier پشتیبانی نمی‌شود.

ویژگی‌ها

ویژگی توضیحات پیش‌فرض حضور نوع
مرجع

متغیری که منبع شناسه را ارائه می‌دهد، مانند request.queryparam.apikey .

ناموجود الزامی است. رشته
نوع نوعی که توسط متغیر موجود در ویژگی ref پر شده است. مانند consumerkey . برای لیستی از مقادیر ، به انواع و شناسه‌های Entity مراجعه کنید. الزامی است. رشته

مثال

<?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>

از آنجا که یک برنامه می‌تواند با چندین محصول API مرتبط باشد، استفاده صرف از شناسه برنامه ممکن است محصول API مورد نظر شما را برنگرداند (ممکن است فقط اولین محصول از چندین محصول منطبق را دریافت کنید).

در عوض، برای دریافت نتیجه دقیق‌تر، می‌توانید از یک SecondaryIdentifier استفاده کنید. برای مثال، ممکن است متغیرهای appname و developerid را در جریان داشته باشید زیرا این متغیرها به طور پیش‌فرض در طول تبادل OAuth 2.0 پر می‌شوند. می‌توانید از مقادیر این متغیرها در یک AccessEntity policy برای دریافت جزئیات پروفایل در برنامه درخواست‌کننده استفاده کنید.

پیکربندی دقیق‌تر سیاست شما ممکن است به این شکل باشد:

<?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 از انواع موجودیت‌ها و شناسه‌های زیر پشتیبانی می‌کند.

مقدار نوع موجودیت انواع شناسه موجودیت انواع شناسه ثانویه
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 نمایه داشته باشید. برای مثالی از ساختار، از یک فراخوانی API مدیریت برای دریافت XML برای موجودیت مورد نظر خود استفاده کنید. برای جزئیات بیشتر، به مرجع API مدیریت مراجعه کنید.

بخش‌های زیر شامل کد مربوط به فراخوانی‌های API به همراه نمونه‌ای از XML مربوط به آن فراخوانی است.

برنامه‌ها

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

همچنین به بخش «دریافت برنامه در یک سازمان بر اساس شناسه برنامه» در مرجع API مدیریت 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

همچنین به بخش «دریافت جزئیات برنامه توسعه‌دهنده» در مرجع API مدیریت 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>

محصول API

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

همچنین به مرجع Get API Product در Edge management API مراجعه کنید.

نمونه XPath، دومین منبع API (URI) را از محصول API با نام 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

همچنین به بخش «دریافت جزئیات کلیدی برای یک برنامه توسعه‌دهنده» در مرجع API مدیریت 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

همچنین به مرجع Get Developer در Edge management API مراجعه کنید.

نمونه 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 تعریف شده در یک سیاست ExtractVariables که AccessEntity.GetDeveloper به عنوان منبع خود مشخص می‌کند، تجزیه شود.

مرجع خطا

برای اطلاعات مرتبط، به آنچه باید در مورد خطاهای خط مشی و خطاهای مدیریتی بدانید مراجعه کنید.

خطاهای زمان اجرا

هیچ یک.

خطاهای استقرار

نام خطا رشته خطا وضعیت HTTP زمانی رخ می دهد
InvalidEntityType Invalid type [entity_type] in ACCESSENTITYStepDefinition [policy_name] N/A نوع موجودیت مورد استفاده باید یکی از انواع پشتیبانی شده باشد.

مباحث مرتبط

،

شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید .
اطلاعات

چه

پروفایل‌های موجودیتی را که شما از مخزن داده Apigee Edge مشخص می‌کنید، بازیابی می‌کند. این سیاست، پروفایل را در متغیری قرار می‌دهد که نام آن از قالب AccessEntity.{policy_name} پیروی می‌کند. می‌توانید AccessEntity برای دسترسی به پروفایل‌های موجودیت‌های زیر استفاده کنید:

  • برنامه
  • محصول API
  • شرکت
  • توسعه‌دهنده شرکت
  • کلید مصرف کننده
  • توسعه‌دهنده

سیاست AccessEntity به عنوان یک جستجوی پایگاه داده زمان اجرا مبتنی بر سیاست عمل می‌کند. شما می‌توانید از اطلاعات پروفایل برگردانده شده توسط این سیاست برای فعال کردن رفتار پویا، مانند مسیریابی شرطی نقطه پایانی، اجرای جریان، و اعمال سیاست استفاده کنید.

شما از سیاست AccessEntity برای دریافت داده‌های پروفایل موجودیت به صورت XML و قرار دادن آن در یک متغیر استفاده می‌کنید. شما موجودیتی را که می‌خواهید دریافت کنید با مشخص کردن نوع موجودیت و یک یا چند شناسه که مشخص می‌کنند کدام موجودیت از آن نوع را می‌خواهید، شناسایی می‌کنید. بعداً، در یک سیاست دیگر، می‌توانید داده‌های پروفایل موجودیت را با یک سیاست دیگر، مانند سیاست ExtractVariables یا سیاست AssignMessage، بازیابی کنید.

نمونه‌ها

نمونه‌های زیر نشان می‌دهند که AccessEntity همراه با سیاست‌های ExtractVariables و AssignMessage برای استخراج ایمیل توسعه‌دهنده و افزودن آن به هدر HTTP استفاده می‌شود.

دریافت ایمیل توسعه‌دهنده برای استفاده در سایر سیاست‌ها

سیاست AccessEntity طوری تنظیم کنید که مشخص کند کدام نمایه موجودیت از Edge دریافت شود، و همچنین داده‌های نمایه کجا قرار داده شوند.

در مثال زیر، این سیاست با استفاده از یک کلید API که به عنوان پارامتر پرس‌وجو برای شناسایی توسعه‌دهنده ارسال می‌شود، یک پروفایل موجودیت 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 زیر، ایمیل توسعه‌دهنده‌ای که توسط خط‌مشی ExtractVariables تنظیم شده است را بازیابی می‌کند.

<!-- 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> برای برچسب گذاری خط مشی در ویرایشگر پروکسی UI مدیریت با نامی به زبان طبیعی دیگر استفاده کنید.

N/A مورد نیاز
continueOnError

برای بازگرداندن خطا در صورت شکست خط مشی، روی false تنظیم کنید. این رفتار مورد انتظار برای اکثر سیاست ها است.

روی true تنظیم کنید تا اجرای جریان حتی پس از شکست خط مشی ادامه یابد.

نادرست اختیاری
enabled

برای اجرای خط مشی روی true تنظیم کنید.

برای خاموش کردن خط مشی، روی false تنظیم کنید. این سیاست حتی اگر به یک جریان وابسته باشد اجرا نخواهد شد.

درست است اختیاری
async

این ویژگی منسوخ شده است.

نادرست منسوخ شده است

عنصر <DisplayName>

علاوه بر ویژگی name برای برچسب‌گذاری خط‌مشی در ویرایشگر پروکسی رابط کاربری مدیریت با نامی متفاوت و به زبان طبیعی، از آن استفاده کنید.

<DisplayName>Policy Display Name</DisplayName>
پیش فرض

N/A

اگر این عنصر را حذف کنید، از مقدار ویژگی name خط مشی استفاده می شود.

حضور اختیاری
تایپ کنید رشته

عنصر <EntityIdentifier>

موجودیت خاصی را -- از نوع داده شده در EntityType -- که باید دریافت شود، مشخص می‌کند.

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

پیش‌فرض

ناموجود

حضور

مورد نیاز

نوع

رشته

ویژگی‌ها

ویژگی توضیحات پیش‌فرض حضور نوع
مرجع

متغیری که منبع شناسه را ارائه می‌دهد، مانند request.queryparam.apikey .

ناموجود الزامی است. رشته
نوع نوعی که توسط متغیر موجود در ویژگی ref پر شده است. مانند consumerkey . برای لیستی از مقادیر ، به انواع و شناسه‌های Entity مراجعه کنید. الزامی است. رشته

مثال

<?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 برای مشخص کردن موجودیت از نوع داده شده‌ای که می‌خواهید استفاده کنید. برای مرجع انواع موجودیت، به انواع و شناسه‌های Entity مراجعه کنید.

ویژگی‌ها

ویژگی توضیحات پیش‌فرض حضور نوع
ارزش یکی از انواع موجودیت‌های پشتیبانی‌شده. برای مشاهده‌ی لیست، به بخش انواع و شناسه‌های موجودیت مراجعه کنید. هیچ کدام. الزامی است. رشته

عنصر <SecondaryIdentifier>

در رابطه با EntityIdentifier ، مقداری را برای شناسایی نمونه مورد نظر از EntityType داده شده مشخص می‌کند.

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

پیش‌فرض

ناموجود

حضور

اختیاری

نوع

رشته

استفاده از SecondaryIdentifier زمانی که فقط یک EntityIdentifier مشخص می‌شود، تضمین نمی‌کند که شما یک موجودیت واحد دریافت کنید. برای اطلاعات بیشتر به بخش محدود کردن نتایج با شناسه‌های ثانویه مراجعه کنید.

استفاده از چندین عنصر SecondaryIdentifier پشتیبانی نمی‌شود.

ویژگی‌ها

ویژگی توضیحات پیش‌فرض حضور نوع
مرجع

متغیری که منبع شناسه را ارائه می‌دهد، مانند request.queryparam.apikey .

ناموجود الزامی است. رشته
نوع نوعی که توسط متغیر موجود در ویژگی ref پر شده است. مانند consumerkey . برای لیستی از مقادیر ، به انواع و شناسه‌های Entity مراجعه کنید. الزامی است. رشته

مثال

<?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>

از آنجا که یک برنامه می‌تواند با چندین محصول API مرتبط باشد، استفاده صرف از شناسه برنامه ممکن است محصول API مورد نظر شما را برنگرداند (ممکن است فقط اولین محصول از چندین محصول منطبق را دریافت کنید).

در عوض، برای دریافت نتیجه دقیق‌تر، می‌توانید از یک SecondaryIdentifier استفاده کنید. برای مثال، ممکن است متغیرهای appname و developerid را در جریان داشته باشید زیرا این متغیرها به طور پیش‌فرض در طول تبادل OAuth 2.0 پر می‌شوند. می‌توانید از مقادیر این متغیرها در یک AccessEntity policy برای دریافت جزئیات پروفایل در برنامه درخواست‌کننده استفاده کنید.

پیکربندی دقیق‌تر سیاست شما ممکن است به این شکل باشد:

<?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 از انواع موجودیت‌ها و شناسه‌های زیر پشتیبانی می‌کند.

مقدار نوع موجودیت انواع شناسه موجودیت انواع شناسه ثانویه
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 نمایه داشته باشید. برای مثالی از ساختار، از یک فراخوانی API مدیریت برای دریافت XML برای موجودیت مورد نظر خود استفاده کنید. برای جزئیات بیشتر، به مرجع API مدیریت مراجعه کنید.

بخش‌های زیر شامل کد مربوط به فراخوانی‌های API به همراه نمونه‌ای از XML مربوط به آن فراخوانی است.

برنامه‌ها

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

همچنین به بخش «دریافت برنامه در یک سازمان بر اساس شناسه برنامه» در مرجع API مدیریت 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

همچنین به بخش «دریافت جزئیات برنامه توسعه‌دهنده» در مرجع API مدیریت 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>

محصول API

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

همچنین به مرجع Get API Product در Edge management API مراجعه کنید.

نمونه XPath، دومین منبع API (URI) را از محصول API با نام 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

همچنین به بخش «دریافت جزئیات کلیدی برای یک برنامه توسعه‌دهنده» در مرجع API مدیریت 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

همچنین به مرجع Get Developer در Edge management API مراجعه کنید.

نمونه 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 تعریف شده در یک سیاست ExtractVariables که AccessEntity.GetDeveloper به عنوان منبع خود مشخص می‌کند، تجزیه شود.

مرجع خطا

برای اطلاعات مرتبط، به آنچه باید در مورد خطاهای خط مشی و خطاهای مدیریتی بدانید مراجعه کنید.

خطاهای زمان اجرا

هیچ یک.

خطاهای استقرار

نام خطا رشته خطا وضعیت HTTP زمانی رخ می دهد
InvalidEntityType Invalid type [entity_type] in ACCESSENTITYStepDefinition [policy_name] N/A نوع موجودیت مورد استفاده باید یکی از انواع پشتیبانی شده باشد.

مباحث مرتبط