Nos feeds em lote, a versão de uma entidade é determinada pelo campo
dateModified
no envelope do 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 */
]
}
Todas as entidades listadas no campo dataFeedElement
terão o mesmo carimbo de data/hora,
conforme listado no envelope.
Por exemplo, você pode ter o seguinte feed com duas entidades:
{
"@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"
...
}
]
}
As entidades de menu e de restaurante, depois de recebidas e processadas, seriam controle de versões individualmente como "quot;2018-12-28T06:30:00:123-07:00"".
Controle de versões com atualizações incrementais
Ao enviar uma entidade usando atualizações de inventário, a versão é definida pelo campo update_time
(no caso de uma chamada de adição/atualização) ou pelo campo delete_time
(no caso de uma chamada de exclusão). Como esses campos são opcionais, o
carimbo de data/hora padrão é definido como quando o Google recebeu a chamada.
Exemplo 1: update_time definido explicitamente
Suponha que a seguinte chamada incremental seja recebida em 2018-12-28T06:30:10:123-07:00 para um restaurante completamente novo. Veja a solicitação POST HTTP para essa entidade com o ID "http://www.provider.com/somerestaurant" supondo que o feed de dados use o esquema de inventário v1:
POST v2/apps/provider-project/entities/http%3A%2F%2Fwww.provider.com%2Fnewrestaurant:push
Host: actions.googleapis.com
Content-Type: application/ld+json
Abaixo, o corpo do payload JSON contém o campo update_time
. A entidade com
ID "http://www.provider.com/somerestaurante" resulta no fato de que essa entidade
tem versões 6:30:00 e não quando foi recebida (10 segundos depois,
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"
}
Exemplo 2: update_time definido implicitamente
Suponha que a seguinte chamada incremental seja recebida em 2018-12-28T06:30:10:123-07:00 para um restaurante completamente novo. Veja a solicitação HTTP POST para essa entidade com o ID "http://www.provider.com/somerestaurant" supondo que o feed use o esquema de inventário v1:
POST v2/apps/provider-project/entities/http%3A%2F%2Fwww.provider.com%2Fnewrestaurant:push
Host: actions.googleapis.com
Content-Type: application/ld+json
Abaixo, o corpo do payload JSON não contém o campo update_time
. A
entidade com o ID "http://www.provider.com/somerestaurante" portanto,
essa versão tem a versão 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"
}
}
Controle de versões entre em lote e incremental
Uma entidade enviada ao Google só será processada e veiculada se tiver a versão mais recente. As entidades enviadas em lote geralmente levam alguns dias para serem processadas, enquanto as entidades enviadas pela API incremental são processadas imediatamente.
Práticas recomendadas
- Defina os campos
update_time
edateModified
em incrementos e lotes, respectivamente, de acordo com a data em que a entidade foi modificada nos sistemas. - Se um feed em lote (arquivo) listar mais de uma entidade de nível superior (por exemplo, você pareia seus restaurantes com serviços e menus), atualize o carimbo de data/hora conforme os dados de uma entidade são atualizados.
- Em chamadas incrementais, recomendamos que você defina explicitamente o campo
update_time
. - Quando uma chamada incremental é feita, o carimbo de data/hora do feed correspondente (
dateModified
) também é atualizado antes que o Google o busque novamente.
Exemplo
O Google busca o seguinte arquivo às 11h de 28/12/2018 para um restaurante completamente novo:
{
"@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"
...
}
]
}
Essas entidades são processadas e passam a ter o controle de versões "2018-12-28T06:30:00-07:00" Como os feeds em lote levam tempo para serem processados, eles geralmente são veiculados dois dias depois.
Às 13h, no entanto, o sistema do parceiro tem uma atualização do número de telefone do restaurante, o que resulta na seguinte chamada incremental, que o Google recebe às 13h05 (5 segundos depois):
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"
}
O update_time
é fornecido explicitamente e é maior (mais recente) do que a
versão anterior (6h30 do mesmo dia), então a entidade do restaurante agora recebe uma
versão como "2018-12-28T13:00:00-07:00". No entanto, as entidades de menu e serviço ainda têm controle de versões como "2018-12-28T06:30:00-07:00".
Como houve uma chamada incremental, o feed em lote é atualizado com o novo carimbo de data/hora correspondente. Além disso, as mudanças correspondentes são aplicadas às entidades relevantes (a entidade do restaurante tem o número de telefone atualizado).
{
"@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"
...
}
]
}
No dia seguinte (29/12/2018) às 23h, o feed é buscado novamente. O restaurante ainda tem a mesma versão (13h de 28 de dezembro), então essa entidade é descartada e a versão atual é mantida. No entanto, as entidades Menu e Service são atualizadas com uma nova versão.
Carimbos de data/hora do sitemap
O cabeçalho de resposta last-modified
no sitemap não afeta a
versão de uma entidade. Afeta quando o feed é buscado pelo Google.
Práticas recomendadas
- Atualize o cabeçalho de resposta somente quando todos os arquivos estiverem atualizados e prontos para serem buscas.
- Use explicitamente
update_time
edelete_time
de forma incremental. - Defina
update_time
,delete_time
edateModified
como quando os dados mudarem.