Content API for Shopping の互換性

このガイドでは、Merchant API を既存の Content API for Shopping 実装と統合する方法について説明します。

使ってみる

Merchant API とその サブ API の詳細については、Merchant API の設計をご覧ください。

Merchant API の使用を開始するには、リクエスト URL を次の形式に変更します。

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

詳しくは、クイックスタート ガイドと Merchant API のリファレンスをご覧ください。

gRPC のサポート

Merchant API は gRPC と REST をサポートしています。Merchant API には gRPC を、Content API for Shopping には REST を同時に使用できます。

Merchant API のクライアント ライブラリには gRPC が必要です。

詳細については、gRPC を使用するをご覧ください。

互換性

このガイドでは、Merchant API 全体に適用される一般的な変更について説明します。特定の機能の変更については、次のガイドをご覧ください。

Merchant API は、既存の Content API for Shopping v2.1 機能と連携するように設計されています。

たとえば、既存の Content API for Shopping v2.1 products 実装とともに Merchant Inventories API を使用できます。Content API for Shopping を使用して新しいローカル商品(ローカル店舗で販売する商品)をアップロードし、Merchant Inventories API LocalInventory リソースを使用して、その商品の店舗情報を管理できます。

バッチ リクエスト

Merchant API は、Content API for Shopping の customBatch メソッドをサポートしていません。代わりに、複数のリクエストを一括で送信するか、呼び出しを非同期で実行してください。

次のサンプルは、商品入力を挿入する方法を示しています。

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

Content API で customBatch を使用していて、Merchant API でもこの機能が必要な場合は、その理由をフィードバックでお知らせください。

識別子

Google の API 改善の原則に沿って、Merchant API リソースの ID に変更を加えました。

name が Id に置き換えられます

すべての Merchant API リソースは、name フィールドを一意の識別子として使用します。

呼び出しで name フィールドを使用する方法の例を次に示します。

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

この新しい name フィールドは、Merchant API のすべての読み取り / 書き込み呼び出しのリソース ID として返されます。

たとえば、getName() メソッドを実装してリソースから name を取得し、販売者とリソース ID から name を自分で作成するのではなく、出力を変数として保存します。

子リソースの親フィールド

Merchant API では、すべての子リソースに parent フィールドがあります。parent フィールドを使用すると、親リソース全体を渡す代わりに、子を挿入するリソースの name を指定できます。list メソッドで parent フィールドを使用して、その parent の子リソースを一覧表示することもできます。

たとえば、特定の商品のローカル在庫を一覧表示するには、list メソッドの parent フィールドに商品の name を指定します。この場合、指定された product は、返された LocalInventory リソースの parent です。

Merchant API のサブ API で共有される一般的なタイプをいくつか示します。

価格

Merchant Common パッケージの Price の変更点は次のとおりです。

Content API Merchant API
金額フィールド value:string amountMicros:int64
通貨フィールド currency:string currencyCode:string

Price の金額はマイクロ単位で記録されます。100 万マイクロが通貨の標準単位に相当します。

Content API for Shopping では、Price は文字列形式の小数点数でした。

金額フィールド名が value から amountMicros に変更されました

通貨フィールド名が currency から currencyCode に変更されました。形式は ISO 4217 のままです。