Google Cloud Spanner-Datenbankerweiterung

Sie sehen die Dokumentation zu Apigee Edge.
Zur Apigee X-Dokumentation
weitere Informationen

Version 1.4.1

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

In diesem Artikel erfahren Sie, wie Sie diese Erweiterung konfigurieren und verwenden. Bevor Sie die Erweiterung mithilfe der ExtensionCallout-Richtlinie von einem API-Proxy verwenden, 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. Sobald Sie die Instanz und eine Datenbank haben, können Sie dem GCP-Dienstkonto, das Ihre Erweiterung repräsentiert, die Berechtigung zum Zugriff auf Ihre Datenbank gewähren. 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 Berechtigung für die gewünschte 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üssel-JSON-Datei, wenn Sie diese Erweiterung konfigurieren.

  4. Verwenden Sie den Inhalt der resultierenden JSON-Schlüssel-JSON-Datei beim Hinzufügen und Konfigurieren der Erweiterung mithilfe der Konfigurationsreferenz.

Informationen zu Cloud Spanner

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

Wenn Sie Cloud Spanner zum ersten Mal verwenden, ist die Kurzanleitung in der Cloud Spanner-Dokumentation ein guter Ausgangspunkt.

Samples

Die folgenden Beispiele veranschaulichen, wie die Unterstützung für Cloud Spanner-Erweiterungsaktionen mithilfe der ExtensionCallout-Richtlinie konfiguriert wird.

Daten hinzufügen

Im folgenden Beispiel wird durch die Aktion insert der Erweiterung der Nutzertabelle ein neuer Nutzer 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 ruft eine Abfrage einen Nutzernamen und eine E-Mail-Adresse aus der Tabelle user ab.

Zuerst weist eine AssignMessage-Richtlinie eine postal.code.value-Variable zur Verwendung in einer Abfrage-WHERE-Klausel zu. Dies ist ein Beispiel. Ihre Richtlinie würde den Wert wahrscheinlich basierend auf Clientanfrageparametern festlegen.

<?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 dabei den Inhalt der postal.code.value-Variable 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 in der Variable spanner.userdata.retrieved gespeicherte Antwort der Erweiterung als die an den Client zurückgegebene Antwort.

<?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 im JSON-Format zurückgegeben, wie im Folgenden dargestellt.

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

Daten aktualisieren

In diesem Beispiel enthält das Element <Input> die username, den Primärschlüssel der Tabelle, 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 Aktion insert der Erweiterung der Nutzertabelle ein neuer Nutzer 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 Tabelle in der Datenbank, in die die Zeilen eingefügt werden sollen. String Keine. Ja.
Zeilen Die einzufügenden Zeilen, ausgedrückt als Array in einem JSON-Objekt vom Typ rows. Array Keine. Ja.

Antwort

Keine.

querySQL

Fragt die Datenbank mithilfe der SQL-Anweisung mit den angegebenen Parametern ab. Parameter werden in der SQL-Anweisung mit vorangestellten @-Namen angegeben. Parameterwerte werden im params-Parameter dieser Aktion angegeben.

Weitere Informationen zur Abfragesyntax von Cloud Spanner finden Sie unter Abfragesyntax.

Syntax

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

Beispiel

In diesem Beispiel ruft eine Abfrage die Spaltenwerte username und email aus der Tabelle user ab. Die SQL-Anweisung gibt einen postalCode-Parameter an, der über die Flussvariable 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 vorangestellten Parameternamen mit @ angeben. Diese Parameternamen müssen den Schlüsseln im params-Parameter dieser Aktion entsprechen. 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 Spaltennamen, die von der Abfrage zurückgegeben wurden. 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 des Nutzers, dessen username „Liz456“ lautet, 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 von Zeilendaten, die aktualisiert werden sollen. Jede Entität im Array sollte die eindeutige ID (z. B. den Primärschlüssel) für die zu aktualisierende Zeile enthalten. Array Keine. Ja.

Antwort

Keine.

Konfigurationsreferenz

Verwenden Sie Folgendes, wenn Sie diese Erweiterung zur 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.

Häufige 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 dieses Erweiterungspakets

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

Property Beschreibung Standard Erforderlich
projectId ID des GCP-Projekts, das die Datenbank enthält. Keine. Ja.
instanceId ID der Cloud Spanner-Instanz in Ihrem GCP-Projekt. Keine. Ja.
databaseId ID der Cloud Spanner-Datenbank. Keine. Ja.
Anmeldedaten Bei Eingabe in die Apigee Edge-Konsole ist dies der Inhalt Ihrer Dienstkonto-Schlüsseldatei. Wenn er über die Verwaltungs-API gesendet wird, ist er ein base64-codierter Wert, der aus der Schlüsseldatei des Dienstkontos generiert wird. Keine. Ja.