API Content for Shopping

Use este guia para integrar a API Merchant à sua implementação da API Content for Shopping.

Primeiros passos

Consulte o design da API Merchant para saber mais sobre a API Merchant e as sub-APIs.

Para começar a usar a API Merchant, mude os URLs de solicitação para o seguinte formato:

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

Consulte o guia de início rápido e a referência da API Merchant para mais informações.

Suporte ao gRPC

A API Merchant oferece suporte a gRPC e REST. É possível usar o gRPC para a API Merchant e o REST para a API Content for Shopping ao mesmo tempo.

As bibliotecas de cliente da API Merchant exigem o gRPC.

Consulte usar o gRPC para mais informações.

Compatibilidade

Este guia descreve mudanças gerais que se aplicam a toda a API Merchant. Consulte os guias abaixo para conferir mudanças em recursos específicos:

A API Merchant foi projetada para funcionar com os recursos atuais da API Content for Shopping v2.1.

Por exemplo, é possível usar a API Merchant Inventories com a implementação atual da API Content v2.1 para Shopping products. Você pode usar a API Content for Shopping para fazer upload de um novo produto local (que você vende em uma loja local) e, em seguida, usar o recurso da API Merchant Inventories LocalInventory para gerenciar as informações na loja desse produto.

Solicitações em lote

A API Merchant não oferece suporte ao método customBatch apresentado na API Content for Shopping. Em vez disso, consulte Enviar várias solicitações de uma só vez ou execute suas chamadas de forma assíncrona.

O exemplo a seguir demonstra como inserir uma entrada de produto.

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);
    }
  }

Se você usa customBatch na API Content e precisa desse recurso para a API Merchant, informe o motivo no seu feedback.

Identificadores

Para nos alinharmos aos princípios de melhoria de API do Google, fizemos algumas mudanças nos identificadores dos recursos da API Merchant.

O nome substitui o ID

Todos os recursos da API Merchant usam o campo name como identificador exclusivo.

Confira um exemplo de como usar o campo name nas chamadas:

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

Esse novo campo name é retornado como o identificador de recursos para todas as chamadas de leitura e gravação na API Merchant.

Por exemplo, implemente um método getName() para extrair o name de um recurso e armazenar a saída como uma variável em vez de criar o name com os IDs do comerciante e do recurso.

campos pai para recursos filhos

Na API Merchant, todos os recursos filhos têm o campo parent. É possível usar o campo parent para especificar o name do recurso para inserir o filho, em vez de transmitir todo o recurso pai. Também é possível usar o campo parent com métodos list para listar os recursos filhos desse parent.

Por exemplo, para listar inventários locais de um determinado produto, especifique o name do produto no campo parent do método list. Nesse caso, o product fornecido é o parent dos recursos LocalInventory retornados.

Tipos

Confira alguns tipos comuns compartilhados entre as sub-APIs da API Merchant.

Preço

Confira o que mudou para Price no pacote "Comum do comerciante":

API Content API Merchant
Campo "Valor" value:string amountMicros:int64
Campo de moeda currency:string currencyCode:string

O valor de Price agora é registrado em micros, em que 1 milhão de micros é equivalente à unidade padrão da sua moeda.

Na API Content for Shopping, Price era um número decimal na forma de uma string.

O nome do campo "Valor" mudou de value para amountMicros

O nome do campo de moeda mudou de currency para currencyCode. O formato permanece como ISO 4217.