일괄 피드의 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/some 창'인 항목에 대한 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/some 의견이 있는 항목'은 수신 시점이 아닌 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에 완전히 새로운 식당에 대한 다음과 같은 증분 호출이 수신된다고 가정해 보겠습니다. 다음은 피드가 v1 인벤토리 스키마를 사용한다고 가정할 때 ID가 'http://www.provider.com/some 창'인 항목에 대한 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/some 작품'인 항목은 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를 통해 전송된 항목은 즉시 처리되는 반면, 일괄 처리를 통해 전송된 항목은 처리되는 데 일반적으로 며칠이 걸릴 수 있습니다.

권장사항

  • update_timedateModified 필드를 시스템에서 항목이 수정된 시점에 따라 각각 증분과 배치로 설정합니다.
  • 일괄 피드 (파일)에 둘 이상의 최상위 항목이 나열되는 경우 (예: 레스토랑을 서비스 및 메뉴와 페어링) 항목의 데이터가 업데이트될 때 타임스탬프를 업데이트합니다.
  • 증분 호출에서는 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시 5분 (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시)을 사용하므로 이 항목이 삭제되고 현재 버전이 유지됩니다. 그러나 메뉴 및 서비스 항목은 새 버전으로 업데이트됩니다.

사이트맵 타임스탬프

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

권장사항

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