Rozszerzenie bazy danych Google Cloud Spanner

Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
info

Wersja 2.0.0

Wykonywanie operacji wstawiania, zapytania i aktualizowania w bazie danych Cloud Spanner.

Te treści zawierają informacje na temat konfigurowania i używania tego rozszerzenia. Zanim użyjesz rozszerzenia z serwera proxy interfejsu API przy użyciu zasad dotyczących rozszerzenia z wywołaniem, musisz:

  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 do bazy danych kontu usługi GCP, które reprezentuje Twoje rozszerzenie. Więcej informacji o roli, której należy użyć, znajdziesz w artykule Rola użytkownika Cloud Spanner. Więcej informacji o kontroli dostępu w usłudze Cloud Spanner znajdziesz w artykułach Stosowanie ról uprawnień i Kontrola dostępu w usłudze Cloud Spanner.

  3. Gdy masz konto usługi z uprawnieniami do odpowiedniego poziomu dostępu do bazy danych, w konsoli GCP wygeneruj klucz dla tego konta. Podczas konfigurowania tego rozszerzenia użyj zawartości utworzonego pliku klucza JSON.

  4. Użyj zawartości utworzonego pliku klucza JSON podczas dodawania i konfigurowania rozszerzenia za pomocą dokumentacji konfiguracji.

Informacje o usłudze Cloud Spanner

Cloud Spanner to relacyjna baza danych, która jest przydatna do obsługi danych relacyjnych, ustrukturyzowanych i słabo ustrukturyzowanych, które wymagają wysokiej dostępności, silnej spójności oraz odczytów i zapisów transakcyjnych.

Jeśli dopiero zaczynasz korzystać z usługi Cloud Spanner, zapoznaj się z samouczkiem w dokumentacji Cloud Spanner.

Przykłady

Poniższe przykłady pokazują, jak skonfigurować obsługę działań rozszerzenia Cloud Spanner za pomocą zasad dotyczących powiadomienia o rozszerzeniu.

Dodaj dane

W tym 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>

Pobieranie danych

W tym przykładzie zapytanie pobiera wartości nazwy użytkownika i adresu e-mail z tabeli user.

Najpierw polityka przypisywania wiadomości przypisuje zmienną postal.code.value do użycia w klauzuli WHERE zapytania. Oto przykład. Twoje zasady prawdopodobnie ustawiają 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>

Podana poniżej zasada ExtensionCalloutPolicy wykonuje zapytanie do bazy danych, używając w klauzuli WHERE zawartości zmiennej postal.code.value.

<?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>

Podana niżej zasada przypisywania wiadomości używa odpowiedzi rozszerzenia, przechowywanej w zmiennej spanner.userdata.retrieved, jako odpowiedzi zwracanej 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, np. w takiej postaci:

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

Zaktualizuj dane

W tym przykładzie element <Input> zawiera username – klucz podstawowy tabeli – oraz nową wartość dla kolumny 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 tym 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

Wysyła zapytanie do bazy danych za pomocą instrukcji SQL z określonymi parametrami. Parametry są podawane w wyrażeniu SQL z przedrostkiem @; wartości parametrów są podawane w parametrze params tej akcji.

Szczegółowe informacje o składni zapytań Cloud Spanner znajdziesz w artykule 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 usernameemail z tabeli user. Wyrażenie SQL określa parametr postalCode, który jest ustawiany na podstawie 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ślny Wymagane
sql Zapytanie SQL do wykonania. Parametry możesz określać, dodając przed ich nazwami znak @. Nazwy tych parametrów muszą być zgodne z kluczami w parametrze params tego działania. Ciąg znaków Brak. Tak.
params Obiekt, którego klucze i wartości to nazwy i wartości parametrów użytych w zapytaniu SQL. Możesz tu podać większą liczbę 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 za pomocą określonych danych.

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 o identyfikatorze username (Liz456) został zaktualizowany 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 z encji w tablicy powinna zawierać unikalny identyfikator (np. klucz podstawowy) wiersza, który ma zostać zaktualizowany. Tablica Brak. Tak.

Odpowiedź

Brak.

Informacje o konfiguracji

Podczas konfigurowania i wdrażania tego rozszerzenia do użycia w serwerach proxy API postępuj zgodnie z tymi instrukcjami. Instrukcje konfigurowania rozszerzenia za pomocą konsoli Apigee znajdziesz w artykule Dodawanie i konfigurowanie rozszerzenia.

Właściwości wspólne 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 tych właściwości konfiguracji, które są specyficzne dla tego rozszerzenia.

Właściwość Opis Domyślny Wymagane
Identyfikator projektu Identyfikator projektu Google Cloud Platform 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 Gdy wpiszesz go w konsoli Apigee Edge, będzie to zawartość pliku klucza konta usługi. Gdy jest wysyłany za pomocą interfejsu API zarządzania, jest to wartość zakodowana w formacie base64 wygenerowana z pliku klucza konta usługi. Brak. Tak.