Gmail REST api 批量获取消息的支持
Gmail REST api batch support for getting messages
我们需要在我们的项目中从 google 客户端库切换到 Gmail REST api,我遇到了 batch() 的问题,因为它在 REST [=22] 中不可用=] - 您只能获取消息 ID 列表,然后使用它的 ID 一条一条地获取每条消息。
如果我们使用那个 gmail 库,一切似乎都很清楚。我们创建一个批处理对象,然后在其中对每个 GET 请求进行排队。我们不必关心它在内部是如何实现的。
目前我正在尝试做一些 POC,我正在测试这些建议 https://developers.google.com/gmail/api/guides/batch
有 Postman 但没有运气..
我收到 400 个错误请求。
在 Postman(或其他应用程序)中,正确的请求体应该是什么样子的?
下一步将在 Java 中实现多部分请求并使用 RestTemplate 发送 POST 但我需要先在 Postman 中展示一些 POC。
我在这个屏幕截图上设置它 ->
Postman
我做错了什么?:)
你很接近。这是一个工作示例:
请求
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--
您不必在批处理的每个部分都指定主机,在授权 header 中提供访问令牌就足够了。您不必自己指定 Content-Length,并且不要忘记用 "
.
包裹边界字符串
然后你只需要解析每个部分的JSON就可以了。
- 您需要在 POST URL 和每个请求中包含
gmail/v1
。
- 不要忘记
Content-Type
header 边界附近的 "
。
查看原始批处理 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--
只是想说 Lucila 的答案现在是正确的 - 全局 (https://www.googleapis.com/batch
) 端点现已弃用,您必须向 request-specific 发出 post 请求端点(https://www.googleapis.com/batch/gmail/v1
用于 gmail,例如)。
有关其他上下文,请参阅 this link。
很抱歉为此做了一个新的回答,我没有足够的声誉来发表评论。
我们需要在我们的项目中从 google 客户端库切换到 Gmail REST api,我遇到了 batch() 的问题,因为它在 REST [=22] 中不可用=] - 您只能获取消息 ID 列表,然后使用它的 ID 一条一条地获取每条消息。 如果我们使用那个 gmail 库,一切似乎都很清楚。我们创建一个批处理对象,然后在其中对每个 GET 请求进行排队。我们不必关心它在内部是如何实现的。 目前我正在尝试做一些 POC,我正在测试这些建议 https://developers.google.com/gmail/api/guides/batch 有 Postman 但没有运气..
我收到 400 个错误请求。 在 Postman(或其他应用程序)中,正确的请求体应该是什么样子的? 下一步将在 Java 中实现多部分请求并使用 RestTemplate 发送 POST 但我需要先在 Postman 中展示一些 POC。
我在这个屏幕截图上设置它 -> Postman
我做错了什么?:)
你很接近。这是一个工作示例:
请求
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--
您不必在批处理的每个部分都指定主机,在授权 header 中提供访问令牌就足够了。您不必自己指定 Content-Length,并且不要忘记用 "
.
然后你只需要解析每个部分的JSON就可以了。
- 您需要在 POST URL 和每个请求中包含
gmail/v1
。 - 不要忘记
Content-Type
header 边界附近的"
。
查看原始批处理 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--
只是想说 Lucila 的答案现在是正确的 - 全局 (https://www.googleapis.com/batch
) 端点现已弃用,您必须向 request-specific 发出 post 请求端点(https://www.googleapis.com/batch/gmail/v1
用于 gmail,例如)。
有关其他上下文,请参阅 this link。
很抱歉为此做了一个新的回答,我没有足够的声誉来发表评论。