Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
Co
Pobiera określone profile encji z magazynu danych Apigee Edge. Zasada umieszcza profil w zmiennej, której nazwa ma format AccessEntity.{policy_name}
. Za pomocą polecenia AccessEntity
możesz uzyskiwać dostęp do profili tych elementów:
- Promująca aplikację
- Usługa API
- Firma
- Deweloper w firmie
- Klucz użytkownika
- Deweloper
Zasada AccessEntity
działa jako oparte na zasadach wyszukiwanie bazy danych środowiska wykonawczego. Możesz użyć informacji o profilu zwróconych przez tę zasadę, aby włączyć dynamiczne działanie, takie jak warunkowe kierowanie punktów końcowych, wykonanie przepływu, egzekwowanie zasad.
Za pomocą zasady AccessEntity
pobierasz dane profilu encji w formacie XML i umieszczasz je w zmiennej. Określasz encję, którą chcesz uzyskać, określając typ encji i co najmniej 1 identyfikator określający, jaki element tego typu chcesz otrzymać. Później w innej zasadzie możesz pobrać dane profilu jednostki przy użyciu innej zasady, np. ExtractVariables lub AssignMessage.
Sample
Poniższe przykłady pokazują użycie atrybutu AccessEntity
w połączeniu z zasadami ExtractVariables
i AssignMessage
do wyodrębnienia adresu e-mail dewelopera i dodania go do nagłówka HTTP.
Uzyskiwanie adresu e-mail dewelopera do użytku w innych zasadach
Skonfiguruj zasadę AccessEntity
, aby określić, który profil encji chcesz pobrać z Edge oraz gdzie umieścić dane profilu.
W poniższym przykładzie zasada uzyskuje profil encji developer
z użyciem klucza interfejsu API przekazywanego jako parametr zapytania w celu identyfikacji dewelopera. Profil zostanie umieszczony w zmiennej, której nazwa ma postać AccessEntity.{policy_name}
. Zmienna ustawiona przez tę zasadę ma więc wartość 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ższa zasada AssignMessage pobiera adres e-mail dewelopera ustawiony przez zasadę 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
to:
<AccessEntity name="policy_name"> <EntityType value="entity_type"/> <EntityIdentifier ref="entity_identifier" type="identifier_type"/> <SecondaryIdentifier ref="secondary_identifier" type="identifier_type"/> </AccessEntity>
Możesz uzyskać dostęp do wielu encji tego samego typu, 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">
Tabela poniżej zawiera opis atrybutów wspólnych dla wszystkich elementów nadrzędnych zasad:
Atrybut | Opis | Domyślne | Obecność |
---|---|---|---|
name |
Wewnętrzna nazwa zasady. Wartość atrybutu Opcjonalnie możesz użyć elementu |
Nie dotyczy | Wymagane |
continueOnError |
Ustaw wartość Ustaw jako |
false | Opcjonalnie |
enabled |
Ustaw jako Ustaw wartość |
prawda | Opcjonalnie |
async |
Ten atrybut został wycofany. |
false | Wycofano |
Element <DisplayName>
Użyj oprócz atrybutu name
, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną nazwą w języku naturalnym.
<DisplayName>Policy Display Name</DisplayName>
Domyślne |
Nie dotyczy Jeśli pominiesz ten element, zostanie użyta wartość atrybutu |
---|---|
Obecność | Opcjonalnie |
Typ | Ciąg znaków |
Element <EntityIdentifier>
Wskazuje konkretną encję – typu podanego w typie EntityType – do pobrania.
<EntityIdentifier ref="value_variable" type="identifier_type"/>
Domyślnie |
Nie dotyczy |
Obecność |
Wymagane |
Typ |
Ciąg znaków |
Atrybuty
Atrybut | Opis | Domyślne | Obecność | Typ |
---|---|---|---|---|
referencja |
Zmienna, która podaje źródło identyfikatora, np. |
Nie dotyczy | To pole jest wymagane. | Ciąg znaków |
typ | Typ wypełniany przez zmienną w atrybucie odsyłającym, np. consumerkey . Listę wartości znajdziesz w sekcji Typy jednostek i identyfikatory. |
To pole jest 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ślnie |
Nie dotyczy |
Obecność |
Wymagane |
Typ |
Ciąg znaków |
Użyj elementu EntityIdentifier
, aby określić, jakiego elementu danego typu chcesz użyć. Informacje o typach encji znajdziesz w artykule Typy i identyfikatory encji.
Atrybuty
Atrybut | Opis | Domyślne | Obecność | Typ |
---|---|---|---|---|
value | Jeden z obsługiwanych typów encji. Listę znajdziesz w sekcji Typy encji i identyfikatory. | Brak. | To pole jest wymagane. | Ciąg znaków |
Element <AdditionalIdentifier>
W połączeniu z EntityIdentifier
określa wartość identyfikującą pożądane wystąpienie danego elementu EntityType
.
<SecondaryIdentifier ref="value_variable" type="identifier_type"/>
Domyślnie |
Nie dotyczy |
Obecność |
Opcjonalnie |
Typ |
Ciąg znaków |
Jeśli określisz tylko EntityIdentifier
, użyj SecondaryIdentifier
, nie gwarantuje, że otrzymasz 1 encję. Więcej informacji znajdziesz w artykule Zawężanie wyników do identyfikatorów dodatkowych.
Używanie wielu elementów SecondaryIdentifier
nie jest obsługiwane.
Atrybuty
Atrybut | Opis | Domyślne | Obecność | Typ |
---|---|---|---|---|
referencja |
Zmienna, która podaje źródło identyfikatora, np. |
Nie dotyczy | To pole jest wymagane. | Ciąg znaków |
typ | Typ wypełniany przez zmienną w atrybucie odsyłającym, np. consumerkey . Listę wartości znajdziesz w sekcji Typy jednostek i identyfikatory. |
To pole jest 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 encji podanie jednego identyfikatora może nie być wystarczająco szczegółowe, aby uzyskać odpowiednią encję. W takich przypadkach możesz użyć identyfikatora dodatkowego, aby zawęzić wyniki.
Pierwsza, potencjalnie szeroka 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>
Aplikację można powiązać z wieloma usługami interfejsu API, więc użycie samego identyfikatora aplikacji może nie zwrócić żądanej usługi (możesz otrzymać tylko pierwszy z wielu pasujących produktów).
Aby uzyskać dokładniejszy wynik, możesz użyć parametru SecondaryIdentifier
. W przepływie mogą być na przykład zmienne appname
i developerid
, ponieważ są one wypełniane domyślnie podczas giełdy OAuth 2.0. Możesz użyć wartości tych zmiennych w zasadzie AccessEntity
, aby uzyskać szczegóły profilu aplikacji, która wysłała żą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 podane niżej typy encji i identyfikatory.
Wartość EntityType | Typy identyfikatorów encji | Typy identyfikatorów dodatkowych |
---|---|---|
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 |
Przykładowy plik XML profilu jednostki
Aby pobrać za pomocą XPath odpowiednią wartość profilu jednostki, musisz znać strukturę XML profilu. Na przykład w celu pobrania kodu XML dla wybranej encji użyj wywołania interfejsu API zarządzania. Więcej informacji znajdziesz w dokumentacji interfejsu Management API.
Widoczne poniżej sekcje zawierają kod wywołań interfejsu API wraz z przykładowym kodem XML z ich 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ż sekcję 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ż sekcję Pobieranie szczegółów aplikacji dla deweloperów 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
Zobacz też sekcję Get API Product w dokumentacji interfejsu Edge Management API.
Przykładowa ścieżka XPath, która pobiera drugi zasób interfejsu API (identyfikator URI) z usługi 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
Zobacz też sekcję Pobieranie szczegółów firmy w dokumentacji interfejsu Edge Management API.
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 w firmie
$ 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 użytkownika
$ 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ż sekcję Pobieranie kluczowych szczegółów aplikacji związanej z deweloperem 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
Zapoznaj się też z sekcją Pobierz dla programistów 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
Po pobraniu profilu jednostki określonego w zasadzie AccessEntity obiekt profilu w formacie XML jest dodawany do kontekstu wiadomości jako zmienna. Jest dostępna tak samo jak każda inna zmienna, z uwzględnieniem jej nazwy. Podana przez użytkownika nazwa zasady AccessEntity jest ustawiona jako prefiks zmiennej nazwy zmiennej.
Jeśli na przykład 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 przeanalizować za pomocą XPath zdefiniowanej w zasadzie ExtractVariables, która jako źródło określa AccessEntity.GetDeveloper
.
Informacje o błędach
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
: zasada ExtractVariablesAssignMessage
: zasady przypisywania wiadomości