Criterio AccessEntity

Stai visualizzando la documentazione di Apigee Edge.
Consulta la documentazione di Apigee X.
info

Cosa

Recupera i profili delle entità specificate dal datastore Apigee Edge. Il criterio inserisce il profilo in una variabile il cui nome segue il formato AccessEntity.{policy_name}. Puoi utilizzare AccessEntity per accedere ai profili delle seguenti entità:

  • App
  • Prodotto API
  • Società
  • Sviluppatore dell'azienda
  • Consumer key
  • Sviluppatore

Il criterio AccessEntity funziona come una ricerca nel database di runtime basata su criteri. Puoi utilizzare le informazioni del profilo restituite da questo criterio per attivare il comportamento dinamico, ad esempio il routing degli endpoint condizionale, l'esecuzione del flusso e l'applicazione dei criteri.

Utilizzi la policy AccessEntity per ottenere i dati del profilo dell'entità come XML e inserirli in una variabile. Identifichi l'entità da recuperare specificando un tipo di entità e uno o più identificatori che specificano l'entità di quel tipo che ti interessa. In un secondo momento, in un'altra norma, puoi recuperare i dati del profilo dell'entità con un'altra norma, ad esempio una norma ExtractVariables o AssignMessage.

Esempi

Gli esempi seguenti mostrano AccessEntity utilizzato insieme alle norme ExtractVariables e AssignMessage per estrarre l'indirizzo email di uno sviluppatore e aggiungerlo all'intestazione HTTP.

Recupero dell'email dello sviluppatore da utilizzare in altre norme

Configura il criterio AccessEntity per specificare quale profilo entità recuperare da Edge, nonché dove inserire i dati del profilo.

Nell'esempio seguente, la policy ottiene un profilo entità developer utilizzando una chiave API passata come parametro di query per identificare lo sviluppatore. Il profilo viene inserito in una variabile il cui nome segue il formato AccessEntity.{policy_name}. Pertanto, la variabile impostata da questo criterio sarà 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>

Utilizza un altro criterio per recuperare il valore del profilo dell'entità dal set di variabili impostato da AccessEntity.

Nell'esempio seguente, una policy ExtractVariables recupera un valore dalla variabile AccessEntity.GetDeveloperProfile impostata in precedenza da AccessEntity.

Tieni presente che il valore recuperato è specificato come espressione XPath nell'elemento XMLPayload. Il valore estratto viene inserito in una variabile 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>

La seguente policy AssignMessage recupera l'email dello sviluppatore impostata dalla policy 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>

Riferimento elemento

La struttura di base di un criterio AccessEntity è:

<AccessEntity name="policy_name">
  <EntityType  value="entity_type"/>
  <EntityIdentifier ref="entity_identifier" type="identifier_type"/> 
  <SecondaryIdentifier ref="secondary_identifier" type="identifier_type"/>
</AccessEntity>

Puoi accedere a più entità dello stesso tipo raggruppandole in un elemento 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>

Attributi <AccessEntity>

<AccessEntity async="false" continueOnError="false" enabled="true" name="policy_name">

La tabella seguente descrive gli attributi comuni a tutti gli elementi principali del criterio:

Attributo Descrizione Predefinito Presenza
name

Il nome interno del criterio. Il valore dell'attributo name può Deve contenere lettere, numeri, spazi, trattini, trattini bassi e punti. Questo valore non può superare i 255 caratteri.

Se vuoi, puoi utilizzare l'elemento <DisplayName> per etichettare il criterio in l'editor proxy della UI di gestione con un nome diverso in linguaggio naturale.

N/D Obbligatorio
continueOnError

Imposta il valore su false per restituire un errore quando un criterio non viene eseguito. Si tratta di un comportamento previsto per la maggior parte dei criteri.

Imposta su true per fare in modo che l'esecuzione del flusso continui anche dopo un criterio non riesce.

falso Facoltativo
enabled

Imposta il valore su true per applicare il criterio.

Imposta false per disattivare il criterio. Il criterio non verrà applicata anche se rimane collegata a un flusso.

true Facoltativo
async

Questo attributo è obsoleto.

falso Deprecato

&lt;DisplayName&gt; elemento

Da utilizzare in aggiunta all'attributo name per etichettare il criterio in editor proxy della UI di gestione con un nome diverso e in linguaggio naturale.

<DisplayName>Policy Display Name</DisplayName>
Predefinito

N/D

Se ometti questo elemento, il valore dell'attributo name del criterio è in uso.

Presenza Facoltativo
Tipo Stringa

Elemento <EntityIdentifier>

Specifica l'entità particolare, del tipo indicato in EntityType, da recuperare.

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

Predefinita

N/D

Presenza

Obbligatorio

Tipo

Stringa

Attributi

Attributo Descrizione Predefinito Presenza Tipo
ref

La variabile che fornisce l'origine dell'identificatore, ad esempio request.queryparam.apikey.

N/D Obbligatorio. Stringa
tipo Il tipo compilato dalla variabile nell'attributo ref, ad esempio consumerkey. Consulta la sezione Tipi di entità e identificatori per un elenco di valori. Obbligatorio. Stringa

Esempio

<?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>

Elemento <EntityType>

Specifica il tipo di entità da recuperare dal datastore.

<EntityType  value="entity_type"/>

Predefinita

N/D

Presenza

Obbligatorio

Tipo

Stringa

Utilizza un elemento EntityIdentifier per specificare quale entità del tipo specificato vuoi. Per un riferimento ai tipi di entità, consulta Tipi di entità e identificatori.

Attributi

Attributo Descrizione Predefinito Presenza Tipo
valore Uno dei tipi di entità supportati. Per un elenco, consulta Tipi di entità e identificatori. Nessuno. Obbligatorio. Stringa

Elemento <SecondaryIdentifier>

Insieme a EntityIdentifier, specifica un valore per identificare l'istanza desiderata di EntityType specificato.

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

Predefinita

N/D

Presenza

Facoltativo

Tipo

Stringa

Utilizza SecondaryIdentifier quando specifichi solo un EntityIdentifier non ti garantirà di ottenere una singola entità. Per saperne di più, consulta la sezione Restringere i risultati con gli identificatori secondari.

L'utilizzo di più elementi SecondaryIdentifier non è supportato.

Attributi

Attributo Descrizione Predefinito Presenza Tipo
ref

La variabile che fornisce l'origine dell'identificatore, ad esempio request.queryparam.apikey.

N/D Obbligatorio. Stringa
tipo Il tipo compilato dalla variabile nell'attributo ref, ad esempio consumerkey. Consulta la sezione Tipi di entità e identificatori per un elenco di valori. Obbligatorio. Stringa

Esempio

<?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>

Note sull'utilizzo

Restringere i risultati con gli identificatori secondari

Per alcune entità, fornire un identificatore potrebbe non essere abbastanza specifico per ottenere l'entità che ti interessa. In questi casi, puoi utilizzare un identificatore secondario per restringere i risultati.

La prima configurazione dei criteri, probabilmente ampia, potrebbe avere il seguente aspetto:

<?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>

Poiché un'app può essere associata a più prodotti API, l'utilizzo del solo ID app potrebbe non restituire il prodotto API che ti interessa (potresti ottenere solo il primo di più prodotti corrispondenti).

Per ottenere un risultato più preciso, puoi utilizzare un SecondaryIdentifier. Ad esempio, potresti avere le variabili appname e developerid nel flusso perché vengono compilate per impostazione predefinita durante uno scambio OAuth 2.0. Puoi utilizzare i valori di queste variabili in una policy AccessEntity per ottenere i dettagli del profilo nell'app richiedente.

La configurazione delle norme più specifiche potrebbe avere il seguente aspetto:

<?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>

Tipi di entità e identificatori supportati

AccessEntity supporta i seguenti tipi di entità e identificatori.

Valore EntityType EntityIdentifier Types SecondaryIdentifier Types
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

Esempio di XML del profilo dell'entità

Per recuperare il valore del profilo entità che ti interessa con XPath, devi conoscere la struttura dell'XML del profilo. Per un esempio della struttura, utilizza una chiamata API di gestione per ottenere l'XML per l'entità che ti interessa. Per maggiori dettagli, consulta il riferimento dell'API Management.

Le sezioni seguenti includono il codice per le chiamate API, insieme a un esempio di XML della chiamata.

App

$ curl -H "Accept:text/xml" -X GET \
https://api.enterprise.apigee.com/v1/o/{org_name}/apps/{app_id} \
-u email:password

Consulta anche Recupera app in un'organizzazione per ID app nel riferimento API di gestione Edge.

Oppure:

$ 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

Consulta anche Recupera i dettagli dell'app per sviluppatori nel riferimento API di gestione Edge.

Profilo di esempio:

<?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>

Prodotto API

$ curl  -H "Accept:text/xml" -X GET \
https://api.enterprise.apigee.com/v1/o/{org_name}/apiproducts/{apiproduct_name} \
-u email:password

Consulta anche Recupera prodotto API nel riferimento dell'API Edge Management.

XPath di esempio, recupera la seconda risorsa API (URI) dal prodotto API denominato weather_free:

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

Profilo di esempio restituito in formato 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>

Società

$ curl   -H "Accept:text/xml" -X GET \
https://api.enterprise.apigee.com/v1/o/{org_name}/companies/{company_name} \
-u email:password

Consulta anche Recupera dettagli azienda nel riferimento dell'API Edge Management.

Profilo di esempio:

<?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>

Sviluppatore dell'azienda

$ 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

Profilo di esempio:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Developers>
    <Developer>
        <Email>ntesla@theramin.com</Email>
        <Role>developer</Role>
    </Developer>
</Developers>

Consumer key

$ 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

Consulta anche Recupera i dettagli della chiave per un'app per sviluppatori nel riferimento API di gestione Edge.

XPath di esempio:

/Credential/ApiProducts/ApiProduct[Name='weather_free']/Status/text()

Profilo di esempio:

<?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>

Sviluppatore

$ curl -H "Accept:text/xml" -X GET \
https://api.enterprise.apigee.com/v1/o/{org_name}/developers/{developer_email} \
-u email:password

Consulta anche Get Developer nella guida di riferimento dell'API di gestione Edge.

XPath di esempio:

/Developer/Attributes/Attribute[Name='my_custom_attribute']/Value/text()
/Developer/Email/text()

Profilo di esempio:

<?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>

Variabili di flusso

Quando viene recuperato il profilo dell'entità specificato nel criterio AccessEntity, l'oggetto profilo in formato XML viene aggiunto al contesto del messaggio come variabile. È possibile accedervi come a qualsiasi altra variabile, facendo riferimento al nome della variabile. Il nome fornito dall'utente della policy AccessEntity è impostato come prefisso della variabile del nome della variabile.

Ad esempio, se viene eseguita una policy AccessEntity con il nome GetDeveloper, il profilo in formato XML viene memorizzato nella variabile denominata AccessEntity.GetDeveloper. Il profilo in formato XML può quindi essere analizzato utilizzando un XPath definito in un criterio ExtractVariables che specifica AccessEntity.GetDeveloper come origine.

Messaggi di errore

Per informazioni correlate, consulta Informazioni importanti sugli errori delle norme e Gestire gli errori.

Errori di runtime

Nessuno.

Errori di deployment

Nome dell'errore Stringa di errore Stato HTTP Si verifica quando
InvalidEntityType Invalid type [entity_type] in ACCESSENTITYStepDefinition [policy_name] N/D Il tipo di entità utilizzato deve essere uno dei tipi supportati.

Argomenti correlati