【问题标题】:Gmail REST api batch support for getting messages获取消息的 Gmail REST api 批处理支持
【发布时间】:2023-03-18 06:47:02
【问题描述】:

我们需要在我们的项目中从谷歌客户端库切换到 Gmail REST api,我遇到了 batch() 的问题,因为它在 REST api 中不可用 - 你只能获取消息的 id 列表,然后使用它的ID一一获取每条消息。 如果我们使用那个 gmail 库,一切似乎都很清楚。我们创建一个批处理对象,然后在其中对每个 GET 请求进行排队。我们不必关心它是如何在内部实现的。 目前我正在尝试做一些 POC,我正在测试这些建议https://developers.google.com/gmail/api/guides/batch 有邮递员,但没有运气..

我收到了 400 个错误请求。 Postman(或其他应用程序)中正确的请求正文应该如何? 下一步将在 Java 中实现多部分请求并使用 RestTemplate 发送 POST,但我需要先在 Postman 中呈现一些 POC。

我在这个屏幕截图上设置它 -> Postman

我做错了什么?:)

【问题讨论】:

  • 你解决过这个问题吗?

标签: gmail gmail-api


【解决方案1】:

你很接近。这是一个工作示例:

请求

POST https://www.googleapis.com/batch
Content-Type: multipart/mixed; boundary="foo_bar"
Authorization: Bearer {ACCESS_TOKEN}

--foo_bar
Content-Type: application/http

GET /gmail/v1/users/me/messages/152d10540c21bd07

--foo_bar
Content-Type: application/http

GET /gmail/v1/users/me/messages/152d1050d666d7ad

--foo_bar--

回应

--batch_7Xp52oGIwpA_AAEAc7ERnGU
Content-Type: application/http

HTTP/1.1 200 OK
ETag: "A-DdBGA6g-wV4rIZCu5Hcm3JQpY/w2hzEg9kqXFH7AEJ-oSc-y10HNQ"
Content-Type: application/json; charset=UTF-8
Date: Thu, 11 Feb 2016 16:02:06 GMT
Expires: Thu, 11 Feb 2016 16:02:06 GMT
Cache-Control: private, max-age=0
Content-Length: 2809

{
 "id": "152d10540c21bd07",
 "threadId": "152d1050d666d7ad",
 "labelIds": [
  "SENT",
  "INBOX",
  "IMPORTANT"
 ],
 "snippet": "Likewise buddy.", ...
}

--batch_7Xp52oGIwpA_AAEAc7ERnGU
Content-Type: application/http

HTTP/1.1 200 OK
ETag: "A-DdBGA6g-wV4rIZCu5Hcm3JQpY/7v2nqQFBDmEHVvEQoboiwSidilE"
Content-Type: application/json; charset=UTF-8
Date: Thu, 11 Feb 2016 16:02:06 GMT
Expires: Thu, 11 Feb 2016 16:02:06 GMT
Cache-Control: private, max-age=0
Content-Length: 1752

{
 "id": "152d1050d666d7ad",
 "threadId": "152d1050d666d7ad",
 "labelIds": [
  "SENT",
  "INBOX",
  "IMPORTANT"
 ],
 "snippet": "Nice to meet you.", ...
}

--batch_7Xp52oGIwpA_AAEAc7ERnGU--

您不必在批处理的每个部分中指定主机,在 Authorization 标头中提供访问令牌就足够了。您不必自己指定 Content-Length,并且不要忘记用 " 包装边界字符串。

然后你只需要解析每个部分的JSON就可以了。

【讨论】:

【解决方案2】:
  • 您需要在 POST URL 和每个请求中包含 gmail/v1
  • 不要忘记" 标头上边界周围的"

查看原始批量 gmail 请求文档:https://developers.google.com/gmail/api/guides/batch

以下内容对我有用:

POST /batch/gmail/v1 HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer {YOUR_ACCESS_TOKEN}
Content-Type: multipart/mixed; boundary="foo_bar"

--foo_bar
Content-Type: application/http

GET /gmail/v1/users/me/messages/1732ebdcb9b8cccf
--foo_bar
Content-Type: application/http

GET /gmail/v1/users/me/messages/1732ecadae4907e2

--foo_bar--

Creating request with Postman - body screenshot

Creating request with Postman - headers screenshot

【讨论】:

  • 谢谢,您的回答正是我想要的!它是最新的,使用 API 的非弃用版本。
【解决方案3】:

只想说 Lucila 的答案现在是正确的 - 全局 (https://www.googleapis.com/batch) 端点现已弃用,您必须向特定于请求的端点(例如 gmail 的https://www.googleapis.com/batch/gmail/v1)发出发布请求)。

请参阅this link 了解更多上下文。

很抱歉为此提出新的答案,我没有足够的声誉来发表评论。

【讨论】:

    猜你喜欢
    • 2020-02-24
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 2016-03-18
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    相关资源
    最近更新 更多