获取邮件的Gmail REST api批量支持

dun*_*e76 4 gmail gmail-api

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

我收到了400个不好的请求.如何在Postman(或其他应用程序)中使用正确的请求主体?下一步将使用Java实现多部分请求并使用RestTemplate发送POST,但我需要首先在Postman中提供一些POC.

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

我究竟做错了什么?:)

Tho*_*lle 8

你很亲密 这是一个工作示例:

请求

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--
Run Code Online (Sandbox Code Playgroud)

响应

--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--
Run Code Online (Sandbox Code Playgroud)

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

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


Utk*_*lal 6

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

请参阅此链接了解更多上下文。

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


Luc*_*ila 5

  • 您需要包含gmail/v1在 POST URL 和每个请求中。
  • 不要忘记标题"上的边界周围Content-Type

请参阅原始批处理 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--
Run Code Online (Sandbox Code Playgroud)

使用 Postman 创建请求 - 正文截图

使用 Postman 创建请求 - 标题屏幕截图