אתם צופים במסמכי התיעוד של Apigee Edge.
כדאי לעיין במסמכי התיעוד של Apigee X. מידע
גרסה 1.4.1
ביצוע פעולות של הוספה, שאילתה ועדכון במסד נתונים של Cloud Spanner.
התוכן הזה מספק הפניה להגדרת התוסף הזה ולשימוש בו. לפני שמשתמשים בתוסף משרת proxy ל-API באמצעות מדיניות ExtensionCallout, צריך:
יוצרים מכונת Cloud Spanner, כמו שמתואר במאמר יצירה וניהול של מכונות, ויוצרים מסד נתונים.
אחרי שיש לכם את המופע ואת מסד הנתונים, צריך להעניק הרשאה לגישה למסד הנתונים לחשבון השירות ב-GCP שמייצג את התוסף. מידע נוסף על התפקיד שבו צריך להשתמש זמין במאמר תפקידים ב-Cloud Spanner. מידע נוסף על בקרת גישה ב-Cloud Spanner זמין במאמרים הקצאת תפקידי IAM ובקרת גישה ב-Cloud Spanner.
אם יש לכם חשבון שירות עם הרשאה לרמת הגישה שאתם רוצים לבסיס הנתונים, אתם יכולים להשתמש במסוף GCP כדי ליצור מפתח לחשבון השירות. משתמשים בתוכן של קובץ ה-JSON של המפתח שנוצר כשמגדירים את התוסף הזה.
משתמשים בתוכן של קובץ ה-JSON של המפתח שנוצר כשמוסיפים ומגדירים את התוסף באמצעות הפניה להגדרות.
מידע על Cloud Spanner
Cloud Spanner הוא שירות של מסד נתונים רלציוני שמתאים לנתונים רלציוניים, מובְנים וחצי-מובְנים שנדרשת לגביהם זמינות גבוהה, מודל עקביות חזק וקריאות וכתיבות טרנזקציוניות.
אם אתם רק מתחילים להשתמש ב-Cloud Spanner, כדאי להתחיל עם המדריך למתחילים במסמכי Cloud Spanner.
דוגמאות
בדוגמאות הבאות אפשר לראות איך מגדירים תמיכה בפעולות של תוסף Cloud Spanner באמצעות מדיניות ExtensionCallout.
הוספת נתונים
בדוגמה הבאה, הפעולה insert של התוסף מוסיפה משתמש חדש לטבלת המשתמשים.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="true" enabled="true" name="Insert-New-User">
<DisplayName>Insert New User</DisplayName>
<Connector>spanner-users-products</Connector>
<Action>insert</Action>
<Input><![CDATA[{
"tableName" : "user",
"rows" : [{
"username": "jonesy42",
"firstName": "Floyd",
"lastName": "Jones",
"address": "3695 Auctor Street",
"city": "Gresham",
"region": "OR",
"postalCode": "12693",
"email": "floydster@example.com"
}]
}]]></Input>
</ConnectorCallout>
לפרטים
בדוגמה הזו, שאילתה מאחזרת ערכים של שם משתמש ואימייל מהטבלה user.
קודם כול, מדיניות AssignMessage מקצה משתנה postal.code.value לשימוש במשפט WHERE של שאילתה. זו דוגמה. במדיניות שלכם, הערך כנראה יוגדר על סמך פרמטרים של בקשת לקוח.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Postal-Code">
<AssignTo createNew="true" transport="http" type="request"/>
<AssignVariable>
<Name>postal.code</Name>
<Value>86519</Value>
</AssignVariable>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>
המדיניות ExtensionCallout הבאה מריצה שאילתה במסד הנתונים באמצעות התוכן של המשתנה postal.code.value בסעיף WHERE.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="true" enabled="true" name="Get-User-Data">
<DisplayName>Get User Data</DisplayName>
<Connector>spanner-users-products</Connector>
<Action>querySQL</Action>
<Input><![CDATA[{
"sql" : "SELECT username, email FROM user WHERE postalCode = @postalCode",
"params" : {
"postalCode" : "{postal.code.value}"
}
}]]></Input>
<Output>spanner.userdata.retrieved</Output>
</ConnectorCallout>
אחר כך, מדיניות AssignMessage הבאה משתמשת בתגובה של התוסף, שמאוחסנת במשתנה spanner.userdata.retrieved, כתגובה שמוחזרת ללקוח.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Get-Query-Response-Data">
<DisplayName>Get Query Response Data</DisplayName>
<AssignTo type="response" createNew="false"/>
<Set>
<Payload contentType="application/json">{spanner.userdata.retrieved}</Payload>
</Set>
</AssignMessage>
בדוגמה הזו, נתוני התגובה מוחזרים כ-JSON, כמו בדוגמה הבאה.
{
"rows": [
{
"username": "freewill444",
"email": "freewill@example.com"
}
]
}
עדכון נתונים
בדוגמה הזו, הרכיב <Input> מכיל את username – המפתח הראשי של הטבלה – וערך חדש לעמודה email.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="true" enabled="true" name="Update-User-Data">
<DisplayName>Update User Data</DisplayName>
<Connector>spanner-users-products</Connector>
<Action>update</Action>
<Input><![CDATA[{
"tableName" : "user",
"rows": [{
"username":"Liz456",
"email":"lizzard@example.com"
}]
}]]></Input>
</ConnectorCallout>
פעולות
insert
הפונקציה מוסיפה את השורות שצוינו למסד הנתונים.
תחביר
<Action>insert</Action>
<Input><![CDATA[{
"tableName" : "table-to-insert-into",
"rows" : "rows-to-insert"
}]]></Input>
דוגמה
בדוגמה הבאה, הפעולה insert של התוסף מוסיפה משתמש חדש לטבלת המשתמשים. נוספת שורה אחת.
<Action>insert</Action>
<Input><![CDATA[{
"tableName" : "user",
"rows" : [{
"username": "jonesy42",
"firstName": "Floyd",
"lastName": "Jones",
"address": "3695 Auctor Street",
"city": "Gresham",
"region": "OR",
"postalCode": "12693",
"email": "floydster@example.com"
}]
}]]></Input>
פרמטרים של בקשה
| פרמטר | תיאור | סוג | ברירת מחדל | חובה |
|---|---|---|---|---|
| tableName | הטבלה במסד הנתונים שאליה צריך להוסיף את השורות. | מחרוזת | ללא. | כן. |
| שורות | השורות להוספה, שמוצגות כמערך באובייקט JSON rows. |
מערך | ללא. | כן. |
תשובה
ללא.
querySQL
מריץ שאילתה במסד הנתונים באמצעות הצהרת ה-SQL עם הפרמטרים שצוינו. הפרמטרים מופיעים בהצהרת ה-SQL עם שמות שמתחילים ב-@. ערכי הפרמטרים מצוינים בפרמטר params של הפעולה הזו.
לפרטים על תחביר השאילתות ב-Cloud Spanner, אפשר לעיין במאמר תחביר השאילתות.
תחביר
<Action>querySQL</Action>
<Input><![CDATA[{
"sql" : "sql-query-statement",
"params" : {
"param1" : "columnValue"
}
}]]></Input>
דוגמה
בדוגמה הזו, שאילתה מאחזרת את ערכי העמודות username ו-email מהטבלה user. הצהרת SQL מציינת פרמטר postalCode שמוגדר ממשתנה הזרימה postal.code.value.
<Action>querySQL</Action>
<Input><![CDATA[{
"sql" : "SELECT username, email FROM user WHERE postalCode = @postalCode",
"params" : {
"postalCode" : "{postal.code.value}"
}
}]]></Input>
פרמטרים של בקשה
| פרמטר | תיאור | סוג | ברירת מחדל | חובה |
|---|---|---|---|---|
| sql | שאילתת ה-SQL להרצה. אפשר לציין פרמטרים עם שמות פרמטרים שמתחילים ב-@. שמות הפרמטרים האלה צריכים להתאים למפתחות בפרמטר params של הפעולה הזו. |
מחרוזת | ללא. | כן. |
| params | אובייקט שהמפתחות והערכים שלו הם שמות הפרמטרים והערכים שמשמשים בשאילתת ה-SQL. אפשר לציין כאן כמה פרמטרים. | אובייקט | ללא. | לא. |
תשובה
אובייקט rows שמכיל מערך של צמדי שם-ערך של עמודות שמוחזרים על ידי השאילתה. לדוגמה:
{
"rows": [
{
"username": "freewill444",
"email": "freewill@example.com"
}
]
}
עדכון
מעדכנת שורות במסד הנתונים עם הנתונים שצוינו.
תחביר
<Input><![CDATA[{
"tableName" : "table-with-rows-to-update",
"rows" : "rows-to-update"
}]]></Input>
דוגמה
בדוגמה הזו, כתובת האימייל של המשתמש שערך username שלו הוא Liz456 מתעדכנת בערך חדש. שורה אחת עודכנה.
<Action>update</Action>
<Input><![CDATA[{
"tableName" : "user",
"rows": [{
"username":"Liz456",
"email":"lizzard@example.com"
}]
}]]></Input>
פרמטרים של בקשה
| פרמטר | תיאור | סוג | ברירת מחדל | חובה |
|---|---|---|---|---|
| tableName | הטבלה במסד הנתונים שבה צריך לעדכן את השורות. | מחרוזת | ללא. | כן. |
| שורות | מערך של נתוני שורות לעדכון. כל ישות במערך צריכה להכיל את הערך של המזהה הייחודי (כמו מפתח ראשי) של השורה שרוצים לעדכן. | מערך | ללא. | כן. |
תשובה
ללא.
הסבר על ההגדרות
כשמגדירים ופורסים את התוסף הזה לשימוש בשרתי proxy ל-API, צריך להשתמש בהגדרות הבאות. במאמר הוספה והגדרה של תוסף מוסבר איך להגדיר תוסף באמצעות מסוף Apigee.
מאפיינים נפוצים של תוספים
המאפיינים הבאים קיימים בכל תוסף.
| נכס | תיאור | ברירת המחדל | נדרש |
|---|---|---|---|
name |
השם שבחרת לתצורה הזו של התוסף. | ללא | כן |
packageName |
השם של חבילת התוסף כפי שהוא סופק על ידי Apigee Edge. | ללא | כן |
version |
מספר הגרסה של חבילת התוסף שממנה מגדירים את התוסף. | ללא | כן |
configuration |
ערך הגדרה ספציפי לתוסף שרוצים להוסיף. מאפיינים לחבילת תוספים זו | ללא | כן |
מאפיינים של חבילת התוסף הזו
מציינים ערכים למאפייני ההגדרה הבאים שספציפיים לתוסף הזה.
| נכס | תיאור | ברירת מחדל | חובה |
|---|---|---|---|
| projectId | מזהה הפרויקט ב-GCP שמכיל את מסד הנתונים. | ללא. | כן. |
| instanceId | המזהה של מופע Cloud Spanner בפרויקט GCP. | ללא. | כן. |
| databaseId | מזהה מסד הנתונים ב-Cloud Spanner. | ללא. | כן. |
| פרטי כניסה | כשמזינים את התוכן הזה במסוף Apigee Edge, זהו התוכן של קובץ המפתח של חשבון השירות. כששולחים את הערך הזה דרך Management API, הוא מקודד ב-Base64 ונוצר מקובץ המפתח של חשבון השירות. | ללא. | כן. |