Вы просматриваете документацию Apigee Edge .
 Перейдите к документации Apigee X. информация
Версия 1.4.2
Выполняйте операции вставки, запроса и обновления в базе данных Cloud Spanner.
Этот контент содержит информацию по настройке и использованию этого расширения. Прежде чем использовать расширение из API-прокси с помощью политики ExtensionCallout , необходимо:
- Создайте экземпляр Cloud Spanner, как описано в разделе «Создание экземпляров и управление ими» , и создайте базу данных. 
- Получив экземпляр и базу данных, предоставьте разрешение на доступ к вашей базе данных учетной записи службы GCP, которая представляет ваше расширение. Дополнительные сведения об использовании роли см. в разделе Роли Cloud Spanner . Дополнительные сведения об управлении доступом Cloud Spanner см. в разделе Применение ролей IAM и контроля доступа для Cloud Spanner . 
- Если у вас есть учетная запись службы, имеющая разрешение на нужный вам уровень доступа к вашей базе данных, используйте консоль GCP, чтобы сгенерировать ключ для учетной записи службы . Используйте содержимое полученного ключевого файла JSON при настройке этого расширения. 
- Используйте содержимое полученного ключевого файла 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, созданное из файла ключей сервисного аккаунта. | Никто. | Да. |