Przeglądasz dokumentację Apigee Edge.
Przejdź do
Dokumentacja Apigee X. informacje.
Wersja 1.2.1
Wykonywanie operacji wstawiania, wykonywania zapytań i aktualizacji w bazie danych Cloud Spanner.
W tym artykule znajdziesz informacje na temat konfigurowania i używania tego rozszerzenia. Zanim użyjesz rozszerzenia z serwera proxy interfejsu API za pomocą parametru ExtensionCallout, musisz:
Utwórz instancję Cloud Spanner w sposób opisany w artykule Tworzenie instancji i zarządzanie nimi, a następnie utwórz bazę danych.
Po utworzeniu instancji i bazy danych przyznaj uprawnienia dostępu do bazy danych kontu usługi GCP, które reprezentuje Twoje rozszerzenie. Więcej informacji o rolach, które mają być używane, znajdziesz w artykule o rolach Cloud Spanner. Więcej informacji o kontroli dostępu do Cloud Spanner znajdziesz w artykułach na temat stosowania ról uprawnień i kontroli dostępu do Cloud Spanner.
Gdy masz konto usługi z uprawnieniami do odpowiedniego poziomu dostępu do bazy danych, użyj konsoli GCP, aby wygenerować klucz dla konta usługi. Użyj zawartości wynikowego pliku JSON klucza podczas konfigurowania tego rozszerzenia.
Użyj zawartości wynikowego pliku JSON klucza podczas dodawania i konfigurowania rozszerzenia w dokumentacji konfiguracji.
Informacje o usłudze Cloud Spanner
Cloud Spanner to usługa relacyjnej bazy danych przydatna w przypadku danych relacyjnych, uporządkowanych i półuporządkowanych, które wymagają wysokiej dostępności, silnej spójności oraz transakcyjnych odczytów i zapisów.
Jeśli dopiero zaczynasz korzystać z usługi Cloud Spanner, zapoznaj się z krótkim wprowadzeniem w dokumentacji Cloud Spanner.
Przykłady
Poniższe przykłady pokazują, jak skonfigurować obsługę działań rozszerzenia Cloud Spanner za pomocą zasady ExtensionCallout.
Dodaj dane
W poniższym przykładzie działanie insert
rozszerzenia dodaje nowego użytkownika do tabeli użytkowników.
<?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>
Pobierz dane
W tym przykładzie zapytanie pobiera nazwę użytkownika i adres e-mail z tabeli user
.
Po pierwsze, zasada AssignMessage przypisuje zmienną postal.code.value
do użycia w klauzuli WHERE zapytania. Oto przykład. Twoja zasada prawdopodobnie ustawiłaby wartość na podstawie parametrów żądania klienta.
<?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>
Ta zasada ExtensionCallout wykonuje zapytanie w bazie danych, używając zawartości zmiennej postal.code.value
w klauzuli 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>
Poniższa zasada AssignMessage korzysta z odpowiedzi rozszerzenia,
zapisane w zmiennej spanner.userdata.retrieved
, gdy odpowiedź zostanie zwrócona
do klienta.
<?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>
W tym przykładzie dane odpowiedzi są zwracane w formacie JSON, jak poniżej.
{
"rows": [
{
"username": "freewill444",
"email": "freewill@example.com"
}
]
}
Zaktualizuj dane
W tym przykładzie element <Input>
zawiera username
– klucz podstawowy tabeli – i nową wartość w kolumnie 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>
Działania
Insert
Wstawia określone wiersze do bazy danych.
Składnia
<Action>insert</Action>
<Input><![CDATA[{
"tableName" : "table-to-insert-into",
"rows" : "rows-to-insert"
}]]></Input>
Przykład
W poniższym przykładzie działanie insert
rozszerzenia dodaje nowego użytkownika do tabeli użytkowników. Dodano 1 wiersz.
<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>
Parametry żądania
Parametr | Opis | Typ | Domyślny | Wymagane |
---|---|---|---|---|
tableName | Tabela w bazie danych, do której mają zostać wstawione wiersze. | Ciąg znaków | Brak. | Tak. |
wiersze | Wiersze do wstawienia wyrażone jako tablica w obiekcie JSON rows . |
Tablica | Brak. | Tak. |
Odpowiedź
Brak.
querySQL
Wykonuje zapytania do bazy danych za pomocą instrukcji SQL z określonymi parametrami. Parametry są podawane w instrukcji SQL z nazwami poprzedzającymi @. wartości są określone w parametrze params
tego działania.
Szczegółowe informacje o składni zapytań Cloud Spanner znajdziesz w sekcji Składnia zapytań.
Składnia
<Action>querySQL</Action>
<Input><![CDATA[{
"sql" : "sql-query-statement",
"params" : {
"param1" : "columnValue"
}
}]]></Input>
Przykład
W tym przykładzie zapytanie pobiera wartości z kolumn username
i email
z tabeli user
. Instrukcja SQL określa parametr postalCode
ustawiany przez zmienną przepływu postal.code.value
.
<Action>querySQL</Action>
<Input><![CDATA[{
"sql" : "SELECT username, email FROM user WHERE postalCode = @postalCode",
"params" : {
"postalCode" : "{postal.code.value}"
}
}]]></Input>
Parametry żądania
Parametr | Opis | Typ | Domyślny | Wymagane |
---|---|---|---|---|
sql | Zapytanie SQL do wykonania. Możesz określać parametry z nazwami parametrów podanymi na początku. Nazwy tych parametrów muszą odpowiadać kluczom w parametrze params tego działania. |
Ciąg znaków | Brak. | Tak. |
parametry | Obiekt, którego klucze i wartości są nazwami i wartościami parametrów używanymi w zapytaniu SQL. W tym miejscu możesz podać wiele parametrów. | Obiekt | Brak. | Nie. |
Odpowiedź
Obiekt rows
zawierający tablicę par nazwa-wartość kolumny zwróconych przez zapytanie. Na przykład:
{
"rows": [
{
"username": "freewill444",
"email": "freewill@example.com"
}
]
}
update
Aktualizuje wiersze w bazie danych o określone dane.
Składnia
<Input><![CDATA[{
"tableName" : "table-with-rows-to-update",
"rows" : "rows-to-update"
}]]></Input>
Przykład
W tym przykładzie adres e-mail użytkownika, którego atrybut username
to Liz456, jest aktualizowany o nową wartość. Zaktualizowano 1 wiersz.
<Action>update</Action>
<Input><![CDATA[{
"tableName" : "user",
"rows": [{
"username":"Liz456",
"email":"lizzard@example.com"
}]
}]]></Input>
Parametry żądania
Parametr | Opis | Typ | Domyślny | Wymagane |
---|---|---|---|---|
tableName | Tabela w bazie danych, w której należy zaktualizować wiersze. | Ciąg znaków | Brak. | Tak. |
wiersze | Tablica danych wiersza do zaktualizowania. Każda encja w tablicy powinna zawierać wartość unikalnego identyfikatora (np. klucza podstawowego) w wierszu, który ma zostać zaktualizowany. | Tablica | Brak. | Tak. |
Odpowiedź
Brak.
Odniesienie do konfiguracji
Podczas konfigurowania i wdrażania tego rozszerzenia na potrzeby serwerów proxy interfejsu API użyj poniższych wskazówek. Instrukcje konfigurowania rozszerzenia za pomocą konsoli Apigee znajdziesz w artykule Dodawanie i konfigurowanie rozszerzenia.
Typowe właściwości rozszerzeń
Dla każdego rozszerzenia dostępne są poniższe właściwości.
Usługa | Opis | Domyślnie | Wymagany |
---|---|---|---|
name |
Nazwa nadana konfiguracji rozszerzenia. | Brak | Tak |
packageName |
Nazwa pakietu rozszerzeń podana przez Apigee Edge. | Brak | Tak |
version |
Numer wersji pakietu rozszerzenia, z którego konfigurujesz rozszerzenie. | Brak | Tak |
configuration |
Wartość konfiguracji specyficzna dla dodawanego rozszerzenia. Zobacz Właściwości tego pakietu rozszerzeń | Brak | Tak |
Właściwości tego pakietu rozszerzeń
Określ wartości następujących właściwości konfiguracji specyficznych dla tego rozszerzenia.
Właściwość | Opis | Domyślny | Wymagane |
---|---|---|---|
Identyfikator projektu | Identyfikator projektu GCP zawierającego bazę danych. | Brak. | Tak. |
instanceId | Identyfikator instancji Cloud Spanner w projekcie GCP. | Brak. | Tak. |
identyfikator bazy danych | Identyfikator bazy danych Cloud Spanner. | Brak. | Tak. |
dane logowania | Jeśli wpiszesz ją w konsoli Apigee Edge, zobaczysz zawartość pliku klucza konta usługi. W przypadku wysyłania przez interfejs API zarządzania jest to wartość zakodowana w formacie base64 generowana na podstawie pliku klucza konta usługi. | Brak. | Tak. |