Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
![]()
Что
Получает указанные вами профили сущностей из хранилища данных Apigee Edge. Политика помещает профиль в переменную, имя которой имеет формат AccessEntity.{policy_name} . Вы можете использовать AccessEntity для доступа к профилям следующих сущностей:
- Приложение
- API продукт
- Компания
- Разработчик компании
- Ключ потребителя
- Разработчик
Политика AccessEntity функционирует как поиск в базе данных во время выполнения на основе политик. Вы можете использовать информацию профиля, возвращаемую этой политикой, для включения динамического поведения, такого как условная маршрутизация конечных точек, выполнение потоков и применение политик.
Для получения данных профиля сущности в формате XML и сохранения их в переменной используется политика AccessEntity . Сущность, которую необходимо получить, определяется путем указания типа сущности и одного или нескольких идентификаторов, указывающих, какую именно сущность этого типа вы хотите получить. Позже, в другой политике, вы можете получить данные профиля сущности с помощью другой политики, например, политики 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 .
Обратите внимание, что полученное значение задается в элементе XMLPayload в виде выражения XPath. Извлеченное значение помещается в переменную 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 поддерживает следующие типы сущностей и идентификаторы.
| Значение EntityType | Типы идентификаторов сущностей | Типы вторичных идентификаторов |
|---|---|---|
apiproduct | appid | apiresource |
apiproductname | ||
appname | apiresourcedeveloperemaildeveloperidcompanyname | |
consumerkey | apiresource | |
app | appid | |
appname | developeremaildeveloperidcompanyname | |
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 управления пограничным устройством.
Пример 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 управления на границе сети.
Пример 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