Gmail REST api批量支持获取消息 [英] Gmail REST api batch support for getting messages

查看:109
本文介绍了Gmail REST api批量支持获取消息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们需要在我们的项目中从google客户端库切换到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。



我正在设置它就像截图一样 - >
邮递员



我在做什么错了?:)

解决方案

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

请求

  POST https://www.googleapis.com/batch 
Content-Type:multipart / mixed; border =foo_bar
授权:持票人{ACCESS_TOKEN}

--foo_bar
内容类型: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
日期:2016年2月11日星期四16:02:06 GMT
过期时间:2016年2月11日(星期四)16:02:06 GMT
Cache-Control:private,max -age = 0
Content-Length:2809

{
id:152d10540c21bd07,
threadId:152d1050d666d7ad,
labelIds:[
SENT,
INBOX,
重要
],
snippet:同样是好友。,.. 。
}

--batch_7Xp52oGIwpA_AAEAc7ERnGU
Content-Type:application / http

HTTP / 1.1 200 OK
ETag:A- DdBGA6g-wV4rIZCu5Hcm3JQpY / 7v2nqQFBDmEHVvEQoboiwSidilE
Content-Type:application / json; charset = UTF-8
日期:2016年2月11日星期四16:02:06 GMT
过期时间:2016年2月11日(星期四)16:02:06 GMT
Cache-Control:private,max -age = 0
Content-Length:1752

{
id:152d1050d666d7ad,
threadId:152d1050d666d7ad,
labelIds:[
SENT,
INBOX,
重要
],
snippet:很高兴认识你。, ...
}

--batch_7Xp52oGIwpA_AAEAc7ERnGU--

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



然后你只需要解析每个部分的JSON,就完成了。


We need to switch from google client library to Gmail REST api in our project, and I've encountered a problem with batch() because it is not available in REST api - you can only get list of ids of messages and then get each message one by one using it's id. If we use that gmail library everything seems to be clear. We create a batch object and then queue each GET request inside of it. We don't have to care how it's implemented inside. At the moment I'm trying to do some POC and I'm testing these suggestions https://developers.google.com/gmail/api/guides/batch with Postman but with no luck..

I'm getting 400 bad request. How should a proper request body look like in Postman (or other application)? The next step will be implementing multipart request in Java and sending POST using RestTemplate but I need to present some POC in Postman first.

I'm setting it like on this screenshot -> Postman

What am I doing wrong?:)

解决方案

You are close. Here is a working example:

Request

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--

Response

--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--

You don't have to specify the host in each part of the batch, and giving the access token in the Authorization header is enough. You don't have to specify the Content-Length yourself, and don't forget to wrap you boundary string with ".

Then you just have to parse the JSON of each part and you are done.

这篇关于Gmail REST api批量支持获取消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆