如何使用Firestore的REST API“监听”端点进行实时更新?

时间:2019-12-05 07:40:50

标签: firebase rest google-cloud-platform google-cloud-firestore grpc

几个小时以来,我一直在试图找出如何将Firestores gRPC“监听”请求映射到HTTP的方法,但是它似乎不适用于该特定端点。 我查看了以下资源以寻求帮助: https://firebase.google.com/docs/firestore/reference/rpc/google.firestore.v1beta1#listenrequest https://firestore.googleapis.com/ $ discovery / rest?version = v1beta1(搜索“:听”) https://github.com/googleapis/googleapis/blob/master/google/api/http.proto

我已经使用了后者的“指南”来映射其他端点,并且它起作用了,但是“监听”端点似乎并未遵循这些规则进行映射。 我还调查了官方SDK的请求,它似乎遵循了不同的协议。 官方SDK发出的第一个请求如下所示:

:authority: firestore.googleapis.com
:method: POST
:path: /google.firestore.v1.Firestore/Listen/channel?database={database}&VER=8&RID={rid}&X-HTTP-Session-Id=gsessionid&%24httpHeaders=X-Goog-Api-Client%3Agl-js%2F%20fire%2F7.5.0%0D%0A&zx=w2nvzzg08rob&t=1

[Parsed form data]
count: 1
ofs: 0
req0___data__: {
  "database":"projects/{projectId}/databases/(default)",
    "addTarget":{
    "documents":
      {
        "documents": ["projects/{projectId}/databases/(default)/documents/public/AKoaGL7w6GxCCF97IVIP"]
      },
    "targetId":2
  }
}

响应正文如下:

51
[[0,["c","lyAOqbbp6su3UYBQD2dvQg","",8,12,30000]]]

我不知道请求中所有的查询参数是什么,以及如何使用响应。 我知道在收到此请求后,SDK开始使用响应中的一些数据进行轮询,但不知道其工作原理。

到目前为止,我的尝试看起来像这样,但是我一直遇到错误(如下所示):

POST https://firestore.googleapis.com/v1/projects/{projectID}/databases/(default)/documents:listen

[json body]
{
    "addTarget": {
        "documents": [
            "projects/sandbox-6b679/databases/(default)/documents/public/AKoaGL7w6GxCCF97IVIP"
        ]
    }
}

但是我得到的答复是:

[
  {
    "error": {
      "code": 400,
      "message": "Invalid value (Object), ",
      "status": "INVALID_ARGUMENT",
      "details": [
        {
          "@type": "type.googleapis.com/google.rpc.BadRequest",
          "fieldViolations": [
            {
              "description": "Invalid value (Object), "
            }
          ]
        }
      ]
    }
  }
]

我假设此功能尚未移植到REST API,在这种情况下,我的问题是,如何在不使用gRPC的情况下使用官方SDK使用的端点?

0 个答案:

没有答案