Я программирую экспорт контактов из нашей базы данных в Google Контакты с помощью Google People API. Я программирую запросы по URL-адресу через Google Apps Script.
Код ниже - с использованием https://people.googleapis.com/v1/people:batchCreateContacts - работает от 13 до 15 отдельных запросов, но затем Google возвращает это сообщение об ошибке:
Превышена квота для метрики квоты «Критические запросы чтения (чтение контактов и профиля)» и ограничения «Критических запросов чтения (чтения контактов и профиля) в минуту на пользователя» службы people.googleapis.com для потребителя »project_number: *** '.
Для скорости отправляю запрос пакетами по 10 параллельных запросов.
У меня есть два вопроса по этой проблеме:
- Почему для создания контактов я бы использовал квоту, касающуюся запросов чтения?
- Учитывая приведенную ниже ссылку на изображение, почему отправка 2 пакетов по 10 одновременных запросов (точнее: от 13 до 15 отдельных запросов) в любом случае превысила этот квантовый предел? ограничение квоты в 90 запросов чтения на пользователя в минуту, как показано на console.cloud.google.com а>
Спасибо за любые разъяснения!
Дополнительная литература: https://developers.google.com/people/api/rest/v1/people/batchCreateContacts
let payloads = [];
let lengthPayloads;
let limitPayload = 200;
/*Break up contacts in payload limits*/
contacts.forEach(function (contact, index) /*contacts is an array of objects for the API*/
{
if(!(index%limitPayload))
{
lengthPayloads = payloads.push(
{
'readMask': "userDefined",
'sources': ["READ_SOURCE_TYPE_CONTACT"],
'contacts': []
}
);
}
payloads[lengthPayloads-1]['contacts'].push(contact);
}
);
Logger.log("which makes "+payloads.length+" payloads");
let parallelRequests = [];
let lengthParallelRequests;
let limitParallelRequest = 10;
/*Break up payloads in parallel request limits*/
payloads.forEach(function (payload, index)
{
if(!(index%limitParallelRequest))
lengthParallelRequests = parallelRequests.push([]);
parallelRequests[lengthParallelRequests-1].push(
{
'url': "https://people.googleapis.com/v1/people:batchCreateContacts",
'method': "post",
'contentType': "application/json",
'payload': JSON.stringify(payload),
'headers': { 'Authorization': "Bearer " + token }, /*token is a token of a single user*/
'muteHttpExceptions': true
}
);
}
);
Logger.log("which makes "+parallelRequests.length+" parallelrequests");
let responses;
parallelRequests.forEach(function (parallelRequest)
{
responses = UrlFetchApp.fetchAll(parallelRequest); /* error occurs here*/
responses = responses.map(function (response) { return JSON.parse(response.getContentText()); });
responses.forEach(function (response)
{
if(response.error)
{
Logger.log(JSON.stringify(response));
throw response;
}
else Logger.log("ok");
}
);
Вывод логов:
что составляет 22 полезной нагрузки
что делает 3 параллельных запроса
хорошо (15 раз)
(сообщение об ошибке)