Rozszerzenie bazy danych Google Cloud Spanner

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

Wersja 1.4.1

Wykonywanie operacji wstawiania, wykonywania zapytań i aktualizowania w bazie danych Cloud Spanner.

Ta treść zawiera informacje na temat konfigurowania tego rozszerzenia i korzystania z niego. Zanim użyjesz zasady ExtensionCallout, musisz użyć rozszerzenia z serwera proxy interfejsu API:

  1. Utwórz instancję Cloud Spanner zgodnie z opisem w artykule Tworzenie instancji i zarządzanie nimi oraz utwórz bazę danych.

  2. Gdy masz już instancję i bazę danych, przyznaj uprawnienia dostępu do bazy danych kontu usługi GCP, które reprezentuje Twoje rozszerzenie. Więcej informacji o rolach znajdziesz w artykule na temat ról w Cloud Spanner. Więcej informacji o kontroli dostępu w Cloud Spanner znajdziesz w artykułach Stosowanie ról uprawnień i Kontrola dostępu w Cloud Spanner.

  3. Jeśli masz konto usługi z uprawnieniami na wybranym poziomie dostępu do bazy danych, wygeneruj w konsoli GCP klucz dla konta usługi. Podczas konfigurowania tego rozszerzenia użyj zawartości powstałego klucza pliku JSON.

  4. Podczas dodawania i konfigurowania rozszerzenia przy użyciu dokumentu dotyczącego konfiguracji użyj zawartości powstałego klucza pliku JSON.

Informacje o usłudze Cloud Spanner

Cloud Spanner to usługa relacyjnej bazy danych przydaje się 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 Cloud Spanner, na początek zapoznaj się z krótkim wprowadzeniem w dokumentacji tej usługi.

Sample

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 wartości nazwy użytkownika i adresu e-mail z tabeli user.

Po pierwsze, zasada AssignMessage przypisuje zmienną postal.code.value do użycia w klauzuli WHERE zapytania. To tylko przykład. Twoja zasada prawdopodobnie ustawi 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>

Poniższa zasada ExtensionCallout wykonuje zapytanie w bazie danych, korzystając z 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 wykorzystuje następnie odpowiedź rozszerzenia zapisaną w zmiennej spanner.userdata.retrieved jako odpowiedź zwracaną klientowi.

<?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 w przykładzie 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ślne 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 zapytanie do bazy danych za pomocą instrukcji SQL z określonymi parametrami. Parametry są podawane w instrukcji SQL z nazwami poprzedzonymi znakiem @. Wartości parametrów są określane 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 kolumn username i email z tabeli user. Instrukcja SQL określa parametr postalCode ustawiany ze zmiennej 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ślne Wymagane
sql Zapytanie SQL do wykonania. Parametry możesz określać z nazwami parametrów z przedrostkiem @. Te nazwy parametrów muszą odpowiadać kluczom w parametrze params tego działania. Ciąg znaków Brak. Tak.
params Obiekt, którego klucze i wartości są nazwami i wartościami parametrów używanymi w zapytaniu SQL. Możesz tutaj podać wiele parametrów. Obiekt Brak. Nie.

Odpowiedź

Obiekt rows zawierający tablicę z parami nazwa-wartość kolumny zwróconych przez zapytanie. Na przykład:

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

aktualizować

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 username to Liz456, zostanie zaktualizowany za pomocą nowej wartości. Zaktualizowano 1 wiersz.

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

Parametry żądania

Parametr Opis Typ Domyślne 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żdy element w tablicy powinien zawierać unikalny identyfikator (np. klucz podstawowy), który ma być aktualizowany. Tablica Brak. Tak.

Odpowiedź

Brak.

Dokumentacja konfiguracji

Skorzystaj z podanych niżej instrukcji podczas konfigurowania i wdrażania tego rozszerzenia na potrzeby serwerów proxy interfejsów API. Instrukcje konfigurowania rozszerzenia w 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ń

Podaj wartości następujących właściwości konfiguracji specyficznych dla tego rozszerzenia.

Właściwość Opis Domyślne Wymagane
projectId Identyfikator projektu GCP zawierającego bazę danych. Brak. Tak.
instanceId Identyfikator instancji Cloud Spanner w projekcie GCP. Brak. Tak.
databaseId Identyfikator bazy danych Cloud Spanner. Brak. Tak.
dane logowania Wpisana w konsoli Apigee Edge jest to zawartość pliku klucza konta usługi. Gdy jest wysyłana przez interfejs API zarządzania, jest to wartość zakodowana w formacie base64 wygenerowana z pliku klucza konta usługi. Brak. Tak.