спорадическая ошибка переименования ярлыка с известной проблемой Gmail REST API? обходные пути?

Мы запускаем сервис, который синхронизируется с Gmail с помощью REST API. С прошлой среды некоторые из наших (неизменных) тестов Gmail начали периодически давать сбой. Причина кажется на стороне Gmail REST API.

Один неудачный тест включает создание метки, создание сообщения, пометку сообщения меткой и последующее переименование метки. Когда тесты не проходят, запрос POST на изменение названия ярлыка возвращает ошибку 404. GET на этом ярлыке или в списке ярлыков до или после первого 404 успешно вернет соответствующий ярлык. Повторная попытка POST продолжает приводить к ошибке 404 в течение как минимум 30 секунд, даже с 5-секундным перерывом между попытками. Добавление 15-секундной задержки перед попыткой POST не помогает.

Это известная проблема? Если да, то есть ли какие-нибудь обходные пути? Что мы можем предложить, чтобы помочь диагностировать и исправить это? Мы используем клиентскую библиотеку Google-HTTP-Java-Client / 1.22.0.

Вот запрос / ответ от успешного POST:

POST https://www.googleapis.com/gmail/v1/users/me/labels/Label_4311
Accept-Encoding: gzip
Authorization: <Not Logged>
User-Agent: pexlabs Google-API-Java-Client Google-HTTP-Java-Client/1.22.0 (gzip)
x-http-method-override: PATCH
Content-Type: application/json; charset=UTF-8
Content-Encoding: gzip
Content-Length: 38

{"name":"mystery"}


HTTP/1.1 204 No Content
Alt-Svc: quic=":443"; ma=2592000; v="36,35,34,33,32"
Server: GSE
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
ETag: "SJIjOPuAzi7meWvLIr4rJgaI0K4/vyGp6PvFo4RvsFtPoIWeCReyIC8"
Vary: X-Origin
Vary: Origin
Expires: Mon, 01 Jan 1990 00:00:00 GMT
Pragma: no-cache
Date: Tue, 20 Sep 2016 15:30:51 GMT

Вот запрос / ответ от неудачного POST:

POST https://www.googleapis.com/gmail/v1/users/me/labels/Label_4317
Accept-Encoding: gzip
Authorization: <Not Logged>
User-Agent: pexlabs Google-API-Java-Client Google-HTTP-Java-Client/1.22.0 (gzip)
x-http-method-override: PATCH
Content-Type: application/json; charset=UTF-8
Content-Encoding: gzip
Content-Length: 38

{"name":"mystery"}


HTTP/1.1 404 Not Found
X-Frame-Options: SAMEORIGIN
Alt-Svc: quic=":443"; ma=2592000; v="36,35,34,33,32"
Server: ESF
X-XSS-Protection: 1; mode=block
Content-Length: 1596
Date: Tue, 20 Sep 2016 15:44:08 GMT
Content-Type: text/html; charset=UTF-8

<!DOCTYPE html>
<html lang=en>
  <meta charset=utf-8>
  <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
  <title>Error 404 (Not Found)!!1</title>
  <style>
    *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}
  </style>
  <a href=//www.google.com/><span id=logo aria-label=Google></span></a>
  <p><b>404.</b> <ins>That’s an error.</ins>
  <p>The requested URL <code>/gmail/v1/users/me/labels/Label_4317</code> was not found on this server.  <ins>That’s all we know.</ins>

Если посмотреть на несколько запусков, значение заголовка ответа Server различается между успешными и неудачными (хотя это может быть сделано намеренно).


person dkarp    schedule 20.09.2016    source источник


Ответы (1)


Это очень своеобразная ошибка. Перешивка этикеток вроде нарушена. Я тоже получаю Error 404 (Not Found)!!1. Что, черт возьми ?!

А пока вы можете просто получить данные метки, а затем обновить поля, которые можно изменить, но просто изменив имя по своему вкусу:

Запрос 1

GET https://www.googleapis.com/gmail/v1/users/me/labels/Label_203?access_token={access_token}

Ответ 1

{
 "id": "Label_203",
 "name": "test1234",
 "messageListVisibility": "show",
 "labelListVisibility": "labelShow",
 "type": "user",
 "messagesTotal": 0,
 "messagesUnread": 0,
 "threadsTotal": 0,
 "threadsUnread": 0
}

Запрос 2

PUT https://www.googleapis.com/gmail/v1/users/me/labels/Label_203?access_token={access_token}

{
 "id": "Label_203",
 "labelListVisibility": "labelShow",
 "messageListVisibility": "show",
 "name": "test12345"
}

Ответ 2

{
 "id": "Label_203",
 "name": "test12345",
 "messageListVisibility": "show",
 "labelListVisibility": "labelShow"
}

Обновлять

API Explorer не работает по какой-то странной причине. Однако, если вы измените в своем запросе с POST на PATCH, он будет работать:

Запрос

PATCH https://www.googleapis.com/gmail/v1/users/me/labels/Label_203?access_token={access_token}

{
  "name": "wow123"
}

Ответ

{
  "id": "Label_203",
  "name": "wow123",
  "messageListVisibility": "show",
  "labelListVisibility": "labelShow",
  "type": "user",
  "messagesTotal": 0,
  "messagesUnread": 0,
  "threadsTotal": 0,
  "threadsUnread": 0
}
person Tholle    schedule 20.09.2016