Apigee Edge のドキュメントを表示しています。
  Apigee X のドキュメントに移動。 情報
バージョン 1.4.2
Cloud Spanner データベースで挿入、クエリ、更新操作を行います。
ここでは、この拡張機能の構成と使用に関するリファレンスを提供します。ExtensionCallout ポリシーで API プロキシ経由で拡張機能を使用する前に、次のことを行う必要があります。
インスタンスの作成と管理の説明に従って Cloud Spanner インスタンスを作成し、データベースを作成します。
インスタンスとデータベースを作成したら、拡張機能を表す GCP サービス アカウントにデータベースにアクセスするための権限を付与します。使用するロールの詳細については、Cloud Spanner のロールをご覧ください。Cloud Spanner のアクセス制御の詳細については、IAM ロールの適用と Cloud Spanner のアクセス制御をご覧ください。
サービス アカウントに目的のデータベースへのアクセスレベルに対するアクセス権限がある場合、GCP Console でサービス アカウントキーを作成します。この拡張機能を構成するときに、生成されたキー JSON ファイルのコンテンツを使用します。
拡張機能の追加と構成を行うときに、構成リファレンスを使用して、生成されたキーの JSON ファイルのコンテンツを使用します。
Cloud Spanner について
Cloud Spanner は、高可用性、強整合性、トランザクションの読み取りと書き込みを必要とするリレーショナル、構造化データと半構造化データに役立つリレーショナル データベース サービスです。
Cloud Spanner を使い始めたばかりの場合は、Cloud Spanner ドキュメントのクイックスタートをご覧ください。
サンプル
次の例は、ExtensionCallout ポリシーを使用して Cloud Spanner 拡張機能アクションのサポートを構成する方法を示しています。
データを追加
次の例では、拡張機能の insert アクションによってユーザー テーブルに新しいユーザーが追加されます。
<?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>
データを取得する
この例では、クエリは user テーブルからユーザー名とメールアドレスの値を取得します。
まず、AssignMessage ポリシーはクエリの WHERE 句で使用する postal.code.value 変数を割り当てます。以下に例を示します。実際のポリシーでは、クライアント リクエストのパラメータに基づいて値を設定するでしょう。
<?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>
次の ExtensionCallout ポリシーは、WHERE 句の 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>
次の AssignMessage ポリシーは、spanner.userdata.retrieved 変数に格納されている拡張機能のレスポンスを、クライアントに返すレスポンスとして使用します。
<?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>
この例では、レスポンス データが次のような JSON として返されます。
{
  "rows": [
    {
      "username": "freewill444",
      "email": "freewill@example.com"
    }
  ]
}
データの更新
この例では、<Input> 要素に username(テーブルの主キー)と 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>
操作
挿入
指定した行をデータベースに挿入します。
構文
<Action>insert</Action>
<Input><![CDATA[{
  "tableName" : "table-to-insert-into",
  "rows" : "rows-to-insert"
}]]></Input>
例
次の例では、拡張機能の insert アクションによってユーザー テーブルに新しいユーザーが追加されます。1 行が追加されています。
<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>
リクエスト パラメータ
| パラメータ | 説明 | 型 | デフォルト | 必須 | 
|---|---|---|---|---|
| tableName | データベースで行を挿入するテーブル | 文字列 | なし。 | はい。 | 
| 行 | rows JSON オブジェクトの配列として表される、挿入する行。 | 
配列 | なし。 | はい。 | 
レスポンス
なし。
querySQL
指定したパラメータを含む SQL ステートメントを使用して、データベースにクエリを実行します。パラメータは SQL ステートメントで @ で始まる名前で指定します。パラメータ値は、このアクションの params パラメータで指定します。
Cloud Spanner のクエリ構文の詳細については、クエリ構文をご覧ください。
構文
<Action>querySQL</Action>
<Input><![CDATA[{
  "sql" : "sql-query-statement",
  "params" : {
    "param1" : "columnValue"
  }
}]]></Input>
例
この例では、クエリは user テーブルから username 列と email 列の値を取得します。SQL ステートメントは、フロー変数 postal.code.value から設定される postalCode パラメータを指定します。
<Action>querySQL</Action>
<Input><![CDATA[{
  "sql" : "SELECT username, email FROM user WHERE postalCode = @postalCode",
  "params" : {
    "postalCode" : "{postal.code.value}"
  }
}]]></Input>
リクエスト パラメータ
| パラメータ | 説明 | 型 | デフォルト | 必須 | 
|---|---|---|---|---|
| sql | 実行する SQL クエリ。先頭に @ が付いたパラメータ名でパラメータを指定します。これらのパラメータ名は、このアクションの params パラメータのキーに対応している必要があります。 | 
文字列 | なし。 | はい。 | 
| params | キーと値が、SQL クエリで使用されるパラメータ名と値になるオブジェクト。複数のパラメータを設定できます。 | オブジェクト | なし。 | いいえ。 | 
レスポンス
クエリによって返される、列名と値のペアの配列を含む rows オブジェクト。次に例を示します。
{
  "rows": [
    {
      "username": "freewill444",
      "email": "freewill@example.com"
    }
  ]
}
update
指定されたデータでデータベース内の行を更新します。
構文
<Input><![CDATA[{
  "tableName" : "table-with-rows-to-update",
  "rows" : "rows-to-update"
}]]></Input>
例
この例では、username が Liz456 のユーザーのメールアドレスが新しい値で更新されます。1 行が更新されています。
<Action>update</Action>
<Input><![CDATA[{
  "tableName" : "user",
  "rows": [{
      "username":"Liz456",
      "email":"lizzard@example.com"
  }]
}]]></Input>
リクエスト パラメータ
| パラメータ | 説明 | 型 | デフォルト | 必須 | 
|---|---|---|---|---|
| tableName | データベースで行を更新するテーブル | 文字列 | なし。 | はい。 | 
| 行 | 更新する行データの配列。配列の各エンティティには、更新する行の一意の ID(主キーなど)が含まれます。 | 配列 | なし。 | はい。 | 
レスポンス
なし。
構成リファレンス
この拡張機能を API プロキシで使用するように構成してデプロイする場合は、以下のプロパティを使用します。Apigee Console で拡張機能を構成する手順については、拡張機能の追加と構成をご覧ください。
拡張機能の共通プロパティ
すべての拡張機能には次のプロパティがあります。
| プロパティ | 説明 | デフォルト | 必須 | 
|---|---|---|---|
name | 
この拡張機能に付ける名前。 | なし | ○ | 
packageName | 
Apigee Edge から提供された拡張機能パッケージの名前。 | なし | ○ | 
version | 
拡張機能を構成する拡張機能パッケージのバージョン番号。 | なし | ○ | 
configuration | 
追加する拡張機能に固有の構成値。この拡張機能パッケージのプロパティをご覧ください。 | なし | ○ | 
この拡張機能パッケージのプロパティ
この拡張機能に固有の以下の構成プロパティに値を指定します。
| プロパティ | 説明 | デフォルト | 必須 | 
|---|---|---|---|
| projectId | データベースを含む GCP プロジェクトの ID | なし。 | はい。 | 
| instanceId | GCP プロジェクトの Cloud Spanner インスタンスの ID | なし。 | はい。 | 
| databaseId | Cloud Spanner データベースの ID。 | なし。 | はい。 | 
| credentials | Apigee Edge コンソール内で入力する場合は、サービス アカウント キーのファイルの内容です。Management API で設定する場合は、サービス アカウント キーファイルから生成された base64 エンコード値になります。 | なし。 | はい。 |