Merchant API – это более надежный и интуитивно понятный способ управления данными о товарах. Главное изменение – разделение данных о товарах на два отдельных ресурса: ProductInput для отправки данных и Product для просмотра окончательной обработанной версии, включая статус товара и проблемы. Новая структура обеспечивает более предсказуемый и прозрачный процесс.
В этом руководстве описаны основные различия, которые помогут вам перенести интеграцию из Content API for Shopping. Подробные инструкции по использованию новых функций можно найти в статье Управление товарами.
Основные различия
Ниже перечислены наиболее значительные изменения в управлении товарами в Merchant API по сравнению с Content API for Shopping.
Отдельные ресурсы для исходных и обработанных данных. В Merchant API управление товарами разделено на два ресурса. Ресурс
ProductInputпозволяет добавлять, обновлять и удалять данные о товарах. РесурсProductдоступен только для чтения. Он позволяет посмотреть, как будет выглядеть товар после того, как Google обработает ваши данные, применит правила и объединит информацию из дополнительных источников.Кодировка для названий товаров. Вы можете использовать кодировку base64url без заполнения (RFC 4648, раздел 5) для полей
ProductInput.nameиProduct.name. Если в названии товара есть символы, используемые Merchant API или зарезервированные для URL, кодирование обязательно. Например, названия товаров нужно кодировать, если они содержат следующие символы:% . + / : ~ , ( * ! ) & ? = @ # $Статус интегрированного продукта. Сервис
productstatusesудален. Проблемы с проверкой товаров и статусы целевых сервисов теперь напрямую включаются в ресурсProductв полеproductStatus, что упрощает получение данных.Предсказуемое обновление товаров. Новый метод
productInputs.patchпозволяет напрямую изменять определенные входные данные о товарах. Это значительное улучшение по сравнению с Content API for Shopping, где обновления могли быть неожиданно перезаписаны другими загрузками фидов. В Merchant API обновление сохраняется до тех пор, пока данные о товаре не будут изменены или удалены. Обновления товаров применяются к ресурсуProductInput, а не к обработанному ресурсуProduct.Выбор источника данных для более эффективного управления данными. Для всех операций записи
productInputsтеперь требуется параметр запросаdataSource, который явно указывает, какой источник данных вы изменяете. Это особенно полезно, если у вас есть несколько источников данных.Новые идентификаторы ресурсов. Теперь товары идентифицируются по ресурсу RESTful
name, а не по полюid. Формат:accounts/{account}/products/{product}.Нет пользовательских пакетов. Метод
custombatchбольше не доступен. Чтобы отправить несколько запросов в одном HTTP-вызове, используйте асинхронные запросы или пакетную обработку HTTP.
Рекомендации по работе с источниками данных во время переноса
Прежде чем переносить источники данных, настоятельно рекомендуем выбрать стратегию работы с ними.
Чтобы перенос прошел без проблем и вы не столкнулись с такими проблемами, как кража предложений, следуйте этим рекомендациям:
Заполните базу данных. Вместо того чтобы вызывать
dataSources.listперед каждой операцией с товаром, настоятельно рекомендуем выполнить однократное заполнение локальной базы данных. Добавьте полеdataSourceв каждую запись о товаре, чтобы указывать правильный идентификатор прямо в запросах.Объединяйте и используйте источники данных для любых ярлыков и языков. Merchant API позволяет создавать источники данных без указания ярлыка и языка, а значит, вы можете добавлять товары с любыми ярлыками и языками источников данных. Рекомендуем использовать один источник данных для всех ярлыков и языков.
Защитите свои товары. Если вы используете правила преобразования источников данных, вызовите
products.get, чтобы найти точный идентификаторdataSource, связанный с товаром, прежде чем обновлять или удалять его. Это позволяет убедиться, что вы изменяете нужный источник, и предотвращает случайное присвоение предложений.
Запросы
В этом разделе сравниваются форматы запросов для Content API for Shopping и Merchant API.
| Описание запроса | Content API for Shopping | Merchant API |
|---|---|---|
| Получить товар | GET https://shoppingcontent.googleapis.com/content/v2.1/{merchantId}/products/{productId} |
GET https://merchantapi.googleapis.com/products/v1/accounts/{account}/products/{product} |
| Составь список товаров | GET https://shoppingcontent.googleapis.com/content/v2.1/{merchantId}/products |
GET https://merchantapi.googleapis.com/products/v1/accounts/{account}/products |
| Вставить товар | POST https://shoppingcontent.googleapis.com/content/v2.1/{merchantId}/products |
POST https://merchantapi.googleapis.com/products/v1/accounts/{account}/productInputs:insert |
| Как обновить информацию о товаре | PATCH https://shoppingcontent.googleapis.com/content/v2.1/{merchantId}/products/{productId} |
PATCH https://merchantapi.googleapis.com/products/v1/accounts/{account}/productInputs/{productinput} |
| Как удалить товар | DELETE https://shoppingcontent.googleapis.com/content/v2.1/{merchantId}/products/{productId} |
DELETE https://merchantapi.googleapis.com/products/v1/accounts/{account}/productInputs/{productinput} |
| Получение статуса товара | GET https://shoppingcontent.googleapis.com/content/v2.1/{merchantId}/productstatuses/{productId} |
GET https://merchantapi.googleapis.com/products/v1/accounts/{account}/products/{product} |
| Как посмотреть статусы товаров | GET https://shoppingcontent.googleapis.com/content/v2.1/{merchantId}/productstatuses |
GET https://merchantapi.googleapis.com/products/v1/accounts/{account}/products |
| Пакетная обработка нескольких запросов | POST https://shoppingcontent.googleapis.com/content/v2.1/products/custombatch |
Используйте асинхронные запросы или пакетную обработку HTTP |
Идентификаторы
Формат идентификаторов товаров в Merchant API изменен на стандартное название ресурса REST.
| Описание идентификатора | Content API for Shopping | Merchant API |
|---|---|---|
| Идентификатор товара | Строка, состоящая из сегментов, разделенных двоеточием (:).Формат: channel:contentLanguage:targetCountry:offerId или channel:contentLanguage:feedLabel:offerId.Пример: online:en:US:sku123. |
Строка ресурса REST name.Формат: accounts/{account}/products/{product}, где {product} – это contentLanguage~feedLabel~offerId.Пример: accounts/12345/products/en~US~sku123.Кодировка: рекомендуется кодировка base64url без заполнения. Она обязательна, если идентификаторы товаров содержат символы, используемые Merchant API, или зарезервированные символы URL. |
Методы
В таблице ниже приведены методы Content API for Shopping и их эквиваленты в Merchant API.
| Метод Content API for Shopping | Метод Merchant API | Доступность и примечания |
|---|---|---|
products.get |
products.get |
Получает конечный обработанный продукт. |
products.list |
products.list |
Список обработанных товаров. |
products.insert |
productInputs.insert |
Вставляет входные данные товара. Требуется dataSource. |
products.update |
productInputs.patch |
Поведение значительно отличается. Оно обновляет определенные входные данные о товаре и является постоянным. |
products.delete |
productInputs.delete |
Удаляет определенные входные данные о товаре. Требуется dataSource. |
products.custombatch |
Недоступно | Используйте асинхронные запросы или пакетную обработку HTTP. |
productstatuses.get |
products.get |
Сервис productstatuses удален. Информация о статусе теперь является частью ресурса Product. |
productstatuses.list |
products.list |
Сервис productstatuses удален. Информация о статусе теперь является частью ресурса Product. |
productstatuses.custombatch |
Недоступно | Используйте асинхронные запросы или пакетную обработку HTTP. |
Подробные изменения полей
В таблице ниже перечислены важные поля, которые были изменены, добавлены или удалены в Merchant API.
| Content API for Shopping | Merchant API | Описание |
|---|---|---|
id |
name |
Основным идентификатором товара теперь является ресурс REST name. Кодировка base64url без заполнения рекомендуется и является обязательной, если названия товаров содержат символы, используемые Merchant API, или зарезервированные символы URL. |
Атрибуты спецификации сведений о товарах верхнего уровня (например, title, price, link). |
Объект productAttributes |
Атрибуты товаров, такие как title, price и link, больше не являются полями верхнего уровня. Теперь они сгруппированы в объекте productAttributes в ресурсах Product и ProductInput. Это позволяет сделать структуру ресурсов более понятной и организованной. |
targetCountry |
feedLabel |
Теперь в названии ресурса используется feedLabel вместо targetCountry, чтобы соответствовать функциям Merchant Center. |
feedId |
dataSource (параметр запроса) |
Название dataSource теперь является обязательным параметром запроса для всех методов записи productInputs (insert, update, delete). |
channel |
Недоступно. Используйте legacy_local для товаров местного ассортимента. |
Поле channel больше не используется в Merchant API. Для товаров с каналом LOCAL в Content API for Shopping нужно задать значение true для поля legacy_local. |
| Недоступно | versionNumber |
Новое необязательное поле в ProductInput, которое можно использовать, чтобы предотвратить вставку данных в основные источники данных в неправильном порядке. |
Поля типа string с заданным набором значений |
Поля типа enum с заданным набором значений |
Поля в атрибутах товаров с определенным набором значений (например, excluded_destinations, availability) теперь имеют тип enum. |
gtin |
productAttributes.gtins |
Тип поля изменен с единичной строки (gtin) на повторяющуюся (gtins). |
sizes |
productAttributes.size |
Повторяющаяся строка (sizes) заменена на единичную (size). |
sizeType, additionalSizeType |
productAttributes.sizeTypes |
Поля sizeType и additionalSizeType заменены повторяющимся перечислением SizeType (sizeTypes), которое принимает до двух значений (например, ["PETITE", "MATERNITY"]). |