Interfejs API Ad Managera ma zarówno wersje główne, jak i wersje zgodne wstecznie, które zastępują bieżącą wersję główną.
Usługi, metody i pola mogą zostać w dowolnym momencie oznaczone jako wycofane w ramach wersji głównej (np. v1), ale będą obsługiwane do czasu wycofania tej wersji głównej.
Wersje główne
Wersja główna to wersja, w której wprowadzono zmiany w interfejsie API powodujące niezgodność wsteczną. Takie wersje będą miały nazwy i różne punkty końcowe interfejsu API. Poprzednie wersje główne są obsługiwane przez okres migracji.
Interfejs API Ad Managera nie ma regularnego harmonogramu publikowania wersji głównych. Nowe wersje główne będą publikowane tylko w razie potrzeby.
Wersje zastępujące
Zmiany zgodne wstecznie, w tym nowe funkcje i poprawki błędów, są publikowane w bieżącej wersji głównej interfejsu API. Klienci muszą obsługiwać nieznane pola w odpowiedziach interfejsu API.
Zgodność wsteczna
Zgodność wsteczna jest zachowywana w przypadku zmian w ramach wersji głównej. Zgodność jest definiowana jako:
Zgodność kodu źródłowego: kod napisany w poprzedniej wersji jest kompilowany w nowszej wersji i działa prawidłowo z nowszą wersją biblioteki klienta.
Zgodność z protokołem: kod napisany w poprzedniej wersji prawidłowo komunikuje się z nowszym serwerem. Innymi słowy, zgodne są nie tylko dane wejściowe i wyjściowe, ale też oczekiwania dotyczące serializacji i deserializacji.
Zgodność semantyczna: kod napisany w poprzedniej wersji nadal otrzymuje to, czego oczekiwałby większość rozsądnych deweloperów.
W tabelach poniżej wymieniono rodzaje zmian w interfejsie API oraz informacje o tym, czy są one zgodne wstecznie.
Usługi
| Rodzaj zmiany | Zgodność wsteczna |
|---|---|
| Dodaj nową usługę | Tak |
| Usuń usługę | Nie |
Metody
| Rodzaj zmiany | Zgodność wsteczna |
|---|---|
| Dodaj nową metodę | Tak |
| Usuń metodę | Nie |
| Zmień typ żądania lub odpowiedzi metody | Nie |
Obiekty
| Rodzaj zmiany | Zgodność wsteczna |
|---|---|
| Dodaj pole wymagane | Nie |
| Dodaj pole opcjonalne | Tak |
| Przeniesienie pola do lub z podwiadomości | Nie |
| Zmiana pola z wymaganego na opcjonalne | Tak |
| Zmiana pola z opcjonalnego na wymagane | Nie |
| Usuń ograniczenie niezmienne | Tak |
| Dodaj ograniczenie niezmienne | Nie |
Wyliczenia
| Rodzaj zmiany | Zgodność wsteczna |
|---|---|
| Dodaj wartość typu wyliczeniowego | Tak |
| Usuń wartość typu wyliczeniowego | Nie |
Działanie wycofanych pól
Pola zastępcze
W przypadku pól, które mają pole zastępcze, oba pola zostaną wypełnione, jeśli będzie to możliwe.
Podczas aktualizacji można ustawić dowolne pole. Uwzględnienie obu pól w żądaniu aktualizacji powoduje błąd INVALID_ARGUMENT.
Przyjrzyj się temu schematowi:
{
// The cost of this Foo in micros.
// Deprecated: Use `cost` instead.
"costMicros": number,
// The cost of this Foo.
"cost": {
object (Money)
}
}
Odpowiedź odczytu wypełnia oba pola równoważnymi wartościami:
{
"costMicros": 1250000,
"cost": {
"currencyCode": "USD",
"units": "1",
"nanos": 250000000
}
}
Żądania aktualizacji mogą ustawiać dowolną wartość. Uwzględnienie obu pól powoduje błąd INVALID_ARGUMENT:
costMicros
// Update payload
{
"costMicros": 1500000
}
// Response payload
{
"costMicros": 1500000,
"cost": {
"currencyCode": "USD",
"units": "1",
"nanos": 500000000
}
}
cost
// Update payload
{
"cost": {
"currencyCode": "USD",
"units": "1",
"nanos": 500000000
}
}
// Response payload
{
"costMicros": 1500000,
"cost": {
"currencyCode": "USD",
"units": "1",
"nanos": 500000000
}
}
Obie opcje
// 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."
}
]
}
]
}
}
Funkcje wycofane
Jeśli funkcja produktu zostanie wycofana, odpowiednie pola zostaną oznaczone jako wycofane i mogą zwracać semantycznie odpowiednią wartość domyślną. Aktualizacje mogą być ignorowane.
{
// The salesperson split amount in micros.
// Deprecated: The Sales Management feature has been deprecated. This field
// will always be `0`.
"salespersonSplitMicros": number,
}