几个小时以来,我一直在试图找出如何将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使用的端点?