Я очень новичок в Google Firestore (также в Firebase). Я делаю простой POC, и мне немного тяжело взаимодействовать с FireStore. Что ж, чтение данных из Angular сработало так просто. Тем не менее, простые действия вроде добавления новых данных из curl или удаления коллекции из FireBase Cli заняли у меня целый день без прогресса. Просто чтобы подчеркнуть, насколько я тупица в FireStore, я использовал локально установленный ElasticSearch, поэтому я пробую аналогичные поведения/инструменты/функции, такие как публикация/создание полей из curl/postman (это не является частью этого вопроса, сравнивайте друг друга, просто выставляя свои ограничения), но я просто не могу двигаться вперед.
Вот как я успешно подключился из Angular:
firebaseConfig : {
apiKey: "*** removed ***",
authDomain: "transfer-status-realtime.firebaseapp.com",
databaseURL: "https://transfer-status-realtime.firebaseio.com",
projectId: "transfer-status-realtime",
storageBucket: "transfer-status-realtime.appspot.com",
messagingSenderId: "143612370857",
appId: "1:143612370857:web:a9d0b21e3a58520ed02eb8",
measurementId: "G-WT5C346D7T"
}
В основном я основывал свои предварительные предположения на вызовах отдыха и < href="https://stackoverflow.com/a/46776308/4148175">другой вопрос о переполнении стека
Моя последняя и недавняя попытка:
c:\temp>curl -X POST -H "Content-Type: application/json" -d'{"fields": {"status": "success"}}' "https://firestore.googleapis.com/v1beta1/projects/transfer-status-realtime/databases/(default)/documents/transfers?&key=***removed***"
curl: (3) [globbing] unmatched brace in column 1
curl: (3) [globbing] unmatched close brace/bracket in column 8
{
"error": {
"code": 400,
"message": "Invalid JSON payload received. Closing quote expected in string.\n\n^",
"status": "INVALID_ARGUMENT"
}
}
Итак, моя главная проблема: как добавить данные в FireStore из curl?
Если это имеет значение, вот моя консоль базы данных:
Другие попытки, вероятно, в неправильном направлении, которые я пробовал:
Согласно https://firebase.google.com/docs/database/rest/save-data, я могу сохранять поля с помощью PUT, поэтому я попытался написать команду curl, но застрял, потому что не знаю, что будет «fireblog» в моем случае?
curl -X PUT -d '{ "transfers": { "id": "idfromPut", "status": 1 } }' 'https://transfer-status-realtime.firebaseio.com/rest/saving-data/fireblog/users.json'
Я тоже пробовал, но что в моем случае будет message_list?
curl -X POST -d '{"status" : 2}' 'https://transfer-status-realtime.firebaseio.com/message_list.json'
*** отредактировано
c:\temp>curl -X POST -H "Content-Type: application/json" -d "{\"fields\": {\"status\": \"success\"}}" "https://firestore.googleapis.com/v1/projects/transfer-status-realtime/databases/(default)/documents/transfers?&key=*** removed ***"
{
"error": {
"code": 400,
"message": "Invalid value at 'document.fields[0].value' (type.googleapis.com/google.firestore.v1.Value), \"success\"",
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.rpc.BadRequest",
"fieldViolations": [
{
"field": "document.fields[0].value",
"description": "Invalid value at 'document.fields[0].value' (type.googleapis.com/google.firestore.v1.Value), \"success\""
}
]
}
]
}
}
Если это актуально, та же проблема с использованием внешнего файла json
C:\WSs\reactive-stack\reactive-front\src>curl -X POST -H "Content-Type: application/json" -d @load-data-tofirestore.json "https://firestore.googleapis.com/v1/projects/transfer-status-realtime/databases/(default)/documents/transfers?&key=***removed"
{
"error": {
"code": 400,
"message": "Invalid value at 'document.fields[0].value' (type.googleapis.com/google.firestore.v1.Value), \"success\"",
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.rpc.BadRequest",
"fieldViolations": [
{
"field": "document.fields[0].value",
"description": "Invalid value at 'document.fields[0].value' (type.googleapis.com/google.firestore.v1.Value), \"success\""
}
]
}
]
}
}
А вот файл json
{"fields": {"status": "success"}}
* РЕШЕНИЕ *
из url
C:\WSs\reactive-stack\reactive-front\src>curl -H "Content-Type: application/json" -X POST https://firestore.googleapis.com/v1/projects/transfer-status-realtime/databases/(default)/documents/transfers -d "{\"fields\": { \"status\": { \"stringValue\": \"outro status\" } }}"
{
"name": "projects/transfer-status-realtime/databases/(default)/documents/transfers/ddwHxjy7eQV3640pW0Xx",
"fields": {
"status": {
"stringValue": "outro status"
}
},
"createTime": "2020-04-06T16:21:16.453553Z",
"updateTime": "2020-04-06T16:21:16.453553Z"
}
из PowerShell
PS C:\Users> $body = @"
>> {
>> "fields": {
>> "status": {
>> "stringValue": "fracasso"
>> }
>> }
>> }
>> "@
>>
PS C:\Users\Cast> $params = @{
>> Uri = 'https://firestore.googleapis.com/v1/projects/transfer-status-realtime/databases/(default)/documents/transfers'
>> Method = 'POST'
>> Body = $body
>> ContentType = 'application/json'
>> }
>>
PS C:\Users\Cast> Invoke-RestMethod @params
name fields createTime
---- ------ ----------
projects/transfer-status-realtime/databases/(default)/documents/transfers/z4TB6gzcgXMRUGR8ecek @{status=} 2020-04-06...
PS C:\Users>
rsync
или что-то еще), вам нужно повторно запустить программу установки Cygwin. он не будет устанавливать все заново, он просто добавит запрошенные дополнительные пакеты - person hanshenrik   schedule 10.04.2020