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

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

Версия 2.0.1

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

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

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

  2. После того, как у вас есть экземпляр и база данных, предоставьте разрешение на доступ к вашей базе данных учетной записи службы GCP, которая представляет ваше расширение. Для получения дополнительной информации о роли для использования см. Роли Cloud Spanner . Для получения дополнительной информации об управлении доступом Cloud Spanner см. Применение ролей IAM и управление доступом для Cloud Spanner .

  3. Если у вас есть учетная запись службы, которая имеет разрешение на необходимый вам уровень доступа к базе данных, используйте консоль GCP для генерации ключа для учетной записи службы . Используйте содержимое полученного файла 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 Идентификатор проекта GCP, содержащего базу данных. Никто. Да.
экземплярId Идентификатор экземпляра Cloud Spanner в вашем проекте GCP. Никто. Да.
databaseId Идентификатор базы данных Cloud Spanner. Никто. Да.
реквизиты для входа При вводе в консоли Apigee Edge это содержимое файла ключа учетной записи службы . При отправке через API управления это значение в кодировке base64, сгенерированное из файла ключа учетной записи службы. Никто. Да.