המדיניות של AccessEntity

כרגע מוצג התיעוד של Apigee Edge.
כניסה למסמכי התיעוד של Apigee X.
מידע

מה

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

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

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

צריך להשתמש במדיניות AccessEntity כדי לקבל נתונים של פרופיל ישות כ-XML, ולהוסיף אותם למשתנה. כדי לזהות את הישות שברצונך לקבל, צריך לציין סוג ישות ומזהה אחד או יותר שמציינים איזו ישות מהסוג הזה ברצונך לקבל. לאחר מכן, במדיניות אחרת אפשר לאחזר את נתוני פרופיל הישות באמצעות מדיניות אחרת, כמו extractsVariables או 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 מאחזרת את כתובת האימייל למפתחים שהוגדרה במדיניות extracts.

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

מאפייני <AccessEntity>

<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 הוצא משימוש

רכיב <DisplayName>

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

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

לא רלוונטי

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

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

הרכיב <EntityIdentifier>

מציין את הישות המסוימת שרוצים לקבל – מהסוג שצוין ב-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>

האלמנט <EntityType>

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

<EntityType  value="entity_type"/>

ברירת מחדל

לא רלוונטי

נוכחות

נדרש

סוג

מחרוזת

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

מאפיינים

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

רכיב <secondaryIdentifier>

יחד עם 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

למידע נוסף, ראו קבלת פרטי אפליקציה למפתחים במאמר בנושא 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

למידע נוסף, ראו Get Developer במאמר בנושא 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 שמוגדר במדיניות exPaths שבה מציינים את AccessEntity.GetDeveloper כמקור.

הפניה לשגיאות

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

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

ללא.

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

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

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