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

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

Версия 2.0.2

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

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

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

  2. После создания экземпляра и базы данных предоставьте учетной записи службы Google Cloud, представляющей ваше расширение, разрешение на доступ к базе данных. Дополнительную информацию об используемых ролях см. в разделе «Роли Cloud Spanner» . Дополнительную информацию о контроле доступа 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>

Получить данные

В этом примере запрос извлекает значения имени пользователя и адреса электронной почты из таблицы 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>

Действия

вставлять

Вставляет указанные строки в базу данных.

Синтаксис

<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 . Множество Никто. Да.

Ответ

Никто.

запросSQL

Выполняет запрос к базе данных с использованием 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 данного действия. Нить Никто. Да.
параметры Объект, ключами и значениями которого являются имена и значения параметров, используемых в 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>

Параметры запроса

Параметр Описание Тип По умолчанию Необходимый
название таблицы Таблица в базе данных, в которой необходимо обновить строки. Нить Никто. Да.
ряды Массив данных строк для обновления. Каждая сущность в массиве должна содержать уникальный идентификатор (например, первичный ключ) строки, которую необходимо обновить. Множество Никто. Да.

Ответ

Никто.

Справочник по конфигурации

При настройке и развертывании этого расширения для использования в API-прокси используйте следующие параметры. Инструкции по настройке расширения с помощью консоли Apigee см. в разделе «Добавление и настройка расширения» .

Общие свойства расширения

Следующие свойства присутствуют для каждого расширения.

Свойство Описание По умолчанию Необходимый
name Имя, которое вы даете этой конфигурации расширения. Никто Да
packageName Имя пакета расширения, предоставленное Apigee Edge. Никто Да
version Номер версии пакета расширения, из которого вы настраиваете расширение. Никто Да
configuration Значение конфигурации, относящееся к добавляемому расширению. См. Свойства этого пакета расширения. Никто Да

Свойства для этого пакета расширений

Укажите значения для следующих параметров конфигурации, специфичных для данного расширения.

Свойство Описание По умолчанию Необходимый
projectId Идентификатор проекта Google Cloud, содержащего базу данных. Никто. Да.
instanceId Идентификатор экземпляра Cloud Spanner в вашем проекте Google Cloud. Никто. Да.
databaseId Идентификатор базы данных Cloud Spanner. Никто. Да.
реквизиты для входа При вводе в консоль Apigee Edge это содержимое файла ключа вашей учетной записи службы . При отправке через API управления это значение в кодировке base64, сгенерированное из файла ключа учетной записи службы. Никто. Да.