且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Firestore REST API 添加时间戳

更新时间:2023-09-08 15:08:04

对于 REST API,你应该使用 DocumentTransform -> FieldTransform -> setToServerValue -> 将 ServerValue 设置为 REQUEST_TIME.

似乎 DocumentTransform 只能用于 writecommit API 而不是 createDocument>补丁代码>.您可以使用 commit API 代替 patch.

https://firebase.google.com/docs/firestore/reference/rest/v1beta1/Write#ServerValue

I am trying to add Data to Cloud Firestore via the REST API (https://developers.google.com/apis-explorer/#search/firestore/firestore/v1beta1/firestore.projects.databases.documents.createDocument)

I am able to create a new Document with e.g. an Integer Value, so the connection and the syntax seems to be ok.

In the next step I want to add the server side timestamp to the document. Because I make the POST-Request from an ESP32 and the time is not available. The Request-Body looks like:

{  
   "fields":{  
      "myTime":{  
         "timestampValue":"SERVER_TIME_STAMP"
      }
   }
}

What do I have to write for SERVER_TIME_STAMP? For other languages there seems to be an Constant like firebase.database.ServerValue.TIMESTAMP that the server will replace with its current time. But the API does not accept values like thees.

The Error-msg is

"code": 400,
  "message": "Invalid value at 'document.fields[0].value.timestamp_value' (type.googleapis.com/google.protobuf.Timestamp), Field 'timestampValue', Illegal timestamp format; timestamps must end with 'Z' or have a valid timezone offset.",

For REST API, you should use DocumentTransform -> FieldTransform -> setToServerValue -> set ServerValue as REQUEST_TIME.

Seems like DocumentTransform is only available for use on write and commit API and not createDocument or patch. You can use commit API as a substitute of patch.

https://firebase.google.com/docs/firestore/reference/rest/v1beta1/Write#ServerValue