Pembuatan versi v1 di feed batch

Pada feed batch, 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 entitas yang tercantum di kolom dataFeedElement akan memiliki stempel waktu yang sama, seperti yang tercantum dalam amplop.

Misalnya, Anda bisa 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"
      ...
    }
  ]
}

Baik entitas menu maupun restoran, setelah diterima dan diproses, akan diberi versi individual 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 (untuk panggilan add/update) atau kolom delete_time (untuk panggilan hapus). Karena kolom ini bersifat opsional, stempel waktu default ditetapkan saat Google menerima panggilan.

Contoh 1: update_time ditetapkan secara eksplisit

Misalnya panggilan inkremental berikut diterima pada 28-12-2018T06: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, isi payload JSON berisi kolom update_time. Entitas dengan ID "http://www.provider.com/somerestaurant" mengakibatkan entitas ini diversikan sebagai 6:30:00 dan 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 28-12-2018T06: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 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, isi payload JSON tidak berisi kolom update_time. Entitas dengan ID "http://www.provider.com/somerestaurant" sehingga menghasilkan entity ini dengan versi 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

Entity yang dikirim ke Google hanya akan diproses dan ditayangkan jika entity tersebut 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 langsung diproses.

Praktik terbaik

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

Contoh

Google mengambil file berikut pada pukul 11.00 pada 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 sebagai "2018-12-28T06:30:00-07:00". Karena feed batch membutuhkan waktu untuk diproses, feed ini biasanya ditayangkan 2 hari kemudian.

Namun, pada pukul 1 siang, sistem partner memiliki pembaruan pada 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 diberikan secara eksplisit, dan lebih besar (lebih baru) daripada versi sebelumnya (6:30 pada hari yang sama), sehingga entity restoran sekarang diberi versi sebagai "2018-12-28T13:00:00-07:00" Namun, entitas menu dan layanan masih diberi versi "2018-12-28T06:30:00-07:00".

Ada panggilan inkremental, sehingga feed batch diperbarui dengan stempel waktu yang sesuai. Selain itu, perubahan terkait akan diterapkan ke entitas yang relevan (nomor telepon entitas restoran tersebut telah diperbarui).

{
  "@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 (29-12-2018) pukul 23.00, feed akan diambil lagi. Restoran masih memiliki versi yang sama (1 siang tanggal 28 Desember), sehingga entity 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. Hal ini memengaruhi kapan feed diambil oleh Google.

Praktik terbaik

  • Perbarui header respons hanya jika semua file adalah yang terbaru dan siap diambil.
  • Secara eksplisit menggunakan update_time dan delete_time secara bertahap.
  • Menetapkan update_time, delete_time, dan dateModified saat data Anda berubah.