Dodanie pola do odpowiedzi API wygląda niewinnie: niczego nie usuwamy, więc powinno być zgodne wstecz. Powinno. Słowo „powinno” bywa jednak najdroższą częścią projektu integracyjnego.
Trzy warstwy zgodności
| Warstwa | Pytanie | Przykład ryzyka |
|---|---|---|
| Źródłowa | Czy kod klienta nadal się kompiluje? | Generator SDK zmienia sygnaturę lub typ. |
| Format przesyłanych danych | Czy stary klient potrafi odebrać i zdeserializować nową odpowiedź? | Tryb ścisły odrzuca nieznane pole. |
| Semantyczna | Czy klient nadal otrzymuje zachowanie, którego rozsądnie oczekiwał? | Nowa wartość enum albo zmieniona wartość domyślna uruchamia złą gałąź logiki. |
Google AIP-180 rozdziela właśnie zgodność źródłową, zgodność formatu przesyłanych danych i zgodność semantyczną. Podkreśla też, że katalog zmian zgodnych i niezgodnych jest wskazówką, a nie dowodem dla każdego stosu technologicznego.
Opcjonalne nie znaczy obojętne
Opcjonalne pole żądania oznacza, że stary klient nie musi go wysyłać. Opcjonalne pole odpowiedzi oznacza, że serwer nie zawsze je zwróci. Żadne z tych zdań nie dowodzi jeszcze, że konkretny klient zaakceptuje nieznaną właściwość albo poprawnie obsłuży nową wartość.
Zmiana addytywna jest zwykle bezpieczniejsza od usunięcia pola, ale może ujawnić ukryty kontrakt: ścisłą deserializację, wyczerpujący switch po enumie, limit długości w bazie albo logikę zależną od nieudokumentowanego formatu. Kontrakt API obejmuje zachowanie, nie tylko plik OpenAPI.
Macierz przed wdrożeniem
| Zmiana | Ocena początkowa | Co sprawdzić |
|---|---|---|
| Nowe opcjonalne pole odpowiedzi | Zwykle addytywna | Nieznane pola, generowane modele, proxy i walidatory. |
| Nowa wartość enum w odpowiedzi | Podwyższone ryzyko | Domyślna gałąź i zachowanie kodu generowanego. |
| Zmiana wartości domyślnej | Semantycznie niezgodna | Klienci, którzy nie wysyłają pola. |
| Opcjonalne pole staje się wymagane | Niezgodna | Wszyscy istniejący producenci żądań. |
| Zmiana formatu istniejącej wartości | Semantycznie ryzykowna | Parsery, walidacja, indeksy i długości kolumn. |
Jak sprawdzić zgodność zmiany API
- Określ zasady zgodności. Zapisz, czy aplikacje korzystające z API powinny ignorować nieznane pola w odpowiedzi, czy dopuszczalne jest dodawanie nowych wartości do pól wyliczeniowych (enum) oraz jak długo wspierana jest dana wersja API.
- Zrób spis konsumentów. Właściciel, wersja biblioteki, sposób deserializacji i termin aktualizacji są ważniejsze od liczby endpointów.
- Testuj reprezentatywne wersje. Odtwórz odpowiedź z nowym polem w testach kontraktowych i uruchom najstarszego wspieranego klienta.
- Ogranicz zasięg. Wdróż zmianę etapami, obserwuj błędy deserializacji i miej możliwość wycofania ekspozycji pola.
- Wersjonuj, gdy nie można zachować dotychczasowych zasad zgodności. Nowa wersja jest właściwa, gdy nie można zachować zachowania istniejącego kontraktu lub kontrolować aktualizacji konsumentów.
deliveryWindow do odpowiedzi zamówienia. OpenAPI nie oznacza pola jako wymagane, ale starsza aplikacja mobilna odrzuca każdą nieznaną właściwość. Przed szerokim wdrożeniem zespół uruchamia test ze wspieraną wersją klienta, aktualizuje regułę deserializacji i dopiero potem stopniowo udostępnia pole.Granica tej rady
Nie każda integracja wymaga publicznego wersjonowania. Gdy producent kontroluje wszystkich konsumentów i może wymusić ich jednoczesną aktualizację, prostszy proces może wystarczyć. Nadal trzeba jednak sprawdzić rzeczywisty zestaw wersji podczas wdrożenia. „To tylko pole” nie jest strategią migracji.
Przećwicz decyzję o nowym polu →
Porozmawiajmy o tym artykule
Podziel się uwagą lub zanonimizowanym przykładem. Komentarze sprawdza AI przed publikacją. Niejednoznaczne przypadki trafiają do moderatora.