Google Cloud Spanner-Datenbankerweiterung

Sie lesen gerade die Dokumentation zu Apigee Edge.
Zur Dokumentation zu Apigee X
info

Version 2.0.1

Einfüge-, Abfrage- und Aktualisierungsvorgänge für eine Cloud Spanner-Datenbank ausführen

Dieser Inhalt enthält eine Referenz zum Konfigurieren und Verwenden dieser Erweiterung. Bevor Sie die Erweiterung über einen API-Proxy mit der ExtensionCallout-Richtlinie verwenden können, müssen Sie Folgendes tun:

  1. Erstellen Sie eine Cloud Spanner-Instanz, wie unter Instanzen erstellen und verwalten beschrieben, und erstellen Sie eine Datenbank.

  2. Nachdem Sie die Instanz und eine Datenbank erstellt haben, erteilen Sie dem GCP-Dienstkonto, das Ihre Erweiterung repräsentiert, die Berechtigung für den Zugriff auf Ihre Datenbank. Weitere Informationen zur zu verwendenden Rolle finden Sie unter Cloud Spanner-Rollen. Weitere Informationen zur Cloud Spanner-Zugriffssteuerung finden Sie unter IAM-Rollen anwenden und Zugriffssteuerung für Cloud Spanner.

  3. Wenn Sie ein Dienstkonto mit der gewünschten Zugriffsebene für Ihre Datenbank haben, generieren Sie mit der GCP Console einen Schlüssel für das Dienstkonto. Verwenden Sie den Inhalt der resultierenden JSON-Schlüsseldatei, wenn Sie diese Erweiterung konfigurieren.

  4. Verwenden Sie den Inhalt der resultierenden JSON-Schlüsseldatei, wenn Sie die Erweiterung mit der Konfigurationsreferenz hinzufügen und konfigurieren.

Cloud Spanner

Cloud Spanner ist ein relationaler Datenbankdienst, der sich für relationale, strukturierte und semistrukturierte Daten eignet, die Hochverfügbarkeit, strikte Konsistenz sowie Lese- und Schreibvorgänge in Transaktionen erfordern.

Wenn Sie gerade erst mit Cloud Spanner beginnen, ist der Schnellstart in der Cloud Spanner-Dokumentation ein guter Ausgangspunkt.

Beispiele

Die folgenden Beispiele veranschaulichen, wie Sie die Unterstützung für Cloud Spanner-Erweiterungsaktionen mit der ExtensionCallout-Richtlinie konfigurieren.

Daten hinzufügen

Im folgenden Beispiel wird durch die insert-Aktion der Erweiterung ein neuer Nutzer zur Nutzertabelle hinzugefügt.

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

Daten abrufen

In diesem Beispiel werden mit einer Abfrage die Werte für „username“ und „email“ aus der Tabelle user abgerufen.

Zuerst wird mit einer AssignMessage-Richtlinie eine postal.code.value-Variable für die Verwendung in einer WHERE-Klausel der Abfrage zugewiesen. Dies ist ein Beispiel. In Ihrer Richtlinie wird der Wert wahrscheinlich auf Grundlage von Clientanfrageparametern festgelegt.

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

Die folgende ExtensionCallout-Richtlinie führt eine Abfrage für die Datenbank aus und verwendet den Inhalt der Variablen postal.code.value in der WHERE-Klausel.

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

Die folgende AssignMessage-Richtlinie verwendet dann die Antwort der Erweiterung, die in der Variablen spanner.userdata.retrieved gespeichert ist, als Antwort, die an den Client zurückgegeben wird.

<?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 diesem Beispiel werden die Antwortdaten als JSON zurückgegeben, wie unten dargestellt.

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

Daten aktualisieren

In diesem Beispiel enthält das Element <Input> den Primärschlüssel der Tabelle, username, und einen neuen Wert für die Spalte 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>

Aktionen

insert

Fügt die angegebenen Zeilen in die Datenbank ein.

Syntax

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

Beispiel

Im folgenden Beispiel wird durch die insert-Aktion der Erweiterung ein neuer Nutzer zur Nutzertabelle hinzugefügt. Eine Zeile wird hinzugefügt.

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

Anfrageparameter

Parameter Beschreibung Typ Standard Erforderlich
tableName Die Tabelle in der Datenbank, in die die Zeilen eingefügt werden sollen. String Keine. Ja.
Zeilen Die einzufügenden Zeilen als Array in einem rows-JSON-Objekt. Array Keine. Ja.

Antwort

Keine.

querySQL

Fragt die Datenbank mit der SQL-Anweisung mit den angegebenen Parametern ab. Parameter werden in der SQL-Anweisung mit Namen angegeben, denen ein @ vorangestellt ist. Parameterwerte werden im Parameter params dieser Aktion angegeben.

Details zur Cloud Spanner-Abfragesyntax finden Sie unter Abfragesyntax.

Syntax

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

Beispiel

In diesem Beispiel werden die Spaltenwerte username und email aus der Tabelle user abgerufen. In der SQL-Anweisung wird ein postalCode-Parameter angegeben, der aus der Ablaufvariablen postal.code.value festgelegt wird.

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

Anfrageparameter

Parameter Beschreibung Typ Standard Erforderlich
sql Die auszuführende SQL-Abfrage. Sie können Parameter mit Parameternamen angeben, denen ein @ vorangestellt ist. Diese Parameternamen müssen mit den Schlüsseln im params-Parameter dieser Aktion übereinstimmen. String Keine. Ja.
params Ein Objekt, dessen Schlüssel und Werte die in der SQL-Abfrage verwendeten Parameternamen und -werte sind. Sie können hier mehrere Parameter auflisten. Objekt Keine. Nein.

Antwort

Ein rows-Objekt mit einem Array von Spaltenname/Wert-Paaren, die von der Abfrage zurückgegeben werden. Beispiel:

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

update

Aktualisiert Zeilen in der Datenbank mit den angegebenen Daten.

Syntax

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

Beispiel

In diesem Beispiel wird die E-Mail-Adresse für den Nutzer, dessen username „Liz456“ ist, mit einem neuen Wert aktualisiert. Eine Zeile wird aktualisiert.

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

Anfrageparameter

Parameter Beschreibung Typ Standard Erforderlich
tableName Die Tabelle in der Datenbank, in der Zeilen aktualisiert werden sollen. String Keine. Ja.
Zeilen Ein Array mit Zeilendaten, die aktualisiert werden sollen. Jede Entität im Array sollte den Wert der eindeutigen ID (z. B. Primärschlüssel) für die zu aktualisierende Zeile enthalten. Array Keine. Ja.

Antwort

Keine.

Konfigurationsreferenz

Verwenden Sie die folgenden Informationen, wenn Sie diese Erweiterung für die Verwendung in API-Proxys konfigurieren und bereitstellen. Eine Anleitung zum Konfigurieren einer Erweiterung mit der Apigee-Konsole finden Sie unter Erweiterung hinzufügen und konfigurieren.

Allgemeine Erweiterungseigenschaften

Für jede Erweiterung sind die folgenden Eigenschaften vorhanden.

Attribut Beschreibung Standard Erforderlich
name Der Name, den Sie dieser Konfiguration der Erweiterung zuweisen. Ja
packageName Name des Erweiterungspakets, wie von Apigee Edge angegeben. Ja
version Versionsnummer für das Erweiterungspaket, von dem Sie eine Erweiterung konfigurieren. Ja
configuration Konfigurationswert speziell für die Erweiterung, die Sie hinzufügen. Weitere Informationen finden Sie unter Eigenschaften für dieses Erweiterungspaket. Ja

Eigenschaften für dieses Erweiterungspaket

Geben Sie Werte für die folgenden Konfigurationseigenschaften an, die für diese Erweiterung spezifisch sind.

Attribut Beschreibung Standard Erforderlich
projectId ID des GCP-Projekts, das die Datenbank enthält. Keine. Ja.
instanceId Die ID der Cloud Spanner-Instanz in Ihrem GCP-Projekt. Keine. Ja.
databaseId Die ID der Cloud Spanner-Datenbank. Keine. Ja.
Anmeldedaten Wenn Sie diesen Wert in der Apigee Edge-Konsole eingeben, ist das der Inhalt Ihrer Dienstkonto-Schlüsseldatei. Wenn er über die Management API gesendet wird, ist er ein Base64-codierter Wert, der aus der Dienstkonto-Schlüsseldatei generiert wird. Keine. Ja.