Временные названия ресурсов
BatchJobService поддерживает временные названия ресурсов, на которые можно ссылаться в последующих операциях в рамках одного пакетного задания, в том числе в нескольких последовательных запросах AddBatchJobOperations, загруженных с помощью sequence_token. Это позволяет создать кампанию и связанные с ней группы объявлений, объявления и критерии в одном пакетном задании до того, как будут назначены идентификаторы на стороне сервера. В приведенных ниже общих правилах и примере под одним запросом понимается весь файл BatchJob, загруженный со всеми его частями AddBatchJobOperations.
Чтобы сослаться на только что созданный ресурс в том же запросе mutate или пакетном задании, укажите отрицательное целое число (например, -1 или -2, за исключением 0) в поле resource_name нового ресурса. Например, при создании кампании в пакетном запросе задайте для нее название ресурса customers/CUSTOMER_ID/campaigns/-1.
При создании группы объявлений в рамках более поздней операции в том же запросе укажите customers/CUSTOMER_ID/campaigns/-1 в качестве родительской кампании. API автоматически заменяет -1 на фактический идентификатор кампании, созданный при ее создании.
Ограничения на использование
При использовании временных названий ресурсов учитывайте следующие правила:
- Порядок имеет значение. Ссылаться на временное название ресурса можно только после того, как вы его определили. В списке операций зависимая операция (например, создание группы объявлений) должна идти после операции, которая создает ее родительский ресурс (например, создание кампании).
- Область действия одного запроса или пакетного задания. Временные названия ресурсов не сохраняются между отдельными заданиями или запросами на изменение. Чтобы сослаться на ресурс, созданный в предыдущем задании или запросе на изменение, используйте его фактическое системное имя.
- Глобальная уникальность. В рамках одного задания или запроса mutate каждое временное название ресурса должно использовать уникальное отрицательное целое число для всех типов ресурсов.
Например, нельзя назначить
-1одновременно кампании и группе объявлений в одном запросе. Повторное использование временного идентификатора в одном запросе или пакетном задании приводит к ошибкеNewResourceCreationError.DUPLICATE_TEMP_IDS.
Пример полезной нагрузки
Предположим, вы хотите добавить кампанию, группу объявлений и объявление в одном запросе API или пакетном задании. Вы можете структурировать массив mutateOperations в полезной нагрузке запроса GoogleAdsService.Mutate или BatchJobService.AddBatchJobOperations, как показано в следующем примере REST JSON (другие обязательные поля ресурсов опущены для краткости):
{
"mutateOperations": [
{
"campaignOperation": {
"create": {
"resourceName": "customers/CUSTOMER_ID/campaigns/-1"
}
}
},
{
"adGroupOperation": {
"create": {
"resourceName": "customers/CUSTOMER_ID/adGroups/-2",
"campaign": "customers/CUSTOMER_ID/campaigns/-1"
}
}
},
{
"adGroupAdOperation": {
"create": {
"adGroup": "customers/CUSTOMER_ID/adGroups/-2"
}
}
}
]
}
В этом примере показаны следующие ключевые детали:
- Группа объявлений использует новый временный идентификатор (
-2), поскольку идентификатор-1уже назначен кампании. - Группа объявлений ссылается на
customers/CUSTOMER_ID/campaigns/-1, чтобы связать себя с кампанией, созданной в предыдущей операции. - В
adGroupAdOperationесть ссылка наcustomers/CUSTOMER_ID/adGroups/-2, но нет ссылки наresourceName, поскольку в запросе нет операций, связанных с новым объявлением.
Обработка ошибок в пакетных заданиях
Поскольку стандартные операции в пакетном задании выполняются с включенным параметром partial failure (кроме атомарных подпакетов), если родительский ресурс с временным идентификатором не проходит проверку, все зависимые дочерние операции, ссылающиеся на этот временный идентификатор, завершаются с ошибкой NewResourceCreationError.TEMP_ID_RESOURCE_HAD_ERRORS.
Если вы используете один и тот же отрицательный идентификатор в нескольких операциях create в рамках одного пакетного задания, возвращается ошибка NewResourceCreationError.DUPLICATE_TEMP_IDS. Временные идентификаторы действительны только при создании ресурсов (create) или ссылках на недавно созданные родительские ресурсы. Например, если передать отрицательный временный идентификатор в AdGroupCriterionOperation.remove при вызове AddBatchJobOperations, будет возвращен RequestError.RESOURCE_NAME_MALFORMED.