Zasada AccessEntity

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 ExtractVariablesAssignMessage, 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 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> do oznaczenia zasady jako edytor proxy interfejsu zarządzania z inną nazwą w języku naturalnym.

Nie dotyczy Wymagane
continueOnError

Ustaw jako false, aby w przypadku niepowodzenia zasady zwracany był błąd. To normalne w przypadku większości zasad.

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

fałsz Opcjonalnie
enabled

Aby egzekwować zasadę, ustaw wartość true.

Aby wyłączyć zasadę, ustaw wartość false. Te zasady nie będą jest wymuszane nawet wtedy, gdy jest ono połączone z przepływem.

prawda Opcjonalnie
async

Ten atrybut został wycofany.

fałsz Wycofano

&lt;DisplayName&gt; 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 name zasady otrzyma wartość .

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

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

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 appnamedeveloperid, 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 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 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