Google Cloud Firestore 拡張機能

現在、Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメントをご確認ください
情報

バージョン: 1.4.1

Cloud Firestore データベースでデータの作成、読み取り、削除を行います。

ここでは、この拡張機能の構成と使用について説明します。API プロキシからこの拡張機能を使用する前に、次のことを行う必要があります。

  1. Firebase コンソールで、データを保存する Firebase プロジェクトを作成します。

  2. サービス アカウント キーを生成します

  3. 構成リファレンスを使用して拡張機能を追加および構成するときは、生成されたキー JSON ファイルの内容を使用します。

Cloud Firestore について

Cloud Firestore は、データをドキュメントに保存します。ドキュメントはコレクションに保存されます。ドキュメントに初めてデータを追加したときに、Cloud Firestore によってコレクションとドキュメントが暗黙的に作成されます。コレクションやドキュメントを明示的に作成する必要はありません。

Cloud Firestore の一般的な詳細については、Cloud Firestore ドキュメントの Firestore を使ってみるをご覧ください。

サンプル

次の例は、ExtensionCallout ポリシーを使用して Cloud Firestore 拡張機能アクションのサポートを構成する方法を示しています。

データを追加

次の ExtensionCallout ポリシーは、freewill@example.com というドキュメントを users コレクションに追加します。data プロパティは、新しいドキュメントのフィールドと値を指定します。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="true" enabled="true" name="Add-User-Data">
    <DisplayName>Add User Data</DisplayName>
    <Connector>my-cloud-firestore-extension</Connector>
    <Action>setDocument</Action>
    <Input><![CDATA[{
        "colName" : "users",
        "docName" : "freewill@example.com",
        "data" : {
            "firstName": "Will",
            "lastName": "Witman",
            "address": "270-8243 Tempor St.",
            "city": "Fort Worth",
            "region": "TX",
            "postalCode": "86519",
            "email": "freewill@example.com",
            "username": "freewill444"
        }
    }]]></Input>
</ConnectorCallout>

データの取得

この例では、ExtensionCallout ポリシーで、users コレクションから freewill@example.com ドキュメントの値を取得します。ここでは、<Output> 要素の parsed 属性が false に設定されているため、返される結果はオブジェクトに解析された JSON ではなく、文字列の JSON になります。詳細については、<Output> 要素のリファレンスをご覧ください。

<?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>straut-cloud-firestore-extension</Connector>
    <Action>getDocument</Action>
    <Input><![CDATA[{
        "colName" : "users",
        "docName" : "freewill@example.com"
    }]]></Input>
    <Output parsed="false">firestore.userdata.retrieved</Output>
</ConnectorCallout>

次の Assign Message ポリシーは、拡張機能のレスポンスを格納する変数の値を使用して、レスポンス ペイロードを割り当てます。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage name="CopyUserDataToResponse">
    <DisplayName>Copy User Data To Response</DisplayName>
    <AssignTo type="response" createNew="false"/>
    <Set>
        <Payload contentType="application/json">{firestore.userdata.retrieved}</Payload>
    </Set>
</AssignMessage>

データを削除する

この例では、ExtensionCallout ポリシーで、users コレクションから lizzie@example.com ドキュメントを削除します。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="true" enabled="true" name="Delete-User-Data">
    <DisplayName>Delete User Data</DisplayName>
    <Connector>my-cloud-firestore-extension</Connector>
    <Action>deleteDocument</Action>
    <Input><![CDATA[{
        "colName" : "users",
        "docName" : "lizzie@example.com"
    }]]></Input>
</ConnectorCallout>

データのクエリ

この例では、ExtensionCallout ポリシーcities コレクションをクエリします。クエリ結果は state フィールドと population フィールドでフィルタされます。ここでは、<Output> 要素の parsed 属性が false に設定されているため、返される結果はオブジェクトに解析された JSON ではなく、文字列の JSON になります。詳細については、<Output> 要素のリファレンスをご覧ください。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="true" enabled="true" name="Query-City-Data">
    <DisplayName>Query City Data</DisplayName>
    <Connector>cloud-firestore-extension</Connector>
    <Action>query</Action>
    <Input><![CDATA[{
        "colName":"cities",
        "queryArray":[
          ["state", "==", "CA"],
          ["population","<",1000000]
        ]
    }]]></Input>
    <Output parsed="false">compound-query-output</Output>
</ConnectorCallout>

次の Assign Message ポリシーは、拡張機能のレスポンスを格納する変数の値を使用して、レスポンス ペイロードを割り当てます。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage name="CopyQueryResultsToResponse">
    <DisplayName>Copy Query Results To Response</DisplayName>
    <AssignTo type="response" createNew="false"/>
    <Set>
        <Payload contentType="application/json">{firestore.querydata.retrieved}</Payload>
    </Set>
</AssignMessage>

アクション

deleteDocument

コレクションから 1 つのドキュメントを削除します。

リクエスト パラメータ

<Input><![CDATA[{
  "colName" : "firestore-collection-name",
  "docName" : "firestore-document-name"
}]]></Input>
パラメータ 説明 種類 デフォルト 必須
colName 削除するドキュメントを含むコレクションの名前。 文字列 なし。 はい、できます。
docName 削除するドキュメントの名前。 文字列 なし。 はい、できます。

レスポンス

なし。

getDocument

単一のドキュメントの内容を取得します。

リクエスト パラメータ

<Input><![CDATA[{
  "colName" : "firestore-collection-name",
  "docName" : "firestore-document-name"
}]]></Input>
パラメータ 説明 種類 デフォルト 必須
colName ドキュメントを取得するコレクションの名前。 文字列 なし。 はい、できます。
docName 取得するドキュメントの名前。 文字列 なし。 はい、できます。

レスポンス

ドキュメントのコンテンツを含む JSON 形式のオブジェクト。

クエリ

フィルタを構成する条件を指定してコレクションをクエリします。

このアクションの queryArray パラメータには、配列の配列(またはフィルタ条件がない場合は空の配列)を指定します。各内部配列は、フィルタの条件を指定します。複数の内部配列は、AND 演算子で結合された複数の条件を表します。

内部の条件配列の各要素は、条件の一部を表します。条件配列には常に次の 3 つの要素があります。

  • コレクション フィールドを指定する左側の要素。
  • 演算子を指定する中央の要素。
  • コレクション フィールド値を指定する右要素。

次の例では、コレクションの state フィールドと population フィールドに基づいてフィルタリングする 2 つの条件配列を指定しています。

<Input><![CDATA[{
  "colName":"cities",
  "queryArray":[
    ["state", "==", "CA"],
    ["population","<",1000000]
  ]
}]]></Input>

このアクションは、実行時に次のようなクエリとして解釈されます。

state = 'CA' で、人口が 1000000 未満であるすべての都市を選択します。

Cloud Firestore では、複数の条件を含むクエリを複合インデックスによってサポートする必要があります。詳細については、Cloud Firestore のインデックスの種類をご覧ください。

リクエスト パラメータ

構文

<Input><![CDATA[{
  "colName" : "firestore-collection-name",
  "queryArray" : "queryArray": query-condition-array
}]]></Input>

この例では、queryArray パラメータに、colName パラメータで指定された cities コレクションをフィルタする 2 つの条件を指定します。

複数の条件を含むクエリは、Cloud Firestore で複合インデックスによってサポートされる必要があります。詳細については、Cloud Firestore のインデックスの種類をご覧ください。

<Input><![CDATA[{
  "colName":"cities",
  "queryArray":[["state", "==", "CA"],["population","<",1000000]]
}]]></Input>

このアクションは、実行時に次のようなクエリとして解釈されます。

state = 'CA' で、人口が 1000000 未満であるすべての都市を選択します。

パラメータ 説明 種類 デフォルト 必須
colName クエリを実行するコレクションの名前。 文字列 なし。 はい、できます。
queryArray フィルタの各部分を指定する条件配列の配列。条件を省略する(結果をフィルタリングしない)には、空の配列を指定します。 配列 なし。 はい、できます。

レスポンス

ドキュメントのコンテンツを含む JSON 形式のオブジェクト。

setDocument

ドキュメントを Cloud Firestore コレクションにコピーします。ドキュメントがすでにコレクションに存在する場合は、上書きされます。

リクエスト パラメータ

<Input><![CDATA[{
  "colName" : "firestore-collection-name",
  "docName" : "firestore-document-name",
  "data" : "data-to-copy"
}]]></Input>
パラメータ 説明 種類 デフォルト 必須
colName ドキュメントを作成するコレクションの名前。 文字列 なし。 はい、できます。
docName data のコピー先となるドキュメントの名前。 文字列 なし。 はい、できます。
data docName にコピーするデータ。これは有効な JSON オブジェクトである必要があります。配列はサポートされていません。 オブジェクト なし。 違います

レスポンス

なし。

構成リファレンス

API プロキシで使用するためにこの拡張機能を構成およびデプロイする場合は、以下を使用します。Apigee コンソールを使用して拡張機能を構成する手順については、拡張機能の追加と構成をご覧ください。

共通の拡張プロパティ

すべての拡張機能には次のプロパティがあります。

プロパティ 説明 デフォルト 必須
name この拡張機能に付ける名前。 なし
packageName Apigee Edge から提供された拡張機能パッケージの名前。 なし
version 拡張機能を構成する拡張機能パッケージのバージョン番号。 なし
configuration 追加する拡張機能に固有の構成値。この拡張機能パッケージのプロパティをご覧ください。 なし

この拡張機能パッケージのプロパティ

プロパティ 説明 デフォルト 必須
firestoreDB この拡張機能がリクエストを行うときに使用する Cloud Firestore データベースの URL。通常、この URL の形式は https://DATABASE_NAME.firebaseio.com です。 なし。 はい、できます。
証明書 Apigee Edge コンソールに入力した場合は、Firebase の手順で生成した鍵ファイルの内容です。Management API 経由で送信される場合は、キーファイルから生成された Base64 エンコード値になります。 なし。 はい、できます。