Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. info
![]()
Co
Pobiera z magazynu danych Apigee Edge określone profile encji. Zasady umieszczają profil w zmiennej, której nazwa ma format AccessEntity.{policy_name}. Za pomocą AccessEntity możesz uzyskać dostęp do profili tych podmiotów:
- Aplikacja
- Usługa API
- Firma
- Deweloper firmy
- Klucz konsumenta
- Deweloper
Zasada AccessEntity działa jak wyszukiwanie w bazie danych w czasie działania oparte na zasadach. Informacje o profilu zwracane przez tę zasadę możesz wykorzystać do włączenia dynamicznego działania, np. warunkowego routingu punktu końcowego, wykonywania przepływu lub egzekwowania zasad.
Używasz zasady AccessEntity, aby pobrać dane profilu jednostki w formacie XML i umieścić je w zmiennej. Aby określić encję do pobrania, podaj typ encji i co najmniej 1 identyfikator, który wskazuje, którą encję tego typu chcesz uzyskać. Później w innych zasadach możesz pobrać dane profilu podmiotu za pomocą innych zasad, np. zasad ExtractVariables lub zasad AssignMessage.
Przykłady
Poniższe przykłady pokazują, jak używać AccessEntity w połączeniu z zasadami ExtractVariables i AssignMessage, aby wyodrębnić adres e-mail dewelopera i dodać go do nagłówka HTTP.
Uzyskiwanie adresu e-mail dewelopera do wykorzystania w innych zasadach
Skonfiguruj zasadę AccessEntity, aby określić, z którego profilu podmiotu w Edge mają być pobierane dane, a także gdzie mają być umieszczane dane profilu.
W poniższym przykładzie zasady otrzymują developer profil podmiotu za pomocą klucza interfejsu API przekazanego jako parametr zapytania w celu zidentyfikowania dewelopera. Profil jest umieszczany w zmiennej, której nazwa ma format AccessEntity.{policy_name}. Zmienna ustawiona przez tę zasadę to 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>
Użyj innej zasady, aby pobrać wartość profilu jednostki ze zmiennej ustawionej przez AccessEntity.
W poniższym przykładzie zasada ExtractVariables pobiera wartość ze zmiennej AccessEntity.GetDeveloperProfile ustawionej wcześniej przez AccessEntity.
Pamiętaj, że pobrana wartość jest określona jako wyrażenie XPath w elemencie XMLPayload. Wyodrębniona wartość jest umieszczana w zmiennej 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>
Poniższe zasady AssignMessage pobierają adres e-mail dewelopera ustawiony przez zasady 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>
Odwołanie do elementu
Podstawowa struktura zasady AccessEntity jest następująca:
<AccessEntity name="policy_name"> <EntityType value="entity_type"/> <EntityIdentifier ref="entity_identifier" type="identifier_type"/> <SecondaryIdentifier ref="secondary_identifier" type="identifier_type"/> </AccessEntity>
Dostęp do wielu elementów tego samego typu możesz uzyskać, grupując je w elemencie 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>
Atrybuty <AccessEntity>
<AccessEntity async="false" continueOnError="false" enabled="true" name="policy_name">
W tej tabeli opisano atrybuty wspólne dla wszystkich elementów nadrzędnych zasad:
| Atrybut | Opis | Domyślny | Obecność |
|---|---|---|---|
name |
Wewnętrzna nazwa zasady. Wartość atrybutu Opcjonalnie możesz użyć elementu |
Nie dotyczy | Wymagane |
continueOnError |
Ustaw jako Ustaw jako |
fałsz | Opcjonalnie |
enabled |
Aby egzekwować zasadę, ustaw wartość Aby wyłączyć zasadę, ustaw wartość |
prawda | Opcjonalnie |
async |
Ten atrybut został wycofany. |
fałsz | Wycofano |
<DisplayName> element
Używaj oprócz atrybutu name do oznaczania zasady w
edytor proxy interfejsu zarządzania z inną nazwą w języku naturalnym.
<DisplayName>Policy Display Name</DisplayName>
| Domyślny |
Nie dotyczy Jeśli pominiesz ten element, atrybut |
|---|---|
| Obecność | Opcjonalnie |
| Typ | Ciąg znaków |
Element <EntityIdentifier>
Określa konkretny element (typu podanego w parametrze EntityType), który ma zostać pobrany.
<EntityIdentifier ref="value_variable" type="identifier_type"/>
|
Domyślna |
Nie dotyczy |
|
Obecność |
Wymagane |
|
Typ |
Ciąg znaków |
Atrybuty
| Atrybut | Opis | Domyślny | Obecność | Typ |
|---|---|---|---|---|
| ref |
Zmienna, która podaje źródło identyfikatora, np. |
Nie dotyczy | Wymagane. | Ciąg znaków |
| typ | Typ wypełniany przez zmienną w atrybucie ref, np. consumerkey. Listę wartości znajdziesz w sekcji Typy i identyfikatory elementów. |
Wymagane. | Ciąg znaków |
Przykład
<?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>
Element <EntityType>
Określa typ encji do pobrania z magazynu danych.
<EntityType value="entity_type"/>
|
Domyślna |
Nie dotyczy |
|
Obecność |
Wymagane |
|
Typ |
Ciąg znaków |
Użyj elementu EntityIdentifier, aby określić, którą encję danego typu chcesz uzyskać. Listę typów elementów znajdziesz w sekcji Typy elementów i identyfikatory.
Atrybuty
| Atrybut | Opis | Domyślny | Obecność | Typ |
|---|---|---|---|---|
| wartość | Jeden z obsługiwanych typów encji. Listę znajdziesz w sekcji Typy jednostek i identyfikatory. | Brak. | Wymagane. | Ciąg znaków |
Element <SecondaryIdentifier>
W połączeniu z parametrem EntityIdentifier określa wartość identyfikującą żądaną instancję danego parametru EntityType.
<SecondaryIdentifier ref="value_variable" type="identifier_type"/>
|
Domyślna |
Nie dotyczy |
|
Obecność |
Opcjonalny |
|
Typ |
Ciąg znaków |
Użyj SecondaryIdentifier, jeśli określenie tylko EntityIdentifier nie gwarantuje uzyskania pojedynczego elementu. Więcej informacji znajdziesz w sekcji Zawężanie wyników za pomocą identyfikatorów dodatkowych.
Używanie wielu elementów SecondaryIdentifier nie jest obsługiwane.
Atrybuty
| Atrybut | Opis | Domyślny | Obecność | Typ |
|---|---|---|---|---|
| ref |
Zmienna, która podaje źródło identyfikatora, np. |
Nie dotyczy | Wymagane. | Ciąg znaków |
| typ | Typ wypełniany przez zmienną w atrybucie ref, np. consumerkey. Listę wartości znajdziesz w sekcji Typy i identyfikatory elementów. |
Wymagane. | Ciąg znaków |
Przykład
<?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>
Zastosowanie
Zawężanie wyników za pomocą identyfikatorów dodatkowych
W przypadku niektórych elementów podanie jednego identyfikatora może nie wystarczyć, aby uzyskać odpowiedni element. W takich przypadkach możesz użyć identyfikatora dodatkowego, aby zawęzić wyniki.
Pierwsza, prawdopodobnie ogólna konfiguracja zasad może wyglądać tak:
<?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>
Aplikacja może być powiązana z wieloma produktami API, więc użycie tylko identyfikatora aplikacji może nie zwrócić żądanego produktu API (możesz otrzymać tylko pierwszy z wielu pasujących produktów).
Aby uzyskać dokładniejszy wynik, możesz użyć znaku SecondaryIdentifier. Możesz na przykład mieć w przepływie zmienne appname i developerid, ponieważ są one domyślnie wypełniane podczas wymiany OAuth 2.0. Wartości tych zmiennych możesz użyć w zasadach AccessEntity, aby uzyskać szczegóły profilu aplikacji wysyłającej żądanie.
Bardziej szczegółowa konfiguracja zasad może wyglądać tak:
<?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>
Obsługiwane typy encji i identyfikatory
AccessEntity obsługuje te typy encji i identyfikatory.
| Wartość typu encji | Typy identyfikatorów encji | Typy identyfikatorów dodatkowych |
|---|---|---|
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 |
Przykładowy plik XML profilu jednostki
Aby pobrać za pomocą XPath wartość profilu podmiotu, musisz znać strukturę pliku XML profilu. Aby zobaczyć przykład struktury, użyj wywołania interfejsu Management API, aby pobrać kod XML wybranej przez siebie usługi. Szczegółowe informacje znajdziesz w dokumentacji interfejsu API do zarządzania.
W sekcjach poniżej znajdziesz kod wywołań interfejsu API oraz przykładowy kod XML z wywołania.
Aplikacje
$ curl -H "Accept:text/xml" -X GET \ https://api.enterprise.apigee.com/v1/o/{org_name}/apps/{app_id} \ -u email:password
Zobacz też Pobieranie aplikacji z organizacji według identyfikatora aplikacji w dokumentacji interfejsu Edge Management API.
Lub:
$ 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
Zobacz też Get Developer App Details (Pobieranie szczegółów aplikacji dewelopera) w dokumentacji interfejsu Edge Management API.
Przykładowy profil:
<?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>
Usługa API
$ curl -H "Accept:text/xml" -X GET \ https://api.enterprise.apigee.com/v1/o/{org_name}/apiproducts/{apiproduct_name} \ -u email:password
Więcej informacji znajdziesz w sekcji Pobieranie usługi API w dokumentacji interfejsu Edge Management API.
Przykładowy kod XPath, który pobiera drugi zasób interfejsu API (URI) z produktu API o nazwie weather_free:
/ApiProduct['@name=weather_free']/ApiResources/ApiResource[1]/text()
Przykładowy profil zwrócony w formacie 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>
Firma
$ curl -H "Accept:text/xml" -X GET \ https://api.enterprise.apigee.com/v1/o/{org_name}/companies/{company_name} \ -u email:password
Więcej informacji znajdziesz w sekcji Pobieranie szczegółów firmy w dokumentacji interfejsu API do zarządzania Edge.
Przykładowy profil:
<?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>
Deweloper firmy
$ 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
Przykładowy profil:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Developers> <Developer> <Email>ntesla@theramin.com</Email> <Role>developer</Role> </Developer> </Developers>
Klucz konsumenta
$ 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
Zobacz też Pobieranie szczegółów klucza aplikacji dewelopera w dokumentacji interfejsu Edge Management API.
Przykładowa ścieżka XPath:
/Credential/ApiProducts/ApiProduct[Name='weather_free']/Status/text()
Przykładowy profil:
<?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>Deweloper
$ curl -H "Accept:text/xml" -X GET \ https://api.enterprise.apigee.com/v1/o/{org_name}/developers/{developer_email} \ -u email:password
Zobacz też Get Developer w dokumentacji interfejsu Edge Management API.
Przykładowa ścieżka XPath:
/Developer/Attributes/Attribute[Name='my_custom_attribute']/Value/text()
/Developer/Email/text()
Przykładowy profil:
<?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>
Zmienne przepływu
Gdy profil podmiotu określony w zasadach AccessEntity zostanie pobrany, obiekt profilu w formacie XML zostanie dodany do kontekstu wiadomości jako zmienna. Można do niej uzyskać dostęp tak jak do każdej innej zmiennej, odwołując się do jej nazwy. Nazwa zasady AccessEntity podana przez użytkownika jest ustawiana jako prefiks zmiennej.
Jeśli np. zostanie wykonana zasada AccessEntity o nazwie GetDeveloper, profil w formacie XML zostanie zapisany w zmiennej o nazwie AccessEntity.GetDeveloper. Profil w formacie XML można następnie przeanalizować za pomocą ścieżki XPath zdefiniowanej w zasadach ExtractVariables, które jako źródło określają AccessEntity.GetDeveloper.
Odwołanie do błędu
Powiązane informacje znajdziesz w sekcjach Co musisz wiedzieć o błędach zasad i Postępowanie w przypadku błędów.
Błędy w czasie wykonywania
Brak.
Błędy wdrażania
| Nazwa błędu | Ciąg błędu | Stan HTTP | Występuje, gdy |
|---|---|---|---|
InvalidEntityType |
Invalid type [entity_type] in ACCESSENTITYStepDefinition
[policy_name] |
Nie dotyczy | Użyty typ encji musi być jednym z obsługiwanych typów. |
Powiązane artykuły
ExtractVariables: zasady ExtractVariablesAssignMessage: Zasady AssignMessage