Sie sehen sich die Dokumentation zu Apigee Edge an.
Sehen Sie sich die Apigee X-Dokumentation an. info
Version 2.0.0
Führen Sie Einfüge-, Abfrage- und Aktualisierungsvorgänge für eine Cloud Spanner-Datenbank aus.
Dieser Artikel 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:
Erstellen Sie eine Cloud Spanner-Instanz und eine Datenbank, wie unter Instanzen erstellen und verwalten beschrieben.
Nachdem Sie die Instanz und eine Datenbank erstellt haben, gewähren Sie dem GCP-Dienstkonto, das Ihre Erweiterung darstellt, die Berechtigung zum Zugriff auf Ihre Datenbank. Weitere Informationen zur zu verwendenden Rolle finden Sie unter Cloud Spanner-Rollen. Weitere Informationen zur Zugriffssteuerung für Cloud Spanner finden Sie unter IAM-Rollen anwenden und Zugriffssteuerung für Cloud Spanner.
Wenn Sie ein Dienstkonto mit der gewünschten Zugriffsebene auf 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.
Verwenden Sie den Inhalt der resultierenden JSON-Schlüsseldatei, wenn Sie die Erweiterung mithilfe der Konfigurationsreferenz hinzufügen und konfigurieren.
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 sowie Transaktionslese- und ‑schreibvorgänge erforderlich sind.
Wenn Sie gerade erst mit Cloud Spanner beginnen, ist der Schnellstart in der Cloud Spanner-Dokumentation ein guter Ausgangspunkt.
Beispiele
In den folgenden Beispielen wird gezeigt, wie Sie die Unterstützung für Cloud Spanner-Erweiterungsaktionen mithilfe der ExtensionCallout-Richtlinie konfigurieren.
Daten hinzufügen
Im folgenden Beispiel wird mit der insert
-Aktion der Erweiterung der Tabelle „Nutzer“ 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 werden mit einer Abfrage die Werte für den Nutzernamen und die E-Mail-Adresse aus der Tabelle user
abgerufen.
Zuerst wird mit einer AssignMessage-Richtlinie eine postal.code.value
-Variable für die Verwendung in einer WHERE-Klausel einer Abfrage zugewiesen. Dies ist ein Beispiel. In Ihrer Richtlinie wird der Wert wahrscheinlich anhand der Parameter der Clientanfrage 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>
In der folgenden ExtensionCallout-Richtlinie wird eine Abfrage an die Datenbank ausgeführt, wobei der Inhalt der Variablen postal.code.value
in der WHERE-Klausel verwendet wird.
<?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, z. B. so:
{
"rows": [
{
"username": "freewill444",
"email": "freewill@example.com"
}
]
}
Daten aktualisieren
In diesem Beispiel enthält das <Input>
-Element den 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 mit der insert
-Aktion der Erweiterung der Tabelle „Nutzer“ ein neuer Nutzer hinzugefügt. Es wird eine Zeile 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
Die Datenbank wird mit der SQL-Anweisung und den angegebenen Parametern abgefragt. Parameter werden in der SQL-Anweisung mit einem vorangestellten @ angegeben. Parameterwerte werden im Parameter params
dieser Aktion angegeben.
Weitere Informationen 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 mit einer Abfrage die Spaltenwerte username
und email
aus der Tabelle user
abgerufen. Die SQL-Anweisung gibt einen Parameter postalCode
an, der über die Ablaufvariable 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 SQL-Abfrage, die ausgeführt werden soll. Sie können Parameter mit einem vorangestellten @ 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 Parameternamen und -werte sind, die in der SQL-Abfrage verwendet werden. Sie können hier mehrere Parameter angeben. | Object | Keine. | Nein. |
Antwort
Ein rows
-Objekt mit einem Array von Spaltennamen/Wert-Paaren, 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 mit der username
„Liz456“ 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 Zeile enthalten, die aktualisiert werden soll. | Array | Keine. | Ja. |
Antwort
Keine.
Konfigurationsreferenz
Beachten Sie Folgendes, wenn Sie diese Erweiterung für die Verwendung in API-Proxys konfigurieren und bereitstellen. Eine Anleitung zum Konfigurieren einer Erweiterung mit der Apigee Console finden Sie unter Erweiterung hinzufügen und konfigurieren.
Gängige 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 |
Properties 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 | ID der Cloud Spanner-Instanz in Ihrem GCP-Projekt. | Keine. | Ja. |
databaseId | ID der Cloud Spanner-Datenbank. | Keine. | Ja. |
Anmeldedaten | Wenn Sie diesen Wert in die Apigee Edge-Konsole eingeben, entspricht er dem Inhalt Ihrer Dienstkonto-Schlüsseldatei. Wenn er über die Verwaltungs-API gesendet wird, ist er ein Base64-codierter Wert, der aus der Dienstkonto-Schlüsseldatei generiert wird. | Keine. | Ja. |