Политика AccessEntity

Вы просматриваете документацию 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

Внутреннее имя политики. Значение атрибута name может содержать буквы, цифры, пробелы, дефисы, подчеркивания и точки. Это значение не может превышать 255 символов.

При необходимости используйте элемент <DisplayName> , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.

Н/Д Необходимый
continueOnError

Установите значение false , чтобы возвращать ошибку в случае сбоя политики. Это ожидаемое поведение для большинства политик.

Установите значение true , чтобы выполнение потока продолжалось даже после сбоя политики.

ЛОЖЬ Необязательный
enabled

Установите значение true , чтобы обеспечить соблюдение политики.

Установите значение false , чтобы отключить политику. Политика не будет применена, даже если она останется привязанной к потоку.

истинный Необязательный
async

Этот атрибут устарел.

ЛОЖЬ Устарело

Элемент <DisplayName>

Используйте в дополнение к атрибуту name , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.

<DisplayName>Policy Display Name</DisplayName>
По умолчанию

Н/Д

Если вы опустите этот элемент, будет использовано значение атрибута name политики.

Присутствие Необязательный
Тип Нить

элемент <EntityIdentifier>

Указывает конкретную сущность — типа, указанного в EntityType, — которую необходимо получить.

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

По умолчанию

Н/Д

Присутствие

Необходимый

Тип

Нить

Атрибуты

Атрибут Описание По умолчанию Присутствие Тип
ссылка

Переменная, указывающая источник идентификатора, например, request.queryparam.apikey .

Н/Д Необходимый. Нить
тип Тип, заполняемый переменной в атрибуте ref, например, consumerkey . Список значений см. в разделе «Типы сущностей и идентификаторы» . Необходимый. Нить

Пример

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

<EntityType> элемент

Указывает тип сущности, которую необходимо извлечь из хранилища данных.

<EntityType  value="entity_type"/>

По умолчанию

Н/Д

Присутствие

Необходимый

Тип

Нить

Используйте элемент EntityIdentifier , чтобы указать, какую именно сущность нужно указать. Справочник по типам сущностей см. в разделе « Типы и идентификаторы сущностей» .

Атрибуты

Атрибут Описание По умолчанию Присутствие Тип
ценить Один из поддерживаемых типов сущностей. Полный список см. в разделе «Типы сущностей и идентификаторы» . Никто. Необходимый. Нить

элемент <SecondaryIdentifier>

В сочетании с EntityIdentifier указывает значение для идентификации нужного экземпляра заданного EntityType .

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

По умолчанию

Н/Д

Присутствие

Необязательный

Тип

Нить

Используйте SecondaryIdentifier если указание только EntityIdentifier не гарантирует получение единственной сущности. Дополнительную информацию см. в разделе «Сужение результатов с помощью вторичных идентификаторов» .

Использование нескольких элементов SecondaryIdentifier не поддерживается.

Атрибуты

Атрибут Описание По умолчанию Присутствие Тип
ссылка

Переменная, указывающая источник идентификатора, например, request.queryparam.apikey .

Н/Д Необходимый. Нить
тип Тип, заполняемый переменной в атрибуте ref, например, consumerkey . Список значений см. в разделе «Типы сущностей и идентификаторы» . Необходимый. Нить

Пример

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

Примечания по использованию

Сужение результатов с помощью дополнительных идентификаторов

Для некоторых объектов одного идентификатора может быть недостаточно для получения нужного результата. В таких случаях можно использовать дополнительный идентификатор, чтобы сузить результаты поиска.

Ваша первая, возможно, общая конфигурация политики может выглядеть следующим образом:

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

Поскольку приложение может быть связано с несколькими продуктами 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 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 управления пограничным устройством.

Пример 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] Н/Д Используемый тип объекта должен быть одним из поддерживаемых типов .

Связанные темы