خط مشی 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"/> 

پیش فرض

N/A

حضور

مورد نیاز

تایپ کنید

رشته

صفات

صفت توضیحات پیش فرض حضور تایپ کنید
رجوع کنید

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

N/A مورد نیاز. رشته
نوع نوع پر شده توسط متغیر در ویژگی 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"/>

پیش فرض

N/A

حضور

مورد نیاز

تایپ کنید

رشته

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

صفات

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

عنصر <SecondaryIdentifier>

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

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

پیش فرض

N/A

حضور

اختیاری

تایپ کنید

رشته

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

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

صفات

صفت توضیحات پیش فرض حضور تایپ کنید
رجوع کنید

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

N/A مورد نیاز. رشته
نوع نوع پر شده توسط متغیر در ویژگی 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 برای دریافت جزئیات نمایه در برنامه درخواست کننده استفاده کنید.

پیکربندی خط مشی خاص شما ممکن است به این صورت باشد:

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

یا:

$ 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

همچنین به دریافت محصول API در مرجع 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

همچنین به دریافت جزئیات شرکت در مرجع API مدیریت لبه مراجعه کنید.

مشخصات نمونه:

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

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

مرجع خطا

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

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

هیچ یک.

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

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

موضوعات مرتبط