查看 Apigee Edge 說明文件。
前往
Apigee X說明文件。 資訊
1.4.2 版
對 Cloud Spanner 資料庫執行插入、查詢和更新作業。
這項內容提供設定與使用這項擴充功能的參考資源。 在使用 額外資訊摘要政策,您必須:
按照建立及管理執行個體的說明,建立 Cloud Spanner 執行個體,並建立資料庫。
擁有執行個體和資料庫後,請授予權限,讓代表擴充功能的 GCP 服務帳戶存取您的資料庫。如要進一步瞭解要使用的角色,請參閱 Cloud Spanner 角色。如要進一步瞭解 Cloud Spanner 存取權控管,請參閱套用 IAM 角色和 Cloud Spanner 的存取權控管。
如果您擁有具備所需資料庫存取層級的權限,請使用 GCP 控制台為服務帳戶產生金鑰。設定這個副檔名時,請使用產生的金鑰 JSON 檔案內容。
關於 Cloud Spanner
Cloud Spanner 是關聯資料庫服務,適合需要高可用性、同步一致性,以及交易讀取和寫入作業的關聯式、結構化和半結構化資料。
如果您剛開始使用 Cloud Spanner,可以先參考 Cloud Spanner 說明文件中的快速入門導覽課程。
範例
以下範例說明如何透過 Extension callout 政策,為 Cloud Spanner 擴充功能動作設定支援。
新增資料
在以下範例中,擴充功能的 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>
以下 Extension callout 政策會使用 WHERE 子句中的 postal.code.value
變數內容,對資料庫執行查詢。
<?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 | 資料庫中應插入資料列的資料表。 | 字串 | 無。 | 是。 |
資料列 | 要插入的資料列,在 rows JSON 物件中以陣列表示。 |
陣列 | 無。 | 是。 |
回應
無。
querySQL
使用具有指定參數的 SQL 陳述式查詢資料庫。參數在 SQL 陳述式中具有 @ 前置名稱;參數值是在這項動作的 params
參數中指定。
如要進一步瞭解 Cloud Spanner 查詢語法,請參閱查詢語法。
語法
<Action>querySQL</Action>
<Input><![CDATA[{
"sql" : "sql-query-statement",
"params" : {
"param1" : "columnValue"
}
}]]></Input>
範例
在本範例中,查詢會從 user
資料表擷取 username
和 email
資料欄值。SQL 陳述式會指定從資料流變數 postal.code.value
設定的 postalCode
參數。
<Action>querySQL</Action>
<Input><![CDATA[{
"sql" : "SELECT username, email FROM user WHERE postalCode = @postalCode",
"params" : {
"postalCode" : "{postal.code.value}"
}
}]]></Input>
要求參數
參數 | 說明 | 類型 | 預設 | 必填 |
---|---|---|---|---|
sql | 要執行的 SQL 查詢。您可以使用 @-prepended 參數名稱指定參數。這些參數名稱必須與這項操作中 params 參數的鍵相對應。 |
字串 | 無。 | 是。 |
參數 | 此物件的鍵和值是 SQL 查詢中使用的參數名稱和值。您可以在此列出多個參數。 | 物件 | 無。 | 編號 |
回應
rows
物件,包含查詢傳回的資料欄名稱/值組合陣列。例如:
{
"rows": [
{
"username": "freewill444",
"email": "freewill@example.com"
}
]
}
update
以指定資料更新資料庫中的資料列。
語法
<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 | 資料庫中應更新資料列的資料表。 | 字串 | 無。 | 是。 |
資料列 | 要更新的資料列資料陣列。陣列中的每個實體都應包含資料列要更新的專屬 ID (例如主鍵) 值。 | 陣列 | 無。 | 是。 |
回應
無。
設定參考資料
設定及部署這項擴充功能以用於 API Proxy 時,請使用下列指令。如需使用 Apigee 控制台設定擴充功能的步驟,請參閱新增及設定擴充功能。
常見擴充功能屬性
每個擴充功能都有下列屬性。
屬性 | 說明 | 預設 | 必要 |
---|---|---|---|
name |
您要為這項擴充功能設定的名稱。 | 無 | 相容 |
packageName |
Apigee Edge 指定的擴充功能套件名稱。 | 無 | 相容 |
version |
擴充功能的擴充功能套件版本號碼。 | 無 | 相容 |
configuration |
您要新增的擴充功能專屬的設定值。請參閱「這個擴充功能套件的屬性」一文 | 無 | 相容 |
這個擴充功能套件的屬性
指定這個擴充功能專用的下列設定屬性值。
屬性 | 說明 | 預設 | 必填 |
---|---|---|---|
專案 ID | 資料庫所屬 GCP 專案的 ID。 | 無。 | 是。 |
instanceId | GCP 專案中 Cloud Spanner 執行個體的 ID。 | 無。 | 是。 |
資料庫 ID | Cloud Spanner 資料庫的 ID。 | 無。 | 是。 |
憑證 | 您在 Apigee Edge 控制台中輸入的內容,是指您的服務帳戶金鑰檔案的內容。透過 Management API 傳送時,這是從服務帳戶金鑰檔案產生的 Base64 編碼值。 | 無。 | 是。 |