Расширение для базы данных Google Cloud Spanner

Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X.
Информация

Версия 2.0.1

Выполнять операции вставки, запроса и обновления в базе данных Cloud Spanner.

В нем приведена информация о том, как настроить и использовать это расширение. Прежде чем использовать расширение из прокси-сервера API с помощью правила ExtensionCallout, необходимо:

  1. Создайте экземпляр Cloud Spanner, как описано в разделе Создание экземпляров и управление ими, и создайте базу данных.

  2. После того как вы создадите экземпляр и базу данных, предоставьте разрешение на доступ к базе данных сервисному аккаунту Google Cloud, представляющему ваше расширение. Подробнее о ролях Cloud Spanner… Подробнее о применении ролей IAM и контроле доступа для Cloud Spanner…

  3. Когда у вас будет сервисный аккаунт с нужным уровнем доступа к базе данных, сгенерируйте ключ для этого аккаунта в консоли Google Cloud. Используйте содержимое полученного JSON-файла ключа при настройке этого расширения.

  4. Используйте содержимое полученного 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, сгенерированное из файла ключа сервисного аккаунта. Нет. Да.