Esta é a documentação do Apigee Edge.
Acesse
Documentação da Apigee X. informações
Versão 1.2.1
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:
Crie uma instância do Cloud Spanner, conforme descrito em Como criar e gerenciar instâncias, e crie um banco de dados.
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.
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.
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. |