Расширение Google Cloud Firestore

Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X.
Информация

Версия: 2.0.1

Создание, чтение и удаление данных в базе данных Cloud Firestore.

В нем приведена информация о том, как настроить и использовать это расширение. Прежде чем использовать это расширение в прокси-сервере API, необходимо:

  1. Создайте проект Firebase в консоли Firebase, где хранятся ваши данные.

  2. Создайте ключ для сервисного аккаунта.

  3. Используйте содержимое полученного JSON-файла ключа при добавлении и настройке расширения, следуя инструкциям по настройке.

О Cloud Firestore

Cloud Firestore хранит данные в документах, которые хранятся в коллекциях. Cloud Firestore создает коллекции и документы неявно при первом добавлении данных в документ. Вам не нужно создавать коллекции или документы.

Дополнительную информацию о Cloud Firestore можно найти в разделе Начало работы с Firestore документации по Cloud Firestore.

Примеры

В примерах ниже показано, как настроить поддержку действий расширения Cloud Firestore с помощью правила ExtensionCallout.

Добавить данные

Следующие правила 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 получает значение документа freewill@example.com из коллекции users. Здесь атрибуту parsed элемента <Output> присвоено значение 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 удаляет документ lizzie@example.com из коллекции users.

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

Запрашивать данные

В этом примере правило "Уточнение – звонок" запрашивает коллекцию cities. Результаты запроса фильтруются по полям state и population. Здесь атрибуту parsed элемента <Output> присвоено значение 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

Удаляет один документ из коллекции.

Параметры запроса

<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 этого действия задает массив массивов (или пустой массив, если условия фильтрации отсутствуют). Каждый внутренний массив задает условие фильтра. Несколько внутренних массивов представляют собой несколько условий, объединенных оператором И.

Каждый элемент во внутреннем массиве условий представляет собой часть условия. Массив условий всегда содержит три элемента:

  • Левый элемент, указывающий на поле коллекции.
  • Средний элемент, в котором указан оператор.
  • Элемент справа, указывающий значение поля коллекции.

В следующем примере указаны два массива условий для фильтрации на основе полей state и population коллекции:

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

Во время выполнения это действие интерпретируется как запрос, например:

Выбрать все города, где state = 'CA' и population < 1000000

Запрос, включающий несколько условий, должен поддерживаться в Cloud Firestore составным индексом. Подробнее о типах индексов в Cloud Firestore…

Параметры запроса

Синтаксис

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

Пример

В этом примере параметр queryArray задает два условия, по которым нужно отфильтровать коллекцию cities, указанную в параметре colName.

Запрос, включающий несколько условий, должен поддерживаться в Cloud Firestore составным индексом. Подробнее о типах индексов в Cloud Firestore…

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

Во время выполнения это действие интерпретируется как запрос, например:

Выбрать все города, где state = 'CA' и population < 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. Строка Нет. Да.
делал. Данные, которые нужно скопировать в docName. Это должен быть действительный объект JSON. Массивы не поддерживаются. Объект Нет. Нет.

Ответ

Нет.

Справочник по конфигурации

При настройке и развертывании этого расширения для использования в прокси API следуйте приведенным ниже инструкциям. Инструкции по настройке расширения с помощью консоли Apigee приведены в разделе Добавление и настройка расширения.

Общие свойства расширений

Следующие свойства присутствуют для каждого расширения.

Свойство Описание По умолчанию Необходимый
name Имя, которое вы даете этой конфигурации расширения. Никто Да
packageName Имя пакета расширения, предоставленное Apigee Edge. Никто Да
version Номер версии пакета расширения, из которого вы настраиваете расширение. Никто Да
configuration Значение конфигурации, относящееся к добавляемому расширению. См. Свойства этого пакета расширения. Никто Да

Свойства пакета расширения

Свойство Описание По умолчанию Обязательно
firestoreDB URL базы данных Cloud Firestore, которую расширение должно использовать при отправке запросов. URL обычно имеет форму https://DATABASE_NAME.firebaseio.com. Нет. Да.
учетные данные При вводе в консоли Apigee Edge это содержимое файла ключа, созданного в соответствии с инструкциями Firebase. При отправке с помощью API управления это значение, закодированное в формате Base64, которое генерируется на основе файла ключа. Нет. Да.