Extensão de banco de dados do Google Cloud Spanner

Esta é a documentação do Apigee Edge.
Acesse Documentação da Apigee X.
informações

Versão 1.4.2

Executar operações de inserção, consulta e atualização em um banco de dados do Cloud Spanner.

Este conteúdo fornece referência para configurar e usar essa extensão. Antes de usar a extensão de um proxy de API com o política deExtensionExtension, é necessário:

  1. Crie uma instância do Cloud Spanner, conforme descrito em Como criar e gerenciar instâncias, e crie um banco de dados.

  2. Quando você tiver a instância e um banco de dados, conceda permissão para acessar o banco de dados à conta de serviço do GCP que representa sua extensão. Para mais informações sobre o papel a ser usado, consulte Papéis do Cloud Spanner. Para mais informações sobre o controle de acesso do Cloud Spanner, consulte Como aplicar papéis do IAM e Controle de acesso para o Cloud Spanner.

  3. Quando você tiver uma conta de serviço com permissão para o nível de acesso desejado ao banco de dados, use o Console do GCP e gere uma chave para a conta de serviço. Use o conteúdo do arquivo JSON da chave resultante ao configurar essa extensão.

  4. Use o conteúdo do arquivo JSON da chave resultante ao adicionar e configurar a extensão usando a referência de configuração.

Sobre o Cloud Spanner

O Cloud Spanner é um serviço de banco de dados relacional útil para dados relacionais, estruturados e semiestruturados que exigem alta disponibilidade, consistência forte e leituras e gravações transacionais.

Se você está começando a usar o Cloud Spanner, o guia de início rápido na documentação do Cloud Spanner é um bom ponto de partida.

Amostras

Os exemplos a seguir ilustram como configurar o suporte para ações de extensão do Cloud Spanner usando a política Extension callout.

Adicionar dados

No exemplo a seguir, a ação insert da extensão adiciona um novo usuário à tabela de usuários.

<?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>

Extrair dados

Neste exemplo, uma consulta recupera os valores de nome de usuário e e-mail da tabela user.

Primeiro, uma políticaAssignMessage atribui uma variável postal.code.value para uso em uma cláusula WHERE de consulta. Este é um exemplo. Sua política provavelmente definiria o valor com base nos parâmetros de solicitação do cliente.

<?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>

A seguinte política ExtensionAnnotation executa uma consulta no banco de dados usando o conteúdo da variável postal.code.value na cláusula 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>

Em seguida, a políticaAssignMessage a seguir usa a resposta da extensão. armazenada na variável spanner.userdata.retrieved, porque a resposta retornada ao cliente.

<?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>

Neste exemplo, os dados de resposta são retornados no formato JSON, como no exemplo a seguir.

{
  "rows": [
    {
      "username": "freewill444",
      "email": "freewill@example.com"
    }
  ]
}

Atualizar dados

Neste exemplo, o elemento <Input> contém a username, a chave primária da tabela, e um novo valor para a coluna 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>

Ações

insert

Insere as linhas especificadas no banco de dados.

Sintaxe

<Action>insert</Action>
<Input><![CDATA[{
  "tableName" : "table-to-insert-into",
  "rows" : "rows-to-insert"
}]]></Input>

Exemplo

No exemplo a seguir, a ação insert da extensão adiciona um novo usuário à tabela de usuários. Uma linha foi adicionada.

<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>

Parâmetros de solicitação

Parâmetro Descrição Tipo Padrão Obrigatório
tableName A tabela no banco de dados em que as linhas precisam ser inseridas. String Nenhum. Sim.
linhas As linhas a serem inseridas expressas como uma matriz em um objeto JSON rows. Matriz Nenhum. Sim.

Resposta

Nenhum.

querySQL

Consulta o banco de dados usando a instrução SQL com os parâmetros especificados. Os parâmetros são fornecidos na instrução SQL com nomes seguidos por @. são especificados no parâmetro params dessa ação.

Para mais detalhes sobre a sintaxe de consulta do Cloud Spanner, confira Sintaxe de consulta.

Sintaxe

<Action>querySQL</Action>
<Input><![CDATA[{
  "sql" : "sql-query-statement",
  "params" : {
    "param1" : "columnValue"
  }
}]]></Input>

Exemplo

Neste exemplo, uma consulta recupera os valores das colunas username e email da tabela user. A instrução SQL especifica um parâmetro postalCode definido a partir da variável de fluxo postal.code.value.

<Action>querySQL</Action>
<Input><![CDATA[{
  "sql" : "SELECT username, email FROM user WHERE postalCode = @postalCode",
  "params" : {
    "postalCode" : "{postal.code.value}"
  }
}]]></Input>

Parâmetros de solicitação

Parâmetro Descrição Tipo Padrão Obrigatório
sql A consulta SQL a ser executada. É possível especificar parâmetros com nomes de parâmetros anexados a @. Esses nomes de parâmetro precisam corresponder às chaves no parâmetro params dessa ação. String Nenhum. Sim.
params Um objeto cujas chaves e valores são os nomes e valores de parâmetros usados na consulta SQL. É possível listar vários parâmetros aqui. Objeto Nenhum. Não.

Resposta

Um objeto rows contendo uma matriz de pares de nome-valor de coluna retornados pela consulta. Exemplo:

{
  "rows": [
    {
      "username": "freewill444",
      "email": "freewill@example.com"
    }
  ]
}

update

Atualiza linhas no banco de dados com os dados especificados.

Sintaxe

<Input><![CDATA[{
  "tableName" : "table-with-rows-to-update",
  "rows" : "rows-to-update"
}]]></Input>

Exemplo

Neste exemplo, o endereço de e-mail do usuário com username é Liz456 é atualizado com um novo valor. Uma linha foi atualizada.

<Action>update</Action>
<Input><![CDATA[{
  "tableName" : "user",
  "rows": [{
      "username":"Liz456",
      "email":"lizzard@example.com"
  }]
}]]></Input>

Parâmetros de solicitação

Parâmetro Descrição Tipo Padrão Obrigatório
tableName A tabela no banco de dados em que as linhas precisam ser atualizadas. String Nenhum. Sim.
linhas Uma matriz de dados da linha a ser atualizada. Cada entidade na matriz deve conter o valor de ID exclusivo (como chave primária) para a linha a ser atualizada. Matriz Nenhum. Sim.

Resposta

Nenhum.

Referência de configuração

Use o seguinte ao configurar e implantar esta extensão para uso em proxies de API. Para ver as etapas para configurar uma extensão usando o console da Apigee, consulte Como adicionar e configurar uma extensão.

Propriedades de extensão comuns

As propriedades a seguir estão presentes para cada extensão.

Propriedade Descrição Padrão Obrigatório
name Nome que será dado a esta configuração da extensão. Nenhum Sim
packageName Nome do pacote de extensão fornecido pelo Apigee Edge. Nenhum Sim
version Número da versão do pacote de extensão a partir do qual você está configurando uma extensão. Nenhum Sim
configuration Valor de configuração específico da extensão que você está adicionando. Consulte Propriedades para este pacote de extensão. Nenhum Sim

Propriedades deste pacote de extensões

Especifique valores para as seguintes propriedades de configuração específicas desta extensão.

Propriedade Descrição Padrão Obrigatório
projectId ID do projeto do GCP que contém o banco de dados. Nenhum. Sim.
instanceId ID da instância do Cloud Spanner no seu projeto do GCP. Nenhum. Sim.
IDdobanco de dados ID do banco de dados do Cloud Spanner. Nenhum. Sim.
credenciais Quando inserido no console do Apigee Edge, este é o conteúdo do arquivo de chave da conta de serviço. Quando enviado pela API de gerenciamento, é um valor codificado em base64 gerado a partir do arquivo de chave da conta de serviço. Nenhum. Sim.