תאימות של Content API for Shopping

אפשר להשתמש במדריך הזה כדי לשלב את Merchant API עם ההטמעה הקיימת של Content API for Shopping.

שנתחיל?

במאמר העיצוב של Merchant API מפורט מידע על Merchant API ועל ממשקי ה-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 בגרסה 2.1.

לדוגמה, אפשר להשתמש ב-Merchant Inventories API לצד ההטמעה הקיימת של Content API for Shopping בגרסה 2.1‏ products. תוכלו להשתמש ב-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, תוכלו לשלוח לנו משוב ולציין למה.

מזהים

כדי להתאים לעקרונות השיפור של ממשקי ה-API של Google, ביצענו כמה שינויים במזהים של משאבי Merchant API.

השם מחליף את המזהה

כל המשאבים של 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 שהוחזרו.

סוגים

ריכזנו כאן כמה סוגים נפוצים ששותפו בין ממשקי ה-API המשניים של Merchant API.

מחיר

אלה השינויים ב-Price בחבילה Merchant Common:

Content API Merchant API
שדה הסכום value:string amountMicros:int64
שדה המטבע currency:string currencyCode:string

הסכום של Price מתועד עכשיו במיקרו-יחידות, כאשר מיליון מיקרו-יחידות שווה ליחידת המטבע הרגילה.

ב-Content API for Shopping, השדה Price היה מספר עשרוני בצורת מחרוזת.

שם השדה amount השתנה מ-value ל-amountMicros

שם השדה של המטבע השתנה מ-currency ל-currencyCode. הפורמט נשאר ISO 4217.