Zasada AccessEntity

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 name może zawierać litery, cyfry, spacje, łączniki, podkreślenia i kropki. Ta wartość nie może przekraczać 255 znaków.

Opcjonalnie możesz użyć elementu <DisplayName>, aby oznaczyć zasadę w edytorze serwera proxy interfejsu zarządzania inną nazwą w języku naturalnym.

Nie dotyczy Wymagane
continueOnError

Ustaw wartość false, aby zwracać błąd w przypadku niepowodzenia zasady. Jest to normalne działanie większości zasad.

Ustaw jako true, aby wykonywanie przepływu było kontynuowane nawet po awarii zasady.

false Opcjonalnie
enabled

Ustaw jako true, aby wymuszać zasadę.

Ustaw wartość false, aby wyłączyć tę zasadę. Zasada nie będzie egzekwowana, nawet jeśli pozostanie dołączona do procesu.

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 name zasady.

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. request.queryparam.apikey.

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. request.queryparam.apikey.

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