Estensione database Google Cloud Spanner

Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione Documentazione di Apigee X.
Informazioni

Versione 1.4.2

Eseguire operazioni di inserimento, query e aggiornamento su un database Cloud Spanner.

Questi contenuti forniscono un riferimento per la configurazione e l'utilizzo di questa estensione. Prima di utilizzare l'estensione da un proxy API utilizzando la proprietà Norme sulle estensioni callout, devi:

  1. Crea un'istanza Cloud Spanner, come descritto in Creazione e gestione delle istanze, e crea un database.

  2. Dopo aver creato l'istanza e il database, concedi l'autorizzazione per accedere al database all'account di servizio Google Cloud che rappresenta la tua estensione. Per saperne di più sul ruolo da utilizzare, consulta Ruoli di Cloud Spanner. Per saperne di più sul controllo dell'accesso a Cloud Spanner, consulta Applicazione di ruoli IAM e Controllo dell'accesso per Cloud Spanner.

  3. Se hai un account di servizio con l'autorizzazione necessaria per il livello di accesso al database che preferisci, utilizza la console di Google Cloud per generare una chiave per l'account di servizio. Utilizza i contenuti del file JSON della chiave risultante quando configuri questa estensione.

  4. Utilizza i contenuti del file JSON chiave risultante quando aggiungi e configuri l'estensione mediante il riferimento di configurazione.

Informazioni su Cloud Spanner

Cloud Spanner è un servizio di database relazionale utile per i dati relazionali, strutturati e semistrutturati che richiedono alta disponibilità, elevata coerenza e letture e scritture transazionali.

Se hai iniziato da poco a utilizzare Cloud Spanner, la guida rapida nella documentazione di Cloud Spanner è un buon punto di partenza.

Esempi

I seguenti esempi illustrano come configurare il supporto per le azioni delle estensioni Cloud Spanner utilizzando il criterio ExtensionCallout.

Aggiungi dati

Nell'esempio seguente, l'azione insert dell'estensione aggiunge un nuovo utente alla tabella degli utenti.

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

Ottieni dati

In questo esempio, una query recupera i valori di nome utente ed email dalla tabella user.

In primo luogo, un criterioAssignMessage assegna una variabile postal.code.value da utilizzare in una clausola WHERE di query. Ecco un esempio. Il criterio probabilmente imposterebbe il valore in base ai parametri della richiesta del client.

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

Il seguente criterio ExtensionCallout esegue una query sul database, utilizzando i contenuti della variabile postal.code.value nella clausola 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>

Il seguente criterioAssignMessage utilizza quindi la risposta dell'estensione, archiviato nella variabile spanner.userdata.retrieved, poiché la risposta è stata restituita al 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>

In questo esempio, i dati di risposta vengono restituiti come JSON, come riportato di seguito.

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

Aggiorna dati

In questo esempio, l'elemento <Input> contiene username (la chiave primaria della tabella) e un nuovo valore per la colonna 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>

Azioni

insert

Inserisce le righe specificate nel database.

Sintassi

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

Esempio

Nell'esempio seguente, l'azione insert dell'estensione aggiunge un nuovo utente alla tabella degli utenti. Viene aggiunta una riga.

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

Parametri di richiesta

Parametro Descrizione Tipo Predefinito Obbligatorio
tableName La tabella del database in cui devono essere inserite le righe. Stringa Nessuno. Sì.
righe Le righe da inserire espresse come array in un oggetto JSON rows. Array Nessuno. Sì.

Risposta

Nessuno.

querySQL

Esegue una query sul database utilizzando l'istruzione SQL con i parametri specificati. I parametri sono indicati nell'istruzione SQL con i nomi @-prepended. i valori parametro sono specificati nel parametro params di questa azione.

Per maggiori dettagli sulla sintassi delle query di Cloud Spanner, consulta Sintassi delle query.

Sintassi

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

Esempio

In questo esempio, una query recupera i valori delle colonne username e email dalla tabella user. L'istruzione SQL specifica un parametro postalCode impostato dalla variabile di flusso postal.code.value.

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

Parametri di richiesta

Parametro Descrizione Tipo Predefinito Obbligatorio
sql La query SQL da eseguire. Puoi specificare i parametri anteponendo il simbolo @. I nomi di questi parametri devono corrispondere alle chiavi nel parametro params di questa azione. Stringa Nessuno. Sì.
parametri Un oggetto le cui chiavi e valori sono i nomi e i valori dei parametri utilizzati nella query SQL. Qui puoi elencare più parametri. Oggetto Nessuno. No.

Risposta

Un oggetto rows contenente un array di coppie nome-valore di colonna restituite dalla query. Ad esempio:

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

update

Aggiorna le righe nel database con i dati specificati.

Sintassi

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

Esempio

In questo esempio, l'indirizzo email dell'utente il cui username è Liz456 viene aggiornato con un nuovo valore. Viene aggiornata una riga.

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

Parametri di richiesta

Parametro Descrizione Tipo Predefinito Obbligatorio
tableName La tabella nel database in cui devono essere aggiornate le righe. Stringa Nessuno. Sì.
righe Un array di dati di riga da aggiornare. Ogni entità nell'array deve contenere il valore dell'ID univoco (ad esempio la chiave primaria) per la riga da aggiornare. Array Nessuno. Sì.

Risposta

Nessuno.

Riferimento alla configurazione

Quando configuri questa estensione e ne esegui il deployment da usare nei proxy API, usa quanto segue. Per la procedura di configurazione di un'estensione utilizzando la console Apigee, vedi Aggiungere e configurare un'estensione.

Proprietà comuni delle estensioni

Per ogni estensione sono presenti le seguenti proprietà.

Proprietà Descrizione Predefinito Obbligatorio
name Il nome che assegni a questa configurazione dell'estensione. Nessuno
packageName Nome del pacchetto dell'estensione fornito da Apigee Edge. Nessuno
version Numero di versione del pacchetto dell'estensione da cui stai configurando un'estensione. Nessuno
configuration Valore di configurazione specifico per l'estensione che stai aggiungendo. Vedi Proprietà per questo pacchetto di estensioni Nessuno

Proprietà per questo pacchetto di estensioni

Specifica i valori per le seguenti proprietà di configurazione specifiche per questa estensione.

Proprietà Descrizione Predefinito Obbligatorio
ID progetto ID del progetto Google Cloud contenente il database. Nessuno. Sì.
instanceId ID dell'istanza Cloud Spanner nel progetto Google Cloud. Nessuno. Sì.
databaseId ID del database Cloud Spanner. Nessuno. Sì.
credenziali Se inserito nella console Apigee Edge, questi sono i contenuti del file delle chiavi dell'account di servizio. Se inviato tramite l'API di gestione, si tratta di un valore codificato in base64 generato dal file delle chiavi dell'account di servizio. Nessuno. Sì.