Zasada AccessEntity

Przeglądasz dokumentację Apigee Edge.
Przejdź do Dokumentacja Apigee X.
informacje.

Co

Pobiera określone profile encji z magazynu danych Apigee Edge. Zgodnie z tymi zasadami profilu w zmiennej, której nazwa jest zgodna z formatem AccessEntity.{policy_name}. Ty za pomocą adresu AccessEntity może uzyskać dostęp do profili tych podmiotów:

  • Promująca aplikację
  • Usługa API
  • Firma
  • Deweloper firmy
  • Klucz konsumenta
  • Deweloper
.

Zasada AccessEntity działa jak oparte na zasadach wyszukiwanie bazy danych w środowisku wykonawczym. Ty mogą używać informacji o profilu zwróconych przez tę zasadę, aby umożliwić dynamiczne zachowanie, takie jak warunkowe kierowanie punktu końcowego, wykonywanie przepływu, egzekwowanie zasad.

Używasz zasady AccessEntity, aby pobierać dane profilu encji jako XML i umieszczać go w zmiennej. Aby określić encję do pobrania, wskaż encję i co najmniej jeden identyfikator, który określa, o który element tego typu Ci chodzi. Później, za z innej zasady, możesz pobrać dane profilu jednostki przy użyciu innej zasady, np. ExtractZmienne zasady lub AssignMessage (zasada AssignMessage).

Przykłady

W przykładach poniżej pokazujemy, jak AccessEntity jest używany w połączeniu z Zasady ExtractVariables i AssignMessage umożliwiające wyodrębnienie e-maila i dodaj go do nagłówka HTTP.

Uzyskiwanie adresu e-mail dewelopera do użycia w innych zasadach

Skonfiguruj zasadę AccessEntity, aby określić, z którego profilu jednostki ma pochodzić dane Edge, a także miejsce, w którym chcesz umieścić dane profilowe.

W poniższym przykładzie zasada otrzymuje profil jednostki developer za pomocą Klucz interfejsu API przekazywany jako parametr zapytania w celu identyfikacji dewelopera. Profil jest umieszczony w o nazwie, która ma postać AccessEntity.{policy_name}. Dlatego 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ść z zmienną AccessEntity.GetDeveloperProfile ustawioną wcześniej przez AccessEntity

Pobrana wartość jest określona jako wyrażenie XPath w kluczu XMLPayload element. Wyodrębniona wartość jest umieszczana w elemencie Zmienna 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 przypisywania wiadomości pobierają adres e-mail dewelopera ustawiony przez Wyodrębnij zmiennąs.

<!-- 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:

<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 elementów tego samego typu, grupując je w Element 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>

&lt;AccessEntity&gt; atrybuty

<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

&lt;EntityIdentifier&gt; element

Określa konkretną encję – typu podanego w typie encji – do pobrania.

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

Domyślnie

Nie dotyczy

Obecność

Wymagane

Typ

Ciąg znaków

Atrybuty

Atrybut Opis Domyślny Obecność Typ
odsyłacz

Zmienna, która dostarcza źródło identyfikatora, np. request.queryparam.apikey

Nie dotyczy Wymagane. Ciąg znaków
typ Typ wypełniany przez zmienną w atrybucie ref. na przykład consumerkey Zapoznaj się z sekcją Typy jednostek i identyfikatory dotyczące: listę wartości. 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>

&lt;EntityType&gt; element

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ć który typ elementu chcesz stosować. Informacje o typach elementów znajdziesz w artykule Typy i identyfikatory jednostek.

Atrybuty

Atrybut Opis Domyślny Obecność Typ
wartość Jeden z obsługiwanych typów elementów. Zobacz Typy jednostek i identyfikatorów listy. Brak. Wymagane. Ciąg znaków

&lt;SecondaryIdentifier&gt; element

W połączeniu z funkcją EntityIdentifier określa wartość identyfikującą pożądane wystąpienia danego elementu EntityType.

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

Domyślnie

Nie dotyczy

Obecność

Opcjonalnie

Typ

Ciąg znaków

Użyj SecondaryIdentifier, gdy określasz tylko EntityIdentifier nie gwarantuje, że otrzymasz pojedynczy element. Patrz sekcja Zawężanie z identyfikatorami dodatkowymi.

Nie można używać wielu elementów SecondaryIdentifier.

Atrybuty

Atrybut Opis Domyślny Obecność Typ
odsyłacz

Zmienna, która dostarcza źródło identyfikatora, np. request.queryparam.apikey

Nie dotyczy Wymagane. Ciąg znaków
typ Typ wypełniany przez zmienną w atrybucie ref. na przykład consumerkey Zapoznaj się z sekcją Typy jednostek i identyfikatory dotyczące: listę wartości. 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 dokładne, aby uzyskać w pobliżu. W takich przypadkach możesz użyć identyfikatora dodatkowego, aby zawęzić wyniki.

Twoja pierwsza 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 API, dlatego samo użycie jej identyfikatora może nie być zwróci odpowiedni produkt API (możesz uzyskać tylko pierwszy z kilku pasujących produktów).

Aby uzyskać dokładniejszy wynik, możesz użyć SecondaryIdentifier. Dla: możesz mieć np. zmienne appname i developerid w przepływie , bo są one domyślnie wypełniane w ramach wymiany OAuth 2.0. Możesz użyć wartości te zmienne w zasadzie AccessEntity, aby uzyskać szczegóły profilu dotyczące żądania .

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 jednostek i identyfikatory

AccessEntity obsługuje te typy elementów i identyfikatory.

Wartość typu encji Typy identyfikatorów encji Dodatkowy identyfikator
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 kod XML profilu jednostki

Aby pobrać wartość profilu jednostki, której chcesz użyć za pomocą XPath, musisz wiedzieć coś o tym zgodnie ze strukturą XML profilu. Na przykład użyj wywołania interfejsu zarządzania API, aby uzyskać XML dla wybranej encji. Szczegółowe informacje znajdziesz w materiałach o interfejsie API do zarządzania odniesienie.

Sekcje poniżej zawierają 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 Organizacja 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ż Pobierz Szczegóły 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

Zobacz też Get API Usługa w opisie interfejsu Edge Management API.

Przykładowa ścieżka XPath, pobiera drugi zasób interfejsu API (URI) z usługi API o nazwie weather_free:

/ApiProduct['@name=weather_free']/ApiResources/ApiResource[1]/text()

Przykładowy profil zwrócony jako 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ż Pobierz Informacje o firmie 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 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ż . Dowiedz się więcej o kluczowych informacjach o aplikacji dewelopera w dokumentacji interfejsu Edge Management API.

Przykładowy 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

Więcej informacji znajdziesz w artykule Uzyskiwanie programisty w zapoznaj się z informacjami o interfejsie Edge Management API.

Przykładowy 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 plik w formacie XML Obiekt profilu jest dodawany do kontekstu wiadomości jako zmienna. Są dostępne tak jak każde inne narzędzie. z odniesieniem do jej nazwy. Podana przez użytkownika nazwa zasady AccessEntity jest ustawiony jako prefiks nazwy zmiennej.

Jeśli na przykład zostanie wykonana zasada AccessEntity o nazwie GetDeveloper, profil w formacie XML jest przechowywany w zmiennej o nazwie AccessEntity.GetDeveloper Profil w formacie XML może zostać następnie przeanalizowany za pomocą funkcji XPath zdefiniowaną w zasadzie Extractvariables, która wskazuje AccessEntity.GetDeveloper jako źródła informacji.

Informacje o błędzie

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