Pembuatan versi v1 di feed batch

Di feed batch Anda, versi entity ditentukan melalui kolom dateModified di amplop feed:

{
  "@context": "http://schema.googleapis.com",
  "dateModified": "2018-12-28T06:30:00:123-07:00",
  "@type": "DataFeed",
  "dataFeedElement": [
    /* All the items that are part of this feed go here */
  ]
}

Semua entity yang tercantum dalam kolom dataFeedElement akan memiliki stempel waktu yang sama, seperti yang tercantum dalam amplop.

Misalnya, Anda dapat memiliki feed berikut dengan dua entitas:

{
  "@context": "http://schema.googleapis.com",
  "@type": "DataFeed",
  "dateModified": "2018-12-28T06:30:00:123-07:00",
  "dataFeedElement": [
    {
      "@type": "Restaurant",
      "@id": "http://www.provider.com/somerestaurant",
      ...
    },
    {
      "@type": "Menu",
      "@id": "http://www.provider.com/somerestaurant/menu/1"
      ...
    }
  ]
}

Setelah diterima dan diproses, entitas menu dan restoran akan diberi versi satu per satu sebagai "2018-12-28T06:30:00:123-07:00".

Pembuatan versi dengan update inkremental

Saat mengirim entity menggunakan update inventaris, versi ditetapkan melalui kolom update_time (dalam kasus panggilan penambahan/update) atau kolom delete_time (dalam kasus panggilan hapus). Karena kolom ini bersifat opsional, stempel waktu default ditetapkan ke saat Google menerima panggilan.

Contoh 1: update_time secara eksplisit ditetapkan

Misalnya panggilan inkremental berikut diterima pada 2018-12-28T06:30:10:123-07:00 untuk restoran yang benar-benar baru. Berikut adalah permintaan HTTP POST untuk entity tersebut dengan ID "http://www.provider.com/somerestaurant", dengan asumsi feed data menggunakan skema inventaris v1:

POST v2/apps/provider-project/entities/http%3A%2F%2Fwww.provider.com%2Fnewrestaurant:push
Host: actions.googleapis.com
Content-Type: application/ld+json

Di bawah ini, isi payload JSON berisi kolom update_time. Entitas dengan ID "http://www.provider.com/somerestaurant" menghasilkan versi entity ini sebagai 6:30:00, bukan saat diterima (sepuluh detik kemudian pada 6:30:10):

{
// This envelope is to be used for incremental.
  "entity": {
    // Note: "data" is not serialized as a string in our example for readability.
    "data": "[entity in JSON format serialized as a string]",
    "vertical": "FOODORDERING"
  },
  "update_time":"2018-12-28T06:30:00:123-07:00"
}

Contoh 2: update_time disetel secara implisit

Misalnya panggilan inkremental berikut diterima pada 2018-12-28T06:30:10:123-07:00 untuk restoran yang benar-benar baru. Berikut adalah permintaan HTTP POST untuk entity tersebut dengan ID "http://www.provider.com/somerestaurant", dengan asumsi bahwa feed menggunakan skema inventaris v1:

POST v2/apps/provider-project/entities/http%3A%2F%2Fwww.provider.com%2Fnewrestaurant:push
Host: actions.googleapis.com
Content-Type: application/ld+json

Di bawah ini, isi payload JSON tidak berisi kolom update_time. Oleh karena itu, entity dengan ID "http://www.provider.com/somerestaurant" menghasilkan versi entitas ini menjadi 6:30:10:

{
// This envelope is to be used for incremental.
  "entity": {
    //Note: "data" is not serialized as a string in our example for readability.
    "data": "[entity in JSON format serialized as a string]",
    "vertical": "FOODORDERING"
  }
}

Pembuatan versi antara batch dan inkremental

Entitas yang dikirim ke Google hanya akan diproses dan ditayangkan jika memiliki versi terbaru. Perlu diperhatikan bahwa entity yang dikirim melalui batch biasanya memerlukan waktu beberapa hari untuk diproses, sedangkan entity yang dikirim melalui API inkremental akan segera diproses.

Praktik terbaik

  • Tetapkan kolom update_time dan dateModified secara inkremental dan batch, sesuai dengan waktu saat entity diubah di sistem Anda.
  • Jika feed batch (file) mencantumkan lebih dari satu entity level teratas (misalnya, Anda menyambungkan restoran dengan layanan dan menu), perbarui stempel waktu saat data entity akan diperbarui.
  • Dalam panggilan inkremental, sebaiknya Anda menetapkan kolom update_time secara eksplisit.
  • Setelah panggilan inkremental dilakukan, stempel waktu feed yang sesuai (dateModified) juga akan diperbarui sebelum Google mengambilnya lagi.

Contoh

Google mengambil file berikut pada pukul 11.00 pada tanggal 28-12-2018 untuk restoran yang benar-benar baru:

{
  "@context": "http://schema.googleapis.com",
  "@type": "DataFeed",
  "dateModified": "2018-12-28T06:30:00-07:00",
  "dataFeedElement": [
    {
      "@type": "Restaurant",
      "@id": "http://www.provider.com/newrestaurant",
      ...
    },
    {
      "@type": "Menu",
      "@id": "http://www.provider.com/newrestaurant/menu/1"
      ...
    }
    {
      "@type": "Service",
      "@id": "http://www.provider.com/newrestaurant/service/1"
      ...
    }
  ]
}

Entitas ini berhasil diproses dan diberi versi "2018-12-28T06:30:00-07:00". Karena feed batch memerlukan waktu untuk diproses, feed ini biasanya ditayangkan 2 hari kemudian.

Namun, pada pukul 13.00, sistem partner akan memperbarui nomor telepon restoran, yang menghasilkan panggilan inkremental berikut, yang diterima Google pada pukul 13.05 (5 detik kemudian):

POST v2/apps/provider-project/entities/http%3A%2F%2Fwww.provider.com%2Fnewrestaurant:push
Host: actions.googleapis.com
Content-Type: application/ld+json
{
// This envelope is to be used for incremental.
  "entity": {
    //Note: "data" is not serialized as a string in our example for readability.
    "data": "[entity in JSON format serialized as a string]",
    "vertical": "FOODORDERING"
  },
  "update_time":"2018-12-28T13:00:00-07:00"
}

update_time disediakan secara eksplisit, dan lebih besar (lebih baru) daripada versi sebelumnya (06.30 pada hari yang sama), sehingga entitas restoran sekarang berversi "2018-12-28T13:00:00-07:00". Namun, entity menu dan layanan masih memiliki versi "2018-12-28T06:30:00-07:00".

Ada panggilan inkremental, sehingga feed batch akan diperbarui dengan stempel waktu baru yang sesuai. Selain itu, perubahan yang sesuai diterapkan pada entitas yang relevan (entitas restoran telah memperbarui nomor teleponnya).

{
  "@context": "http://schema.googleapis.com",
  "@type": "DataFeed",
  "dateModified": "2018-12-28T13:00:00-07:00",
  "dataFeedElement": [
    {
      "@type": "Restaurant",
      "@id": "http://www.provider.com/newrestaurant",
      ...
    },
    {
      "@type": "Menu",
      "@id": "http://www.provider.com/newrestaurant/menu/1"
      ...
    }
    {
      "@type": "Service",
      "@id": "http://www.provider.com/newrestaurant/service/1"
      ...
    }
  ]
}

Keesokan harinya (2018-12-29) pukul 23.00, feed akan diambil kembali. Restoran masih memiliki versi yang sama (pukul 13.00 pada tanggal 28 Desember), sehingga entitas ini dihapus dan versi saat ini dipertahankan. Namun, entity Menu dan Layanan diupdate dengan versi baru.

Stempel waktu peta situs

Header respons last-modified di peta situs tidak memengaruhi versi entity. Parameter ini memengaruhi kapan feed diambil oleh Google.

Praktik terbaik

  • Update header respons hanya jika semua file sudah yang terbaru dan siap diambil.
  • Gunakan update_time dan delete_time secara eksplisit secara bertahap.
  • Tetapkan update_time, delete_time, dan dateModified ke waktu saat data berubah di pihak Anda.