Rozszerzenie bazy danych Google Cloud Spanner

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

Wersja 1.4.3

Wykonywanie operacji wstawiania, wysyłania zapytań i aktualizowania w bazie danych Cloud Spanner.

Te treści zawierają informacje o konfigurowaniu i używaniu tego rozszerzenia. Zanim zaczniesz korzystać z rozszerzenia w proxy interfejsu API za pomocą zasady ExtensionCallout, musisz:

  1. Utworzyć instancję Cloud Spanner zgodnie z opisem w artykule Tworzenie instancji i zarządzanie nimi oraz utworzyć 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 roli, której należy użyć, znajdziesz w artykule Role Cloud Spanner. Więcej informacji o kontroli dostępu do Cloud Spanner znajdziesz w artykułach Stosowanie ról IAM i Kontrola dostępu w Cloud Spanner.

  3. Gdy masz konto usługi z uprawnieniami do poziomu dostępu do bazy danych, którego potrzebujesz, użyj konsoli GCP, aby wygenerować klucz konta usługi. Podczas konfigurowania tego rozszerzenia użyj zawartości wynikowego pliku JSON z kluczem.

  4. Podczas dodawania i konfigurowania rozszerzenia za pomocą odwołania do konfiguracji użyj zawartości wynikowego pliku JSON z kluczem.

Informacje o Cloud Spanner

Cloud Spanner to usługa relacyjnej bazy danych, która jest przydatna w przypadku relacyjnych, uporządkowanych i częściowo uporządkowanych danych wymagających wysokiej dostępności, silnej spójności oraz odczytów i zapisów transakcyjnych.

Jeśli dopiero zaczynasz korzystać z Cloud Spanner, dobrym miejscem na rozpoczęcie jest przewodnik Szybki start 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 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>

Pobierz dane

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

Najpierw zasada AssignMessage przypisuje zmienną postal.code.value do użycia w klauzuli WHERE zapytania. To jest 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, 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>

Następnie zasada AssignMessage 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, takim jak ten poniżej.

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

Zaktualizuj dane

W tym przykładzie element <Input> zawiera username – klucz podstawowy tabeli – oraz nową wartość kol2/} 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. Dodawany jest 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.
rows Wiersze do wstawienia wyrażone jako tablica w obiekcie JSON rows. Tablica Brak. Tak.

Odpowiedź

Brak.

querySQL

Wysyła zapytania 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.

Więcej informacji 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 username i email z tabeli user. Instrukcja 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. Możesz określić parametry z nazwami poprzedzonymi znakiem @. 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 tu podać kilka parametrów. Obiekt Brak. Nie.

Odpowiedź

Obiekt rows zawierający tablicę par nazwa kolumny – wartość 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, którego username to Liz456, jest aktualizowany o nową wartość. Aktualizowany jest 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 mają zostać zaktualizowane wiersze. Ciąg znaków Brak. Tak.
rows Tablica danych wierszy do zaktualizowania. Każda encja w tablicy powinna zawierać unikalną wartość identyfikatora (np. klucza podstawowego) wiersza do zaktualizowania. Tablica Brak. Tak.

Odpowiedź

Brak.

Odwołanie do konfiguracji

Podczas konfigurowania i wdrażania tego rozszerzenia do użycia w proxy interfejsu API użyj tych informacji. Aby dowiedzieć się, jak skonfigurować rozszerzenie za pomocą konsoli Apigee, przeczytaj artykuł Dodawanie i konfigurowanie rozszerzenia.

Wspólne właściwości rozszerzenia

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 rozszerzenia

Określ wartości tych właściwości konfiguracji specyficznych dla tego rozszerzenia.

Właściwość Opis Domyślny 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.
credentials Gdy wpiszesz te dane w konsoli Apigee Edge, będą to treści pliku klucza konta usługi . Gdy wysyłasz je za pomocą interfejsu Management API, jest to wartość zakodowana w formacie base64 wygenerowana z pliku klucza konta usługi. Brak. Tak.