Stai visualizzando la documentazione di Apigee Edge.
Vai alla
documentazione di Apigee X. informazioni
Cosa
Recupera i profili entità che hai specificato 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 aziendale
- Chiave utente
- Sviluppatore
Il criterio AccessEntity
funziona come una ricerca di database di runtime basata su criteri. Puoi utilizzare le informazioni del profilo restituite da questo criterio per attivare comportamenti dinamici, come il routing condizionale degli endpoint, l'esecuzione del flusso e l'applicazione dei criteri.
Puoi utilizzare il criterio AccessEntity
per ottenere i dati del profilo dell'entità sotto forma di
XML e inserirli in una variabile. Per identificare l'entità da ottenere, devi specificare un tipo di entità
e uno o più identificatori che specificano l'entità di quel tipo che vuoi. In seguito, in un altro criterio, potrai recuperare i dati del profilo dell'entità con un altro criterio, ad esempio un criterio ExtractVariables o AssignMessage.
Samples
Gli esempi riportati di seguito mostrano che l'elemento AccessEntity
è utilizzato in combinazione con i criteri ExtractVariables
e AssignMessage
per estrarre l'email di uno sviluppatore e aggiungerla all'intestazione HTTP.
Ottenere l'email dello sviluppatore da utilizzare in altre norme
Configura il criterio AccessEntity
per specificare quale profilo entità ricevere da Edge, nonché dove posizionare i dati del profilo.
Nell'esempio seguente, il criterio 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}
. Di conseguenza, la variabile impostata da questo criterio sarebbe 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 entità dalla variabile impostata da
AccessEntity
.
Nell'esempio seguente, un criterio ExtractVariables
recupera un valore dalla variabile AccessEntity.GetDeveloperProfile
impostata in precedenza da AccessEntity
.
Tieni presente che il valore recuperato viene 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>
Il seguente criterio AttributionMessage consente di recuperare l'email dello sviluppatore impostata dal criterio 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 dei criteri:
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
name |
Il nome interno della norma. Il valore dell'attributo Facoltativamente, utilizza l'elemento |
N/A | Obbligatorie |
continueOnError |
Impostalo su Imposta su |
false | Facoltativo |
enabled |
Imposta il criterio su Impostala su |
true | Facoltativo |
async |
Questo attributo è obsoleto. |
false | Deprecata |
Elemento <DisplayName>
Utilizzalo in aggiunta all'attributo name
per etichettare il criterio nell'editor proxy dell'interfaccia utente di gestione con un nome diverso in linguaggio naturale.
<DisplayName>Policy Display Name</DisplayName>
Predefinito |
N/A Se ometti questo elemento, viene utilizzato il valore dell'attributo |
---|---|
Presenza | Facoltativo |
Tipo | Stringa |
Elemento <EntityIdentifier>
Specifica l'entità specifica, del tipo specificato in EntityType, da ottenere.
<EntityIdentifier ref="value_variable" type="identifier_type"/>
Predefinita |
N/A |
Presenza |
Obbligatorie |
Digitare |
Stringa |
Attributi
Attributo | Descrizione | Predefinito | Presenza | Tipo |
---|---|---|---|---|
rif |
La variabile che fornisce l'origine dell'identificatore, ad esempio
|
N/A | Obbligatorio. | Stringa |
digita | 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>
Elemento <EntityType>
Specifica il tipo di entità da recuperare dal datastore.
<EntityType value="entity_type"/>
Predefinita |
N/A |
Presenza |
Obbligatorie |
Digitare |
Stringa |
Utilizza un elemento EntityIdentifier
per specificare quale entità del tipo specificato vuoi. Per un riferimento dei tipi di entità, consulta la sezione Tipi di entità e identificatori.
Attributi
Attributo | Descrizione | Predefinito | Presenza | Tipo |
---|---|---|---|---|
valore | Uno dei tipi di entità supportati. Consulta Tipi di entità e identificatori per un elenco. | Nessuna. | Obbligatorio. | Stringa |
Elemento <SecondaryIdentifier>
In combinazione con EntityIdentifier
, specifica un valore per identificare l'istanza desiderata dell'elemento EntityType
specificato.
<SecondaryIdentifier ref="value_variable" type="identifier_type"/>
Predefinita |
N/A |
Presenza |
Facoltativo |
Digitare |
Stringa |
L'utilizzo di SecondaryIdentifier
quando specifichi solo un valore EntityIdentifier
non garantisce di ottenere una singola entità. Per saperne di più, consulta la sezione Restringere i risultati con identificatori secondari.
L'utilizzo di più elementi SecondaryIdentifier
non è supportato.
Attributi
Attributo | Descrizione | Predefinito | Presenza | Tipo |
---|---|---|---|---|
rif |
La variabile che fornisce l'origine dell'identificatore, ad esempio
|
N/A | Obbligatorio. | Stringa |
digita | 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 sufficientemente specifico per ottenere l'entità che ti interessa. In questi casi, puoi utilizzare un identificatore secondario per restringere i risultati.
La tua prima configurazione di criteri, potenzialmente generica, 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>
Un'app può essere associata a più prodotti API, pertanto utilizzare solo l'ID app potrebbe non restituire il prodotto API desiderato (puoi ottenere solo il primo di più prodotti corrispondenti).
Per ottenere un risultato più preciso, potresti invece utilizzare un elemento SecondaryIdentifier
. Ad
esempio, potresti avere 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 un criterio AccessEntity
per ottenere i dettagli del profilo sull'app
richiedente.
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 identificatori di 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 dell'entità di esempio
Per recuperare il valore del profilo entità desiderato con XPath, devi conoscere la struttura XML del profilo. Per un esempio della struttura, utilizza una chiamata API di gestione per ottenere il codice XML dell'entità che ti interessa. Per maggiori dettagli, consulta il riferimento per l'API di gestione.
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 Ottenere l'app in un'organizzazione per ID app nel riferimento dell'API Edge Management.
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 Recupero dei dettagli dell'app per sviluppatori nel riferimento dell'API Edge Management.
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 prodotto API nel riferimento API di gestione perimetrale.
XPath di esempio, recupera la seconda risorsa API (URI) dal prodotto API 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
Vedi anche Recupero dei dettagli dell'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 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>
Chiave utente
$ 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 dettagli chiave per un'app sviluppatore nel riferimento dell'API Edge Management.
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 Ottieni sviluppatore nel 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, l'oggetto del profilo in formato XML viene aggiunto al contesto del messaggio come variabile. È possibile accedervi come qualsiasi altra variabile, con riferimento al nome della variabile. Il nome fornito dall'utente del criterio AccessEntity viene impostato come prefisso della variabile del nome della variabile.
Ad esempio, se viene eseguito un criterio AccessEntity con nome GetDeveloper
,
il profilo in formato XML viene archiviato 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 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
: norma ExtractVariablesAssignMessage
: criterio AttributionMessage