Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione
Documentazione di Apigee X. Informazioni
Cosa
Recupera i profili di entità specificati dal datastore Apigee Edge. La norma inserisce
profilo in una variabile il cui nome segue il formato AccessEntity.{policy_name}
. Tu
può utilizzare AccessEntity
per accedere ai profili per le seguenti entità:
- App
- Prodotto API
- Società
- Sviluppatore aziendale
- Consumer key
- Sviluppatore
Il criterio AccessEntity
funziona come una ricerca di database di runtime basata su criteri. Tu
puoi utilizzare le informazioni del profilo restituite da questo criterio per attivare comportamenti dinamici, ad esempio
routing condizionale degli endpoint, esecuzione del flusso, applicazione dei criteri.
Utilizzi il criterio AccessEntity
per ottenere i dati del profilo entità come
XML e inserirlo in una variabile. Devi identificare l'entità da ottenere specificando un'entità
e uno o più identificatori che specificano quale entità di quel tipo vuoi. Più avanti, tra
in un altro criterio, puoi recuperare i dati del profilo dell'entità con un altro criterio, ad esempio
Criterio ETL o criterio AttributionMessage.
Esempi
Gli esempi seguenti mostrano l'uso della classe AccessEntity
insieme alla
Criteri ExtractVariables
e AssignMessage
per estrarre il valore
dell'email e aggiungerla all'intestazione HTTP.
Richiedere l'indirizzo email dello sviluppatore da utilizzare in altri criteri
Configura il criterio AccessEntity
per specificare da quale profilo entità eseguire l'accesso
Edge, nonché la posizione in cui inserire i dati del profilo.
Nell'esempio seguente, il criterio ottiene un profilo di entità developer
utilizzando un
Chiave API passata come parametro di query per identificare lo sviluppatore. Il profilo si trova in una
il cui nome segue il formato AccessEntity.{policy_name}
. Quindi la variabile
impostato 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à dalla variabile impostata da
AccessEntity
.
Nell'esempio seguente, un criterio ExtractVariables
recupera un valore da
la variabile AccessEntity.GetDeveloperProfile
impostata in precedenza
AccessEntity
.
Tieni presente che il valore recuperato viene specificato come espressione XPath nella
Elemento XMLPayload
. Il valore estratto viene inserito in un
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>
Il seguente criterioAssignMessage recupera l'email dello sviluppatore impostata dal Criterio ETL (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 una
Identifiers
elemento:
<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>
<AccessEntity> attributi
<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 Se vuoi, puoi utilizzare l'elemento |
N/D | Obbligatorio |
continueOnError |
Imposta il valore su Imposta su |
falso | Facoltativo |
enabled |
Imposta il valore su Imposta |
true | Facoltativo |
async |
Questo attributo è obsoleto. |
falso | Deprecato |
<DisplayName> 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 |
---|---|
Presenza | Facoltativo |
Tipo | Stringa |
<EntityIdentifier> elemento
Specifica l'entità particolare, del tipo specificato in EntityType, da ottenere.
<EntityIdentifier ref="value_variable" type="identifier_type"/>
Predefinita |
N/D |
Presenza |
Obbligatorio |
Tipo |
Stringa |
Attributi
Attributo | Descrizione | Predefinito | Presenza | Tipo |
---|---|---|---|---|
riferimento |
La variabile che fornisce l'origine dell'identificatore, ad esempio
|
N/D | Obbligatorio. | Stringa |
tipo | Il tipo compilato dalla variabile nell'attributo ref. come
consumerkey . Consulta 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>
<EntityType> elemento
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 sui tipi di entità, consulta Tipi di entità e identificatori.
Attributi
Attributo | Descrizione | Predefinito | Presenza | Tipo |
---|---|---|---|---|
valore | Uno dei tipi di entità supportati. Vedi Tipi di entità e identificatori per un elenco. | Nessuno. | Obbligatorio. | Stringa |
<SecondaryIdentifier> elemento
Oltre a EntityIdentifier
, specifica un valore per identificare il
dell'oggetto EntityType
specificato.
<SecondaryIdentifier ref="value_variable" type="identifier_type"/>
Predefinita |
N/D |
Presenza |
Facoltativo |
Tipo |
Stringa |
Usa SecondaryIdentifier
quando specifichi solo un EntityIdentifier
non garantiranno la presenza di una singola entità. Consulta la sezione Restringimento
con identificatori secondari per saperne di più.
L'utilizzo di più elementi SecondaryIdentifier
non è supportato.
Attributi
Attributo | Descrizione | Predefinito | Presenza | Tipo |
---|---|---|---|---|
riferimento |
La variabile che fornisce l'origine dell'identificatore, ad esempio
|
N/D | Obbligatorio. | Stringa |
tipo | Il tipo compilato dalla variabile nell'attributo ref. come
consumerkey . Consulta 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
Limitazione dei risultati con identificatori secondari
Per alcune entità, fornire un identificatore potrebbe non essere abbastanza specifico per ottenere l'entità desiderato. In questi casi, puoi utilizzare un identificatore secondario per restringere i risultati.
La tua prima configurazione dei criteri, potenzialmente 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 vuoi (potresti ricevere solo il primo di più prodotti corrispondenti).
Invece, per ottenere un risultato più preciso, puoi utilizzare un SecondaryIdentifier
. Per
Ad esempio, nel flusso potrebbero essere presenti variabili appname
e developerid
perché vengono compilate per impostazione predefinita durante uno scambio OAuth 2.0. Puoi utilizzare i valori
queste variabili in un criterio AccessEntity
per ottenere i dettagli del profilo della richiesta
dell'app.
La configurazione dei criteri più specifica 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 | Tipi di identificatore entità | Tipi di identificatori secondari |
---|---|---|
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 |
XML di profilo entità di esempio
Per recuperare il valore del profilo entità che vuoi con XPath, devi sapere qualcosa la struttura del file XML del profilo. Per un esempio della struttura, utilizza una chiamata API di gestione per ottenere XML per l'entità che ti interessa. Per maggiori dettagli, fai riferimento all'API di gestione riferimento.
Le seguenti sezioni includono il codice per le chiamate API, oltre all'XML di esempio 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
Vedi anche Scaricare l'app in un Organizzazione per ID app nel riferimento dell'API di gestione perimetrale.
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
Vedi anche Ottieni Dettagli dell'app sviluppatore nel riferimento dell'API di gestione perimetrale.
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
Vedi anche Ottieni API Product nel riferimento dell'API di gestione perimetrale.
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 come 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
Vedi anche Ottieni Dettagli dell'azienda nel riferimento dell'API di gestione perimetrale.
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 aziendale
$ 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
Vedi anche Ottieni i dettagli chiave di un'app sviluppatore nel riferimento dell'API di gestione perimetrale.
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
Vedi anche Ottenere sviluppatore nella il riferimento dell'API Edge Management.
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 entità specificato nel criterio AccessEntity, viene restituito il codice Profile viene aggiunto al contesto del messaggio come variabile. È accessibile come qualsiasi altro facendo riferimento al nome della variabile. Il nome del criterio AccessEntity fornito dall'utente è impostato come prefisso del nome della variabile.
Ad esempio, se viene eseguito un criterio AccessEntity con nome GetDeveloper
,
il profilo in formato XML viene memorizzato nella variabile denominata
AccessEntity.GetDeveloper
. Il profilo in formato XML può quindi essere analizzato utilizzando
XPath definito in un criterio ExtractVariables che specifica AccessEntity.GetDeveloper
come origine.
Messaggi di errore
Per informazioni correlate, consulta gli articoli Cosa devi sapere sugli errori relativi ai criteri e Gestione degli errori.
Errori di runtime
Nessuna.
Errori di deployment
Nome errore | Stringa di errore | Stato HTTP | Si verifica quando |
---|---|---|---|
InvalidEntityType |
Invalid type [entity_type] in ACCESSENTITYStepDefinition
[policy_name] |
N/A | Il tipo di entità utilizzato deve essere uno dei tipi supportati. |
Argomenti correlati
ExtractVariables
: criterio ExtractVariablesAssignMessage
: criterio AttributionMessage