Как я могу создать поле в Firestore с помощью вызовов REST - PullRequest
0 голосов
/ 06 августа 2020

Предположим, что идентификатор моего проекта - test-abcd , а веб-ключ - xyz . База данных находится в тестовом режиме.

У меня простая структура базы данных:

users | Paris | admin : "123456"

Я хотел бы добавить поле robin : "abc123" внутри Paris, поэтому результат будет

users | Paris | admin : "123456"
      |       | robin : "abc123"

Я пытаюсь выполнить ПАТЧ в ссылке

https://firestore.googleapis.com/v1/document.name=projects/test-abcd/databases/(default)/documents/users/Paris/robin/abc123?key=xyz

, но вместо поля создается коллекция и документ:

users | Paris | admin : "123456"
      |       |
      |       | robin            | abc123 |     

Что я делаю не так?

1 Ответ

1 голос
/ 06 августа 2020

Согласно уже упомянутой документации в патче HTTP-запроса вы должны добавить путь к документу в Firestore, маску обновления и ключ.

Поле, которое вы хотите добавить, должно быть в тело запроса. Например, когда вы используете curl для запроса, вам нужно добавить опцию --data с параметром:

--data '{"name":"","fields":{"robin":{"stringValue":"abc12345"}}}'

Забавно то, что, согласно моим тестам, name в теле имеет для включения, однако не имеет значения, какое это значение :), поэтому я оставил его пустым.

Я предлагаю использовать хороший инструмент, доступный в упомянутой документации. В правой части страницы есть функция «Попробовать этот API», которую вы можете развернуть, щелкнув квадратный значок ( прямая ссылка ), который помогает создать запрос в 3-х форматах (curl, HTTP и JS). Вам просто нужно указать детали, и команда запроса будет создана. Здесь вы можете легко протестировать созданные команды.

Я использовал его, и команда curl, работающая на моей стороне:

curl --request PATCH \
  'https://firestore.googleapis.com/v1/projects/my-test-project/databases/(default)/documents/users/Paris?updateMask.fieldPaths=robin&key=[YOUR_API_KEY]' \
  --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{"name":"","fields":{"robin":{"stringValue":"abc12345"}}}' \
  --compressed
...