המדיניות של AccessEntity

מוצג המסמך של Apigee Edge.
עוברים אל מסמכי תיעוד של Apigee X.
מידע

מה

אחזור פרופילים של ישויות שצוינו ממאגר הנתונים של Apigee Edge. המדיניות מציבה פרופיל במשתנה ששמו נקבע בפורמט AccessEntity.{policy_name}. שלך יכול להשתמש ב-AccessEntity כדי לגשת לפרופילים של הישויות הבאות:

  • אפליקציה
  • מוצר API
  • חברה
  • מפתח של החברה
  • מפתח יצרן
  • מפתח

המדיניות AccessEntity פועלת כחיפוש של מסד נתונים בסביבת זמן ריצה שמבוססת על מדיניות. שלך יכול להשתמש בפרטי הפרופיל המוחזרים על ידי המדיניות הזו כדי לאפשר התנהגות דינמית, כמו ניתוב מותנה של נקודות קצה, הפעלת זרימה, אכיפת מדיניות.

אתה משתמש במדיניות AccessEntity כדי לקבל נתוני פרופיל ישות בתור XML ולהזין אותו במשתנה. אתה מזהה את היישות שיש לקבל על ידי ציון ישות ומזהה אחד או יותר המציינים את סוג הישות הרצויה. מאוחר יותר, בעוד מדיניות אחרת, ניתן לאחזר את נתוני פרופיל הישות באמצעות מדיניות אחרת, כמו מדיניות exportVariables או AssignMessage

דוגמאות

הדוגמאות הבאות מראות את השימוש ב-AccessEntity בשילוב עם כללי המדיניות ExtractVariables ו-AssignMessage לחילוץ כללי המדיניות של המפתח ולהוסיף אותו לכותרת ה-HTTP.

קבלת כתובת אימייל של מפתח לשימוש במדיניות אחרת

מגדירים את המדיניות AccessEntity כדי לציין מאיזה פרופיל ישות לקבל Edge, וגם איפה למקם את נתוני הפרופיל.

בדוגמה הבאה, המדיניות מקבלת פרופיל ישות developer באמצעות מפתח ה-API מועבר כפרמטר של שאילתה כדי לזהות את המפתח. הפרופיל נמצא ב משתנה ששמו נראה כך: AccessEntity.{policy_name}. עכשיו המשתנה שהוגדרה במדיניות הזו היא 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>

שימוש במדיניות אחרת כדי לאחזר את הערך של פרופיל הישות מהמשתנה שהוגדר על ידי AccessEntity.

בדוגמה הבאה, מדיניות ExtractVariables מאחזרת ערך מ- את המשתנה AccessEntity.GetDeveloperProfile שהוגדר קודם לכן על ידי AccessEntity.

חשוב לשים לב שהערך שמאוחזר מצוין כביטוי XPath רכיב XMLPayload. הערך שחולץ ממוקם בתוך משתנה 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>

במדיניות assignMessage הבאה, מאחזרת את כתובת האימייל למפתחים שהוגדרה על ידי המדיניות של exportVariables

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

הפניה לרכיב

המבנה הבסיסי של מדיניות AccessEntity הוא:

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

אפשר לגשת לכמה ישויות מאותו סוג על ידי קיבוץ רכיב 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; מאפיינים

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

בטבלה הבאה מתוארים מאפיינים שמשותפים לכל רכיבי ההורה של המדיניות:

מאפיין תיאור ברירת מחדל נוכחות
name

השם הפנימי של המדיניות. הערך של המאפיין name יכול לכלול אותיות, מספרים, רווחים, מקפים, קווים תחתונים ונקודות. הערך הזה לא יכול ארוך מ-255 תווים.

אפשר להשתמש ברכיב <DisplayName> כדי להוסיף תווית למדיניות עורך ה-Proxy של ממשק המשתמש לניהול בעל שם אחר בשפה טבעית.

לא רלוונטי חובה
continueOnError

צריך להגדיר את הערך false כדי להחזיר שגיאה כשמדיניות נכשלת. המצב הזה צפוי של רוב כללי המדיניות.

יש להגדיר ל-true כדי שביצוע התהליך יימשך גם לאחר המדיניות נכשל.

false אופציונלי
enabled

צריך להגדיר את הערך true כדי לאכוף את המדיניות.

צריך להגדיר את הערך false כדי להשבית את המדיניות. המדיניות לא תהיה אכיפה גם אם היא ממשיכה להיות מחוברת לזרימה.

true אופציונלי
async

המאפיין הזה הוצא משימוש.

false הוצא משימוש

&lt;DisplayName&gt; רכיב

צריך להשתמש בנוסף למאפיין name כדי להוסיף תווית למדיניות עורך proxy של ממשק משתמש לניהול עם שם אחר בשפה טבעית.

<DisplayName>Policy Display Name</DisplayName>
ברירת מחדל

לא רלוונטי

אם משמיטים את הרכיב הזה, הערך של המאפיין name של המדיניות הוא בשימוש.

נוכחות אופציונלי
סוג מחרוזת

&lt;EntityIdentifier&gt; רכיב

מציין את הישות המסוימת – מהסוג שניתן ב-EntityType – לקבל.

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

ברירת מחדל

לא רלוונטי

נוכחות

חובה

סוג

מחרוזת

מאפיינים

מאפיין תיאור ברירת מחדל נוכחות סוג
אזכור

המשתנה שמספק את המקור של המזהה, למשל request.queryparam.apikey

לא רלוונטי חובה. מחרוזת
סוג הסוג שמאוכלס על ידי המשתנה במאפיין ref. כמו consumerkey מידע נוסף זמין בקטע סוגים ומזהים של ישויות רשימה של ערכים. חובה. מחרוזת

דוגמה

<?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; רכיב

מציין את סוג הישות שיש לאחזר ממאגר הנתונים.

<EntityType  value="entity_type"/>

ברירת מחדל

לא רלוונטי

נוכחות

חובה

סוג

מחרוזת

צריך להשתמש ברכיב EntityIdentifier כדי לציין כל ישות מהסוג הנתון שרוצים. למידע נוסף על סוגי ישויות, ראו סוגים ומזהים של ישויות.

מאפיינים

מאפיין תיאור ברירת מחדל נוכחות סוג
ערך אחד מסוגי הישויות הנתמכים. מידע נוסף זמין בקטע סוגי ישויות המזהים של רשימה. ללא. חובה. מחרוזת

&lt;SecondaryIdentifier&gt; רכיב

בשילוב עם EntityIdentifier, מציין ערך כדי לזהות את הערך הרצוי במופע של EntityType הנתון.

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

ברירת מחדל

לא רלוונטי

נוכחות

אופציונלי

סוג

מחרוזת

צריך להשתמש ב-SecondaryIdentifier כשמציינים רק EntityIdentifier לא מבטיחה שתקבלו ישות אחת. לעיון בקטע צמצום תוצאות עם מזהים משניים.

אין תמיכה בשימוש במספר רכיבי SecondaryIdentifier.

מאפיינים

מאפיין תיאור ברירת מחדל נוכחות סוג
אזכור

המשתנה שמספק את המקור של המזהה, למשל request.queryparam.apikey

לא רלוונטי חובה. מחרוזת
סוג הסוג שמאוכלס על ידי המשתנה במאפיין ref. כמו consumerkey מידע נוסף זמין בקטע סוגים ומזהים של ישויות רשימה של ערכים. חובה. מחרוזת

דוגמה

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

הערות שימוש

צמצום התוצאות באמצעות מזהים משניים

עבור ישויות מסוימות, ייתכן שציון מזהה אחד לא יהיה ספציפי מספיק כדי לקבל את הישות רוצה. במקרים כאלה, תוכלו להשתמש במזהה משני כדי לצמצם את התוצאות.

הגדרת המדיניות הראשונה, שעשויה להיות רחבה, עשויה להיראות כך:

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

מאחר שניתן לשייך אפליקציה לכמה מוצרי API, לא בטוח שניתן להשתמש במזהה האפליקציה בלבד להחזיר את מוצר ה-API הרצוי (תוכלו לקבל רק את המוצר הראשון מתוך מספר מוצרים תואמים).

במקום זאת, כדי לקבל תוצאה מדויקת יותר, אפשר להשתמש בפונקציה SecondaryIdentifier. עבור לדוגמה, ייתכן שיש בזרימה משתנים מסוג appname ו-developerid כי הם מאוכלסים כברירת מחדל במהלך חילופי OAuth 2.0. אפשר להשתמש בערכים של המשתנים האלה במדיניות AccessEntity כדי לקבל פרטי פרופיל לגבי הבקשה אפליקציה.

הגדרת המדיניות הספציפית יותר עשויה להיראות כך:

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

המזהים והסוגים הנתמכים של ישויות

ב-AccessEntity יש תמיכה במזהים ובסוגים הבאים של ישויות.

ערך EntityType סוגי EntityIdentifier סוגי מזהים משניים
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 של פרופיל ישות

כדי לאחזר את ערך פרופיל הישות הרצוי עם XPath, צריך לדעת משהו על במבנה ה-XML של הפרופיל. לדוגמה של המבנה, אפשר להשתמש בקריאה ל-API לניהול כדי לקבל XML של הישות הרצויה. לפרטים, אפשר לעיין ב-Management API .

בקטעים הבאים מופיעים קוד לקריאות ל-API, וכן XML לדוגמה מהקריאה.

אפליקציות

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

כדאי לעיין גם במאמר הורדת האפליקציה ארגון לפי מזהה אפליקציה במאמרי העזרה של Edge management API.

או:

$ 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

ראו גם קבלו Developer App Details בחומר העזר בנושא Edge management API.

פרופיל לדוגמה:

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

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

מידע נוסף זמין במאמר קבלת API מוצר בחומר העזר של Edge management API.

XPath לדוגמה, מאחזר את משאב ה-API השני (URI) ממוצר ה-API שנקרא weather_free:

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

פרופיל לדוגמה המוחזר כ-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>

חברה

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

ראו גם קבלו פרטי החברה בחומר העזר של Edge management API.

פרופיל לדוגמה:

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

מפתח של החברה

$ 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

פרופיל לדוגמה:

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

מפתח יצרן

$ 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

ראו גם אפשר לקבל פרטים חשובים על אפליקציה למפתחים במאמרי העזרה של Edge management API.

XPath לדוגמה:

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

פרופיל לדוגמה:

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

מפתח

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

ראו גם קבלת מפתח ב חומרי העזר של Edge management API.

XPath לדוגמה:

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

פרופיל לדוגמה:

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

משתני זרימה

כשמאחזרים את פרופיל הישות שצוין במדיניות AccessEntity, הפורמט הוא XML אובייקט הפרופיל מתווסף להקשר של ההודעה כמשתנה. אפשר לגשת אליו כמו לכל מכשיר אחר תוך התייחסות לשם המשתנה. השם שסיפק המשתמש במדיניות AccessEntity מוגדרת כקידומת המשתנה של שם המשתנה.

לדוגמה, אם מבוצעת מדיניות AccessEntity בשם GetDeveloper, הפרופיל בפורמט XML מאוחסן במשתנה שנקרא AccessEntity.GetDeveloper. לאחר מכן ניתן לנתח את הפרופיל בפורמט XML באמצעות XPath המוגדר במדיניות exPathVariables שמציינת AccessEntity.GetDeveloper כמקור.

התייחסות לשגיאות

במאמר מה צריך לדעת על שגיאות מדיניות ועל טיפול בתקלות תוכלו לקרוא מידע נוסף בנושא.

שגיאות בזמן ריצה

ללא.

שגיאות בפריסה

שם השגיאה מחרוזת תקלה סטטוס HTTP מופיע כאשר
InvalidEntityType Invalid type [entity_type] in ACCESSENTITYStepDefinition [policy_name] לא רלוונטי סוג הישות שנעשה בו שימוש חייב להיות אחד מהסוגים הנתמכים.

נושאים קשורים