Gmail REST api batch support for getting messages

后端 未结 3 1640
深忆病人
深忆病人 2020-12-11 19:11

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

相关标签:
3条回答
  • 2020-12-11 19:37
    • You need to include gmail/v1 on the POST URL and on each request.
    • Don't forget about the " around your boundary on the Content-Type header.

    See original batch gmail requests documentation: https://developers.google.com/gmail/api/guides/batch

    The following worked for me:

    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

    0 讨论(0)
  • 2020-12-11 19:49

    Just wanted to say that Lucila's answer is now the correct one - the global (https://www.googleapis.com/batch) endpoint is now deprecated, and you must make a post request to your request-specific endpoint (https://www.googleapis.com/batch/gmail/v1 for gmail, for instance).

    See this link for additional context.

    Apologies for making a new answer for this, I don't have enough reputation to leave a comment.

    0 讨论(0)
  • 2020-12-11 19:52

    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.

    0 讨论(0)
提交回复
热议问题