Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
Версия 2.0.1
Выполнять операции вставки, запроса и обновления в базе данных Cloud Spanner.
В нем приведена информация о том, как настроить и использовать это расширение. Прежде чем использовать расширение из прокси-сервера API с помощью правила ExtensionCallout, необходимо:
Создайте экземпляр Cloud Spanner, как описано в разделе Создание экземпляров и управление ими, и создайте базу данных.
После того как вы создадите экземпляр и базу данных, предоставьте разрешение на доступ к базе данных сервисному аккаунту Google Cloud, представляющему ваше расширение. Подробнее о ролях Cloud Spanner… Подробнее о применении ролей IAM и контроле доступа для Cloud Spanner…
Когда у вас будет сервисный аккаунт с нужным уровнем доступа к базе данных, сгенерируйте ключ для этого аккаунта в консоли Google Cloud. Используйте содержимое полученного 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>
Получение данных
В этом примере запрос извлекает значения username и email из таблицы 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>
Параметры запроса
| Параметр | Описание | Тип | По умолчанию | Обязательно |
|---|---|---|---|---|
| название таблицы | Таблица в базе данных, в которую нужно вставить строки. | Строка | Нет. | Да. |
| строки | Строки, которые нужно вставить, в виде массива в объекте 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"
}
]
}
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>
Параметры запроса
| Параметр | Описание | Тип | По умолчанию | Обязательно |
|---|---|---|---|---|
| название таблицы | Таблица в базе данных, в которой нужно обновить строки. | Строка | Нет. | Да. |
| строки | Массив данных строк для обновления. Каждый элемент массива должен содержать уникальный идентификатор (например, первичный ключ) строки, которую нужно обновить. | Массив | Нет. | Да. |
Ответ
Нет.
Справочник по конфигурации
При настройке и развертывании этого расширения для использования в прокси API следуйте приведенным ниже инструкциям. Инструкции по настройке расширения с помощью консоли Apigee приведены в разделе Добавление и настройка расширения.
Общие свойства расширений
Следующие свойства присутствуют для каждого расширения.
| Свойство | Описание | По умолчанию | Необходимый |
|---|---|---|---|
name | Имя, которое вы даете этой конфигурации расширения. | Никто | Да |
packageName | Имя пакета расширения, предоставленное Apigee Edge. | Никто | Да |
version | Номер версии пакета расширения, из которого вы настраиваете расширение. | Никто | Да |
configuration | Значение конфигурации, относящееся к добавляемому расширению. См. Свойства этого пакета расширения. | Никто | Да |
Свойства пакета расширения
Укажите значения для следующих свойств конфигурации, относящихся к этому расширению.
| Свойство | Описание | По умолчанию | Обязательно |
|---|---|---|---|
| Идентификатор проекта | Идентификатор проекта Google Cloud, содержащего базу данных. | Нет. | Да. |
| instanceId | Идентификатор экземпляра Cloud Spanner в вашем облачном проекте Google Cloud. | Нет. | Да. |
| databaseId | Идентификатор базы данных Cloud Spanner. | Нет. | Да. |
| учетные данные | При вводе в консоли Apigee Edge это содержимое файла ключа сервисного аккаунта. При отправке с помощью API управления это значение в кодировке base64, сгенерированное из файла ключа сервисного аккаунта. | Нет. | Да. |