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

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

Версия 1.2.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 с помощью политики 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 Значение конфигурации, относящееся к добавляемому расширению. См. Свойства этого пакета расширения. Никто Да

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

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

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