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에 포함된 customBatch 메서드를 지원하지 않습니다. 대신 한 번에 여러 요청 보내기를 참고하거나 호출을 비동기식으로 실행하세요.

다음 샘플은 제품 입력을 삽입하는 방법을 보여줍니다.

자바

  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를 대체함

모든 Merchant API 리소스는 name 필드를 고유 식별자로 사용합니다.

다음은 호출에서 name 필드를 사용하는 방법의 예입니다.

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

이 새 name 필드는 Merchant API의 모든 읽기 및 쓰기 호출에 대한 리소스 식별자로 반환됩니다.

예를 들어 getName() 메서드를 구현하여 리소스에서 name를 가져오고 판매자 및 리소스 ID에서 직접 name를 생성하는 대신 출력을 변수로 저장합니다.

하위 리소스의 상위 필드

Merchant API에서 모든 하위 리소스에는 parent 필드가 있습니다. parent 필드를 사용하여 전체 상위 리소스를 전달하는 대신 하위 항목을 삽입할 리소스의 name를 지정할 수 있습니다. list 메서드와 함께 parent 필드를 사용하여 해당 parent의 하위 리소스를 나열할 수도 있습니다.

예를 들어 특정 제품의 오프라인 판매점 인벤토리를 나열하려면 list 메서드의 parent 필드에 제품의 name를 지정합니다. 이 경우 주어진 product는 반환된 LocalInventory 리소스의 parent입니다.

유형

다음은 Merchant API 하위 API 전반에서 공유되는 몇 가지 일반적인 유형입니다.

가격

판매자 공통 패키지의 Price에 변경된 사항은 다음과 같습니다.

Content API Merchant API
금액 필드 value:string amountMicros:int64
통화 필드 currency:string currencyCode:string

이제 Price 금액이 마이크로 단위로 기록되며, 100만 마이크로는 통화의 표준 단위에 해당합니다.

쇼핑용 Content API에서 Price는 문자열 형식의 소수점 숫자였습니다.

금액 필드 이름이 value에서 amountMicros로 변경됨

통화 필드 이름이 currency에서 currencyCode(으)로 변경되었습니다. 형식은 ISO 4217으로 유지됩니다.