Rozszerzenie bazy danych Google Cloud Spanner

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:

  1. Utwórz instancję Cloud Spanner w sposób opisany w artykule Tworzenie instancji i zarządzanie nimi, a następnie utwórz bazę danych.

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

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

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