AccessEntity politikası

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

Ne

Apigee Edge veri deposundan belirttiğiniz varlık profillerini alır. Politika, profili, adı AccessEntity.{policy_name} biçimine uygun bir değişkene yerleştirir. Aşağıdaki varlıkların profillerine erişmek için AccessEntity öğesini kullanabilirsiniz:

  • Uygulama
  • API ürünü
  • Şirket
  • Şirket geliştirici
  • Tüketici anahtarı
  • Geliştirici

AccessEntity politikası, politikaya dayalı bir çalışma zamanı veritabanı araması görevi görür. Koşullu uç nokta yönlendirme, akış yürütme, politika uygulama gibi dinamik davranışları etkinleştirmek için bu politikanın döndürdüğü profil bilgilerini kullanabilirsiniz.

Varlık profili verilerini XML olarak almak ve bir değişkene yerleştirmek için AccessEntity politikasını kullanırsınız. Alınacak varlığı, bir varlık türü ve bu türden hangi varlığı istediğinizi belirten bir veya daha fazla tanımlayıcı belirterek tanımlarsınız. Daha sonra başka bir politikada, varlık profili verilerini ExtractVariables politikası veya assignMessage politikası gibi başka bir politikayla alabilirsiniz.

Sana Özel

Aşağıdaki örneklerde AccessEntity, bir geliştiricinin e-postasını almak ve HTTP üst bilgisine eklemek için ExtractVariables ve AssignMessage politikalarıyla birlikte kullanıldığını göstermektedir.

Diğer politikalarda kullanılmak üzere geliştirici e-postası alma

Edge'den alınacak varlık profilini ve profil verilerinin nereye yerleştirileceğini belirtmek için AccessEntity politikasını ayarlayın.

Aşağıdaki örnekte politika, geliştiriciyi tanımlamak için sorgu parametresi olarak iletilen bir API anahtarını kullanarak developer varlık profili alır. Profil, adı AccessEntity.{policy_name} biçiminde olan bir değişkene yerleştirilir. Dolayısıyla, bu politika tarafından ayarlanan değişken AccessEntity.GetDeveloperProfile olur.

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

AccessEntity tarafından ayarlanan değişkenden varlık profili değerini almak için başka bir politika kullanın.

Aşağıdaki örnekte ExtractVariables politikası, AccessEntity tarafından önceden ayarlanan AccessEntity.GetDeveloperProfile değişkeninden bir değer alıyor.

Alınan değerin, XMLPayload öğesinde bir XPath ifadesi olarak belirtildiğini unutmayın. Ayıklanan değer bir developer.email değişkenine yerleştirilir.

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

Aşağıdaki assignMessage politikası, ExtractVariables politikasında ayarlanan geliştirici e-postasını alır.

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

Öğe referansı

AccessEntity politikasının temel yapısı şu şekildedir:

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

Aynı türde birden çok varlığa erişmek için bunları bir Identifiers öğesinde gruplandırabilirsiniz:

<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> özellikleri

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

Aşağıdaki tabloda, tüm politika üst öğelerinde ortak olan özellikler açıklanmaktadır:

Özellik Açıklama Varsayılan Varlık
name

Politikanın dahili adı. name özelliğinin değeri harf, sayı, boşluk, kısa çizgi, alt çizgi ve nokta içerebilir. Bu değer 255 karakterden uzun olamaz.

İsteğe bağlı olarak, politikayı yönetim kullanıcı arayüzü proxy düzenleyicisinde farklı bir doğal dil adıyla etiketlemek için <DisplayName> öğesini kullanın.

Yok Gerekli
continueOnError

Bir politika başarısız olduğunda hata döndürülmesi için false olarak ayarlayın. Bu, çoğu politika için beklenen davranıştır.

Bir politika başarısız olduktan sonra bile akış yürütülmesinin devam etmesi için true değerine ayarlayın.

false İsteğe bağlı
enabled

Politikayı uygulamak için true değerine ayarlayın.

Politikayı devre dışı bırakmak için false olarak ayarlayın. Bu politika, bir akışa bağlı kalsa bile uygulanmaz.

true İsteğe bağlı
async

Bu özellik kullanımdan kaldırıldı.

false Kullanımdan kaldırıldı

<DisplayName> öğesi

Politikayı, yönetim kullanıcı arayüzü proxy düzenleyicisinde farklı bir doğal dil adıyla etiketlemek için name özelliğine ek olarak kullanın.

<DisplayName>Policy Display Name</DisplayName>
Varsayılan

Yok

Bu öğeyi çıkarırsanız politikanın name özelliğinin değeri kullanılır.

Varlık İsteğe bağlı
Tür Dize

<EntityIdentifier> öğesi

Alınacak varlığı (EntityType'ta belirtilen türdeki) belirtir.

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

Varsayılan

Yok

Bulunma

Gerekli

Tür

Dize

Özellikler

Özellik Açıklama Varsayılan Varlık Tür
referans

Tanımlayıcının kaynağını sağlayan değişken (ör. request.queryparam.apikey).

Yok Zorunlu. Dize
tür ref özelliğindeki değişken tarafından doldurulan tür (ör. consumerkey). Değerler listesi için Varlık türleri ve tanımlayıcılar konusuna bakın. Zorunlu. Dize

Örnek

<?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> öğesi

Veri deposundan alınacak varlığın türünü belirtir.

<EntityType  value="entity_type"/>

Varsayılan

Yok

Bulunma

Gerekli

Tür

Dize

Belirli bir türden istediğiniz varlığı belirtmek için EntityIdentifier öğesi kullanın. Varlık türlerine bir referans için Varlık türleri ve tanımlayıcılar bölümüne bakın.

Özellikler

Özellik Açıklama Varsayılan Varlık Tür
value Desteklenen varlık türlerinden biri. Liste için Varlık türleri ve tanımlayıcılar bölümüne bakın. Yok. Zorunlu. Dize

<İkincilIdentifier> öğesi

EntityIdentifier ile birlikte, belirtilen EntityType öğesinin istenen örneğini tanımlamak için bir değer belirtir.

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

Varsayılan

Yok

Bulunma

İsteğe bağlı

Tür

Dize

Yalnızca bir EntityIdentifier belirtmeniz, tek bir varlık almanızı garanti etmeyecekse SecondaryIdentifier kullanın. Daha fazla bilgi için İkincil tanımlayıcılarla sonuçları daraltma bölümüne bakın.

Birden fazla SecondaryIdentifier öğesinin kullanılması desteklenmez.

Özellikler

Özellik Açıklama Varsayılan Varlık Tür
referans

Tanımlayıcının kaynağını sağlayan değişken (ör. request.queryparam.apikey).

Yok Zorunlu. Dize
tür ref özelliğindeki değişken tarafından doldurulan tür (ör. consumerkey). Değerler listesi için Varlık türleri ve tanımlayıcılar konusuna bakın. Zorunlu. Dize

Örnek

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

Kullanım notları

İkincil tanımlayıcılarla sonuçları daraltma

Bazı varlıklar için tek bir tanımlayıcının belirtilmesi, istediğiniz varlığı elde edecek kadar spesifik olmayabilir. Bu durumlarda, sonuçları daraltmak için ikincil bir tanımlayıcı kullanabilirsiniz.

Büyük olasılıkla geniş kapsamlı ilk politika yapılandırmanız aşağıdaki gibi görünebilir:

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

Bir uygulama birden fazla API ürünüyle ilişkilendirilebildiğinden, yalnızca uygulama kimliğinin kullanılması istediğiniz API ürününü döndürmeyebilir (eşleşen birden fazla üründen yalnızca ilkini alabilirsiniz).

Bunun yerine, daha kesin bir sonuç elde etmek için SecondaryIdentifier kullanabilirsiniz. Örneğin, bir OAuth 2.0 exchange'i sırasında varsayılan olarak doldurulduğundan akışta appname ve developerid değişkenleri olabilir. İstekte bulunan uygulamayla ilgili profil ayrıntılarını almak için bu değişkenlerin değerlerini bir AccessEntity politikasında kullanabilirsiniz.

Daha spesifik politika yapılandırmanız aşağıdaki gibi görünebilir:

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

Desteklenen varlık türleri ve tanımlayıcılar

AccessEntity, aşağıdaki varlık türlerini ve tanımlayıcıları destekler.

EntityType Değeri EntityIdentifier Türleri İkincil Tanımlayıcı Türleri
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

Örnek varlık profili XML'i

XPath ile istediğiniz varlık profili değerini almak için profilin XML yapısı hakkında bilgi edinmeniz gerekir. Yapının bir örneği olarak, istediğiniz varlık için XML almak üzere bir Management API çağrısı kullanın. Ayrıntılar için management API referansına bakın.

Aşağıdaki bölümlerde, çağrıdan alınan örnek XML ile birlikte API çağrılarının kodu bulunmaktadır.

Uygulamalar

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

Ayrıca, Edge Management API referansındaki Uygulamayı, Uygulama Kimliğine Göre Kuruluşa Alma bölümüne de göz atın.

veya:

$ 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

Ayrıca, Edge Management API referansındaki Geliştirici Uygulaması Ayrıntılarını Alma bölümüne de bakın.

Örnek 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>

API ürünü

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

Ayrıca, Edge Management API referansında API Ürünü Alma bölümüne de bakın.

Örnek XPath, weather_free adlı API ürününden ikinci API kaynağını (URI) alır:

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

Örnek profil XML olarak döndürüldü:

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

Şirket

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

Ayrıca, Edge Management API referansındaki Şirket Ayrıntılarını Alma bölümüne de bakın.

Örnek 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>

Şirket geliştirici

$ 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

Örnek profil:

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

Tüketici anahtarı

$ 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

Ayrıca, Edge Management API referansında Geliştirici Uygulaması İçin Temel Ayrıntıları Alma bölümüne de bakın.

Örnek XPath:

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

Örnek 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>

Geliştirici

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

Ayrıca, Edge Management API referansında Geliştirici Alma bölümüne de bakın.

Örnek XPath:

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

Örnek 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>

Akış değişkenleri

AccessEntity politikasında belirtilen varlık profili alındığında, XML biçimli profil nesnesi, mesaj içeriğine değişken olarak eklenir. Diğer tüm değişkenler gibi değişken adına referans vererek erişilebilir. AccessEntity politikasının kullanıcı tarafından sağlanan adı, değişken adının değişken öneki olarak ayarlanır.

Örneğin, GetDeveloper adlı bir AccessEntity politikası yürütülürse XML biçimli profil AccessEntity.GetDeveloper adlı değişkende depolanır. XML biçimli profil daha sonra kaynağı olarak AccessEntity.GetDeveloper belirten bir ExtractVariables politikasında tanımlanan XPath kullanılarak ayrıştırılabilir.

Hata referansı

İlgili bilgiler için Politika hataları hakkında bilmeniz gerekenler ve Hataları işleme bölümlerine bakın.

Çalışma zamanı hataları

Yok.

Dağıtım hataları

Hata adı Hata dizesi HTTP durumu Gerçekleşme zamanı:
InvalidEntityType Invalid type [entity_type] in ACCESSENTITYStepDefinition [policy_name] Yok Kullanılan varlık türü, desteklenen türlerden biri olmalıdır.

İlgili konular