A API Ad Manager tem versões principais nomeadas e versões compatíveis com versões anteriores no lugar da versão principal atual.
Serviços, métodos e campos podem ser marcados como obsoletos a qualquer momento em uma versão principal (por exemplo, v1), mas vão continuar sendo compatíveis até que essa versão principal seja desativada.
Lançamentos de versões principais
Uma versão principal é definida como uma versão com mudanças de API incompatíveis com versões anteriores. Essas versões vão ter nomes e endpoints de API diferentes. As versões principais anteriores são compatíveis por um período de migração.
A API Ad Manager não tem uma cadência de lançamento regular para versões principais. Novas versões principais só serão lançadas quando necessário.
Versões no local
As mudanças compatíveis com versões anteriores, incluindo novos recursos e correções de bugs, são lançadas na versão principal atual da API. Os clientes precisam processar campos desconhecidos em respostas da API.
Compatibilidade com versões anteriores
A compatibilidade com versões anteriores é mantida para mudanças em uma versão principal. A compatibilidade é definida como:
Compatibilidade de origem: o código escrito em uma versão anterior é compilado em uma versão mais recente e executado com êxito com uma versão mais recente da biblioteca de cliente.
Compatibilidade eletrônica: o código escrito em uma versão anterior se comunica corretamente com um servidor mais recente. Em outras palavras, não apenas as entradas e saídas são compatíveis, mas as expectativas de serialização e desserialização continuam correspondendo.
Compatibilidade semântica: o código escrito em uma versão anterior continua recebendo o que a maioria dos desenvolvedores razoáveis esperaria.
As tabelas a seguir enumeram os tipos de mudanças na API e se elas são consideradas compatíveis com versões anteriores.
Serviços
| Tipo de mudança | Compatível com versões anteriores |
|---|---|
| Adicionar um novo serviço | Sim |
| Remover um serviço | Não |
Métodos
| Tipo de mudança | Compatível com versões anteriores |
|---|---|
| Adicionar um novo método | Sim |
| Remover um método | Não |
| Mudar o tipo de solicitação ou resposta de um método | Não |
Objetos
| Tipo de mudança | Compatível com versões anteriores |
|---|---|
| Adicionar um campo obrigatório | Não |
| Adicionar um campo opcional | Sim |
| Mover um campo para dentro ou para fora de uma submensagem | Não |
| Mudar um campo de obrigatório para opcional | Sim |
| Mudar um campo de opcional para obrigatório | Não |
| Remover uma restrição imutável | Sim |
| Adicionar uma restrição imutável | Não |
Enumerações
| Tipo de mudança | Compatível com versões anteriores |
|---|---|
| Adicionar um valor de tipo enumerado | Sim |
| Remover um valor de enumeração | Não |
Comportamento de campo descontinuado
Campos de substituição
Para campos que têm uma substituição, ambos serão preenchidos quando possível.
Ao atualizar, qualquer um dos campos pode ser definido. Incluir os dois campos em uma solicitação de atualização resulta em um erro INVALID_ARGUMENT.
Considere o seguinte esquema:
{
// The cost of this Foo in micros.
// Deprecated: Use `cost` instead.
"costMicros": number,
// The cost of this Foo.
"cost": {
object (Money)
}
}
Uma resposta de leitura preenche os dois campos com valores equivalentes:
{
"costMicros": 1250000,
"cost": {
"currencyCode": "USD",
"units": "1",
"nanos": 250000000
}
}
As solicitações de atualização podem definir qualquer um dos valores. Incluir os dois campos resulta em um erro INVALID_ARGUMENT:
costMicros
// Update payload
{
"costMicros": 1500000
}
// Response payload
{
"costMicros": 1500000,
"cost": {
"currencyCode": "USD",
"units": "1",
"nanos": 500000000
}
}
custo
// Update payload
{
"cost": {
"currencyCode": "USD",
"units": "1",
"nanos": 500000000
}
}
// Response payload
{
"costMicros": 1500000,
"cost": {
"currencyCode": "USD",
"units": "1",
"nanos": 500000000
}
}
Ambos
// Update payload
{
"costMicros": 1250000,
"cost": {
"currencyCode": "USD",
"units": "1",
"nanos": 500000000
}
}
// Response payload
{
"error": {
"code": 400,
"message": "Request contains an invalid argument.",
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.rpc.BadRequest",
"fieldViolations": [
{
"field": "costMicros",
"description": "Cannot update both costMicros and cost."
}
]
}
]
}
}
Recursos descontinuados
Se um recurso de produto for descontinuado, os campos correspondentes serão marcados como descontinuados e poderão retornar um valor padrão semanticamente apropriado. As atualizações podem ser ignoradas.
{
// The salesperson split amount in micros.
// Deprecated: The Sales Management feature has been deprecated. This field
// will always be `0`.
"salespersonSplitMicros": number,
}