Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X. информация
Что
Извлекает указанные вами профили объектов из хранилища данных Apigee Edge. Политика помещает профиль в переменную, имя которой имеет формат AccessEntity.{policy_name}
. Вы можете использовать AccessEntity
для доступа к профилям следующих объектов:
- Приложение
- API-продукт
- Компания
- Компания-разработчик
- Потребительский ключ
- Разработчик
Политика AccessEntity
функционирует как поиск в базе данных времени выполнения на основе политики. Вы можете использовать информацию профиля, возвращаемую этой политикой, для включения динамического поведения, такого как условная маршрутизация конечной точки, выполнение потока, применение политики.
Вы используете политику AccessEntity
, чтобы получить данные профиля сущности в формате XML и поместить их в переменную. Вы идентифицируете сущность, которую хотите получить, указав тип сущности и один или несколько идентификаторов, которые определяют, какая сущность этого типа вам нужна. Позже, в другой политике, вы можете получить данные профиля сущности с помощью другой политики, например политики ExtractVariables или политики AssignMessage .
Образцы
В следующих примерах показано, AccessEntity
используется в сочетании с политиками ExtractVariables
и AssignMessage
для извлечения электронного письма разработчика и добавления его в HTTP-заголовок.
Получение электронной почты разработчика для использования в других политиках
Настройте политику AccessEntity
, чтобы указать, какой профиль объекта следует получать из Edge, а также куда поместить данные профиля.
В следующем примере политика получает профиль сущности developer
, используя ключ API, переданный в качестве параметра запроса, для идентификации разработчика. Профиль помещается в переменную, имя которой имеет форму 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 | Внутреннее имя политики. Значение атрибута При необходимости используйте элемент | Н/Д | Необходимый |
continueOnError | Установите значение Установите значение | ЛОЖЬ | Необязательный |
enabled | Установите значение Установите значение | истинный | Необязательный |
async | Этот атрибут устарел. | ЛОЖЬ | Устарело |
Элемент <DisplayName>
Используйте в дополнение к атрибуту name
, чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.
<DisplayName>Policy Display Name</DisplayName>
По умолчанию | Н/Д Если вы опустите этот элемент, будет использовано значение атрибута |
---|---|
Присутствие | Необязательный |
Тип | Нить |
Элемент <EntityIdentifier>
Указывает конкретную сущность типа, указанного в EntityType, которую необходимо получить.
<EntityIdentifier ref="value_variable" type="identifier_type"/>
По умолчанию | Н/Д |
Присутствие | Необходимый |
Тип | Нить |
Атрибуты
Атрибут | Описание | По умолчанию | Присутствие | Тип |
---|---|---|---|---|
ссылка | Переменная, предоставляющая источник идентификатора, например | Н/Д | Необходимый. | Нить |
тип | Тип, заполняемый переменной в атрибуте 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
чтобы указать, какая сущность данного типа вам нужна. Справочную информацию о типах сущностей см. в разделе Типы и идентификаторы сущностей .
Атрибуты
Атрибут | Описание | По умолчанию | Присутствие | Тип |
---|---|---|---|---|
ценить | Один из поддерживаемых типов объектов. Список см. в разделе Типы и идентификаторы сущностей . | Никто. | Необходимый. | Нить |
Элемент <SecondaryIdentifier>
В сочетании с EntityIdentifier
указывает значение для идентификации желаемого экземпляра данного EntityType
.
<SecondaryIdentifier ref="value_variable" type="identifier_type"/>
По умолчанию | Н/Д |
Присутствие | Необязательный |
Тип | Нить |
Использование SecondaryIdentifier
при указании только EntityIdentifier
не гарантирует получение одной сущности. Дополнительную информацию см. в разделе Сужение результатов с помощью вторичных идентификаторов .
Использование нескольких элементов SecondaryIdentifier
не поддерживается.
Атрибуты
Атрибут | Описание | По умолчанию | Присутствие | Тип |
---|---|---|---|---|
ссылка | Переменная, предоставляющая источник идентификатора, например | Н/Д | Необходимый. | Нить |
тип | Тип, заполняемый переменной в атрибуте 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>
Поскольку приложение может быть связано с несколькими продуктами 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
поддерживает следующие типы и идентификаторы объектов.
Значение типа сущности | Типы идентификаторов объектов | Типы вторичных идентификаторов |
---|---|---|
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
См. также раздел «Получить продукт API» в справочнике по API управления Edge.
Пример 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 управления 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
См. также раздел «Получить разработчика» в справочнике по 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] | Н/Д | Используемый тип объекта должен быть одним из поддерживаемых типов . |
Связанные темы
-
ExtractVariables
: политика ExtractVariables -
AssignMessage
: политика AssignMessage