ความเข้ากันได้ของ Content API สำหรับ 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 คุณใช้ gRPC สำหรับ Merchant API และ REST สำหรับ Content API for Shopping ได้พร้อมกัน

ไลบรารีของไคลเอ็นต์ Merchant API ต้องใช้ gRPC

ดูข้อมูลเพิ่มเติมที่ใช้ gRPC

ความเข้ากันได้

คู่มือนี้จะอธิบายการเปลี่ยนแปลงทั่วไปที่มีผลกับ Merchant API ทั้งหมด ดูคู่มือต่อไปนี้สำหรับการเปลี่ยนแปลงฟีเจอร์ที่เฉพาะเจาะจง

Merchant API ได้รับการออกแบบให้ทำงานร่วมกับฟีเจอร์ Content API for Shopping v2.1 ที่มีอยู่

ตัวอย่างเช่น คุณสามารถใช้ Merchant Inventories API ควบคู่ไปกับการใช้งาน Content API for Shopping เวอร์ชัน 2.1products ที่มีอยู่ คุณอาจใช้ Content API for Shopping เพื่ออัปโหลดผลิตภัณฑ์ใหม่ในร้าน (ที่คุณขายในร้านค้าในพื้นที่) จากนั้นใช้แหล่งข้อมูล Merchant Inventories API LocalInventoryเพื่อจัดการข้อมูลในร้านสำหรับผลิตภัณฑ์นั้น

คำขอแบบเป็นกลุ่ม

Merchant API ไม่รองรับเมธอด customBatch ที่แสดงใน Content API for Shopping แต่ให้ดูหัวข้อส่งคําขอหลายรายการพร้อมกันหรือเรียกใช้แบบไม่พร้อมกัน

ตัวอย่างต่อไปนี้แสดงวิธีแทรกอินพุตผลิตภัณฑ์

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

หากคุณใช้ customBatch ใน Content API และต้องการฟีเจอร์นี้สำหรับ Merchant API โปรดแจ้งเหตุผลให้เราทราบในความคิดเห็น

รหัสระบุ

เราได้ทําการเปลี่ยนแปลงตัวระบุแหล่งข้อมูล Merchant API บางส่วนเพื่อให้สอดคล้องกับหลักการปรับปรุง API ของ Google

ชื่อแทนที่รหัส

ทรัพยากร Merchant API ทั้งหมดใช้ฟิลด์ name เป็นตัวระบุที่ไม่ซ้ำกัน

ต่อไปนี้คือตัวอย่างวิธีใช้ช่อง name ในการเรียกใช้

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

ระบบจะแสดงผลช่อง name ใหม่นี้เป็นตัวระบุทรัพยากรสําหรับการเรียกอ่านและเขียนทั้งหมดใน Merchant API

เช่น ใช้เมธอด getName() เพื่อดึงข้อมูล name จากแหล่งข้อมูล และจัดเก็บเอาต์พุตเป็นตัวแปรแทนการสร้าง name จากรหัสผู้ขายและรหัสแหล่งข้อมูลด้วยตนเอง

ช่องหลักสำหรับทรัพยากรย่อย

ใน Merchant API ทรัพยากรย่อยทั้งหมดจะมีช่อง parent คุณสามารถใช้ฟิลด์ parent เพื่อระบุ name ของทรัพยากรที่จะแทรกรายการย่อยแทนการส่งทรัพยากรหลักทั้งรายการ นอกจากนี้ คุณยังใช้parent ฟิลด์ที่มีเมธอด list เพื่อแสดงรายการทรัพยากรย่อยของ parent นั้นได้ด้วย

เช่น หากต้องการแสดงสินค้าคงคลังในร้านของผลิตภัณฑ์หนึ่งๆ ให้ระบุ name ของผลิตภัณฑ์ในช่อง parent สำหรับเมธอด list ในกรณีนี้ product ที่ระบุคือ parent ของแหล่งข้อมูล LocalInventory ที่แสดงผล

ประเภท

ต่อไปนี้คือประเภททั่วไปที่แชร์ใน Merchant API ย่อย

ราคา

สิ่งที่เปลี่ยนแปลงสำหรับ Price ในแพ็กเกจ Merchant Common มีดังนี้

Content API Merchant API
ช่องจำนวนเงิน value:string amountMicros:int64
ฟิลด์สกุลเงิน currency:string currencyCode:string

ตอนนี้ระบบจะบันทึกจำนวน Price เป็นหน่วยไมโคร โดยที่ 1 ล้านหน่วยไมโครมีค่าเท่ากับหน่วยมาตรฐานของสกุลเงิน

ใน Content API for Shopping Price คือตัวเลขทศนิยมในรูปแบบสตริง

เปลี่ยนชื่อช่องจํานวนเงินจาก value เป็น amountMicros

เปลี่ยนชื่อช่องสกุลเงินจาก currency เป็น currencyCode แล้ว รูปแบบจะยังคงเป็น ISO 4217