Compatibilidad con Content API para Shopping

Puedes usar esta guía para integrar la API de Merchant con tu implementación existente de Content API for Shopping.

Comenzar

Consulta el diseño de la API de Merchant para obtener detalles sobre la API de Merchant y sus sub-APIs.

Para comenzar a usar la API de Merchant, cambia las URLs de tus solicitudes al siguiente formato:

https://merchantapi.googleapis.com/{sub-API}/{version}/{resource name}:{method}

Consulta la guía de inicio rápido y la referencia de la API de Merchant para obtener más información.

Compatibilidad con gRPC

La API de Merchant admite gRPC y REST. Puedes usar gRPC para la API de Merchant Center y REST para Content API for Shopping al mismo tiempo.

Las bibliotecas cliente de la API de Merchant requieren gRPC.

Consulta Cómo usar gRPC para obtener más información.

Compatibilidad

En esta guía, se describen los cambios generales que se aplican a toda la API de Merchant. Consulta las siguientes guías para conocer los cambios en funciones específicas:

La API de Merchant está diseñada para funcionar junto con las funciones existentes de Content API for Shopping v2.1.

Por ejemplo, puedes usar la API de Merchant Inventories junto con tu implementación existente de products de Content API for Shopping v2.1. Puedes usar Content API for Shopping para subir un nuevo producto local (que vendes en una tienda local) y, luego, usar el recurso de la API de Merchant Inventories LocalInventory para administrar la información en la tienda de ese producto.

Utiliza solicitudes por lotes

La API de Merchant no admite el método customBatch que se incluye en Content API for Shopping. En su lugar, consulta Cómo enviar varias solicitudes a la vez o ejecuta tus llamadas de forma asíncrona.

En el siguiente ejemplo, se muestra cómo insertar una entrada de producto.

Java

  public static void asyncInsertProductInput(Config config, String dataSource) throws Exception {

    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    // Creates service settings using the credentials retrieved above.
    ProductInputsServiceSettings productInputsServiceSettings =
        ProductInputsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Creates parent to identify where to insert the product.
    String parent = getParent(config.getAccountId().toString());

    // Calls the API and catches and prints any network failures/errors.
    try (ProductInputsServiceClient productInputsServiceClient =
        ProductInputsServiceClient.create(productInputsServiceSettings)) {

      // Creates five insert product input requests with random product IDs.
      List<InsertProductInputRequest> requests = new ArrayList<>(5);
      for (int i = 0; i < 5; i++) {
        InsertProductInputRequest request =
            InsertProductInputRequest.newBuilder()
                .setParent(parent)
                // You can only insert products into datasource types of Input "API" and "FILE", and
                // of Type "Primary" or "Supplemental."
                // This field takes the `name` field of the datasource.
                .setDataSource(dataSource)
                // If this product is already owned by another datasource, when re-inserting, the
                // new datasource will take ownership of the product.
                .setProductInput(createRandomProduct())
                .build();

        requests.add(request);
      }

      System.out.println("Sending insert product input requests");
      List<ApiFuture<ProductInput>> futures =
          requests.stream()
              .map(
                  request ->
                      productInputsServiceClient.insertProductInputCallable().futureCall(request))
              .collect(Collectors.toList());

      // Creates callback to handle the responses when all are ready.
      ApiFuture<List<ProductInput>> responses = ApiFutures.allAsList(futures);
      ApiFutures.addCallback(
          responses,
          new ApiFutureCallback<List<ProductInput>>() {
            @Override
            public void onSuccess(List<ProductInput> results) {
              System.out.println("Inserted products below");
              System.out.println(results);
            }

            @Override
            public void onFailure(Throwable throwable) {
              System.out.println(throwable);
            }
          },
          MoreExecutors.directExecutor());

    } catch (Exception e) {
      System.out.println(e);
    }
  }

Si usas customBatch en Content API y necesitas esta función para la API de Merchant, cuéntanos por qué en tus comentarios.

Identificadores

Para alinearnos con los principios de mejora de las APIs de Google, realizamos algunos cambios en los identificadores de los recursos de la API de Merchant.

El nombre reemplaza al ID

Todos los recursos de la API de Merchant usan el campo name como identificador único.

Este es un ejemplo de cómo usar el campo name en tus llamadas:

POST https://merchantapi.googleapis.com/inventories/v1beta/{parent}/regionalInventories:insert

Este nuevo campo name se muestra como el identificador de recursos para todas las llamadas de lectura y escritura en la API de Merchant.

Por ejemplo, implementa un método getName() para recuperar el name de un recurso y almacenar el resultado como una variable en lugar de construir el name a partir de los IDs del comercio y del recurso por tu cuenta.

campos superiores para recursos secundarios

En la API de Merchant, todos los recursos secundarios tienen el campo parent. Puedes usar el campo parent para especificar el name del recurso al que se insertará el secundario, en lugar de pasar todo el recurso superior. También puedes usar el campo parent con métodos list para enumerar los recursos secundarios de ese parent.

Por ejemplo, para enumerar los inventarios locales de un producto determinado, especifica el name del producto en el campo parent del método list. En este caso, el product determinado es el parent de los recursos LocalInventory que se muestran.

Tipos

Estos son algunos tipos comunes que se comparten entre las subAPIs de la API de Merchant Center.

Precio

Estos son los cambios para Price en el paquete Merchant Common:

Content API API de Merchant Center
Campo de importe value:string amountMicros:int64
Campo de moneda currency:string currencyCode:string

El importe de Price ahora se registra en micros, en el que 1 millón de micros equivale a la unidad estándar de tu moneda.

En Content API for Shopping, Price era un número decimal en forma de cadena.

El nombre del campo de importe cambió de value a amountMicros

El nombre del campo de moneda cambió de currency a currencyCode. El formato sigue siendo ISO 4217.