Временные имена ресурсов
BatchJobService поддерживает временные имена ресурсов, на которые можно ссылаться в последующих операциях в рамках одного и того же пакетного задания, в том числе в нескольких последовательных запросах AddBatchJobOperations загруженных с помощью sequence_token . Это позволяет создавать кампанию и зависимые от нее группы объявлений, объявления и критерии в рамках одного пакетного задания до присвоения идентификаторов на стороне сервера. В следующих общих правилах и примере один запрос ссылается на все BatchJob целиком во всех его загрузках AddBatchJobOperations .
Чтобы сослаться на вновь созданный ресурс в рамках того же запроса на изменение или пакетного задания, укажите отрицательный целочисленный идентификатор (например, -1 или -2 , за исключением 0 ) в поле resource_name нового ресурса. Например, при создании кампании в пакетном запросе задайте имя ресурса customers/CUSTOMER_ID/campaigns/-1 . При создании группы объявлений в последующей операции в рамках того же запроса укажите customers/CUSTOMER_ID/campaigns/-1 в качестве родительской кампании. API автоматически заменит -1 на фактический идентификатор кампании, сгенерированный при создании.
Ограничения использования
При использовании временных имен ресурсов следует учитывать следующие правила:
- Порядок имеет значение: вы можете ссылаться на имя временного ресурса только после того, как определите его. В списке операций зависимая операция (например, создание группы объявлений) должна располагаться после операции, которая создает родительский ресурс (например, создание кампании).
- Область действия — отдельный запрос или пакетное задание: временные имена ресурсов не сохраняются между отдельными заданиями или запросами на изменение. Для ссылки на ресурс, созданный в предыдущем задании или запросе на изменение, используйте его фактическое имя, сгенерированное системой.
- Глобальная уникальность: в рамках одного задания или запроса на изменение каждое имя временного ресурса должно использовать уникальное отрицательное целое число для всех типов ресурсов. Например, нельзя присвоить
-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отсутствует, поскольку ни одна последующая операция в запросе не ссылается на новое объявление.
Обработка ошибок в пакетных заданиях
Поскольку стандартные операции в пакетном задании выполняются с разрешенным частичным сбоем (за исключением атомарных подпакетов ), если родительский ресурс с временным идентификатором не проходит проверку, любые зависимые дочерние операции, ссылающиеся на этот временный идентификатор, завершаются с ошибкой NewResourceCreationError.TEMP_ID_RESOURCE_HAD_ERRORS . Повторное использование одного и того же отрицательного идентификатора в нескольких операциях create в рамках одного пакетного задания возвращает ошибку NewResourceCreationError.DUPLICATE_TEMP_IDS . Временные идентификаторы действительны только при создании ресурсов ( create ) или при ссылке на вновь созданные родительские ресурсы; например, передача отрицательного временного идентификатора в AdGroupCriterionOperation.remove при вызове AddBatchJobOperations возвращает RequestError.RESOURCE_NAME_MALFORMED .