일괄 피드의 v1 버전 관리

일괄 피드에서 항목 버전은 피드 봉투의 dateModified 필드를 통해 결정됩니다.

{
  "@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 */
  ]
}

dataFeedElement 필드에 나열된 모든 항목은 봉투에 나열된 것과 동일한 타임스탬프를 갖습니다.

예를 들어 다음과 같은 두 개의 항목이 있는 피드가 있을 수 있습니다.

{
  "@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"
      ...
    }
  ]
}

메뉴 항목 및 레스토랑 항목 모두 수신된 후 '2018-12-28T06:30:00:123-07:00'로 개별 버전이 지정됩니다.

증분 업데이트를 사용하는 버전 관리

인벤토리 업데이트를 사용하여 항목을 전송할 때 버전은 update_time 필드 (추가/업데이트 호출의 경우) 또는 delete_time 필드 (삭제 호출의 경우)를 통해 설정됩니다. 이러한 필드는 선택사항이므로 기본 타임스탬프는 Google에서 통화를 수신한 시간으로 설정됩니다.

예 1: update_time이 명시적으로 설정됨

2018-12-28T06:30:10:123-07:00에 완전히 새로운 레스토랑에 대한 다음 증분 호출이 수신되었다고 가정해 보겠습니다. 데이터 피드가 v1 인벤토리 스키마를 사용한다고 가정하고 ID가 http://www.provider.com/somerestaurant"인 항목의 HTTP POST 요청이 있습니다.

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

아래에 JSON 페이로드 본문에는 update_time 필드가 포함되어 있습니다. ID가 'http://www.provider.com/somerestaurant"인 항목은 이 항목이 수신된 시점이 아닌 6:30:00으로 버전이 지정됩니다 (10초 후 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"
}

예 2: 암시적으로 update_time 설정

2018-12-28T06:30:10:123-07:00에 완전히 새로운 레스토랑에 대한 다음 증분 호출이 수신되었다고 가정해 보겠습니다. ID가 http://www.provider.com/somerestaurant"인 항목의 HTTP POST 요청이 있습니다. 피드가 v1 인벤토리 스키마를 사용한다고 가정합니다.

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

아래에서 JSON 페이로드 본문에는 update_time 필드가 포함되지 않습니다. ID가 'http://www.provider.com/somerestaurant"인 항목은 이 항목의 버전이 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"
  }
}

일괄과 증분 간 버전 관리

Google에 전송된 항목은 최신 버전이 있는 경우에만 처리되고 제공됩니다. 일괄 API를 통해 전송된 항목은 처리되는 데 일반적으로 며칠이 걸리지만 증분 API를 통해 전송된 항목은 즉시 처리됩니다.

권장사항

  • 시스템에서 항목이 수정된 시점에 따라 update_timedateModified 필드를 각각 증분 및 일괄로 설정합니다.
  • 일괄 피드 (파일)에 최상위 항목이 2개 이상 표시되는 경우 (예: 음식점과 서비스 및 메뉴를 페어링하는 경우) 항목 데이터가 업데이트될 때 타임스탬프를 업데이트합니다.
  • 증분 호출에서는 update_time 필드를 명시적으로 설정하는 것이 좋습니다.
  • 증분 호출이 이루어지면 Google에서 다시 가져오기 전에 상응하는 피드 타임스탬프(dateModified)도 업데이트해야 합니다.

Google은 2018-12-28 오전 11시에 완전히 새로운 레스토랑을 위해 다음 파일을 가져옵니다.

{
  "@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"
      ...
    }
  ]
}

이러한 항목은 성공적으로 처리되며 "2018-12-28T06:30:00-07:00"로 버전이 지정됩니다. 일괄 피드는 처리하는 데 시간이 걸리므로 일반적으로 2일 후에 게재됩니다.

하지만 오후 1시에 파트너의 시스템이 레스토랑의 전화번호를 업데이트하므로 Google에서 13:05 (5초 후)에 수신 전화를 다음과 같이 늘립니다.

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는 명시적으로 제공되며, 이전 버전 (같은 날 오전 6시 30분)보다 더 크고 (더 최근 날짜) 이제 레스토랑 항목의 버전은 '2018-12-28T13:00:00-07:00"입니다. 그러나 메뉴 및 서비스 항목은 계속 "2018-12-28T06:30:00-07:00"로 버전이 지정됩니다.

증분 호출이 발생했으므로 일괄 피드가 해당하는 새 타임스탬프로 업데이트됩니다. 또한 관련 변경사항은 관련 항목에 적용됩니다 (음식점의 전화번호가 업데이트됨).

{
  "@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"
      ...
    }
  ]
}

다음날 (2018-12-29) 오후 11시에 피드를 다시 가져옵니다. 레스토랑의 동일한 버전 (12월 28일 오후 1시)이 계속 있으므로 이 항목은 삭제되고 현재 버전은 유지됩니다. 그러나 Menu 및 Service 항목은 새 버전으로 업데이트됩니다.

사이트맵 타임스탬프

사이트맵의 last-modified 응답 헤더는 항목의 버전에 영향을 주지 않습니다. 이는 Google에서 피드를 가져오는 시점에 영향을 미칩니다.

권장사항

  • 모든 파일이 최신 상태이며 가져올 준비가 된 경우에만 응답 헤더를 업데이트합니다.
  • 명시적으로 update_timedelete_time를 증분 방식으로 사용합니다.
  • update_time, delete_time, dateModified를 사용자 측의 데이터가 변경되는 시간으로 설정합니다.