Usługi AI dla firm Realizacje Blog FAQ Rozpocznij projekt

Wersjonowanie API — jak rozwijać interfejs, nie psując integracji

Interfejs programistyczny, z którego korzysta choć jeden zewnętrzny system, przestaje być wyłącznie Twoim kodem. Staje się umową. Każda zmiana w nazwie pola, formacie daty czy znaczeniu kodu odpowiedzi może zatrzymać sklep partnera, synchronizację z magazynem albo aplikację mobilną, której nie da się zaktualizować w jeden dzień. Wersjonowanie to sposób na rozwijanie tej umowy bez zrywania jej jednostronnie.

Krótka odpowiedź: wersjonowanie API polega na tym, że zmiany niezgodne wstecz — usunięcie pola, zmiana typu, zmiana znaczenia — wprowadza się w nowej wersji interfejsu, a stara działa równolegle przez zapowiedziany okres. Zmiany zgodne wstecz, takie jak dodanie opcjonalnego pola, wprowadza się bez nowej wersji.

Najważniejsza decyzja nie dotyczy formatu numeru wersji, lecz tego, jak długo utrzymujesz starą wersję i jak informujesz o jej wycofaniu.

Dlaczego to w ogóle problem

Po stronie serwera zmiana jest natychmiastowa: wdrażasz nowy kod i wszystko działa po nowemu. Po stronie korzystających systemów zmiana wymaga ich aktualizacji — a te należą do innych zespołów, innych firm, a w przypadku aplikacji mobilnych leżą na telefonach użytkowników, którzy aktualizują je, kiedy chcą.

Oznacza to, że przez pewien czas — tygodnie, miesiące, czasem dłużej — Twój serwer musi obsługiwać klientów, którzy oczekują starego zachowania. Wersjonowanie jest formalnym sposobem na zarządzanie tym okresem.

Które zmiany są bezpieczne

Punktem wyjścia jest rozróżnienie zmian zgodnych i niezgodnych wstecz. To ono decyduje, czy potrzebna jest nowa wersja.

ZmianaZgodna wstecz?Uwagi
Dodanie nowego punktu dostępuTakIstniejący klienci go nie używają
Dodanie opcjonalnego pola w odpowiedziTakPod warunkiem, że klienci ignorują nieznane pola
Dodanie opcjonalnego parametru zapytaniaTakWartość domyślna musi zachować stare zachowanie
Nowa wartość w polu wyliczeniowymRyzykownaKlient może nie obsłużyć nieznanej wartości
Usunięcie pola z odpowiedziNieKlient korzystający z pola przestaje działać
Zmiana nazwy polaNieDla klienta to usunięcie i dodanie
Zmiana typu lub formatuNieLiczba jako tekst, inny format daty
Nowe pole obowiązkowe w zapytaniuNieStare zapytania zaczynają być odrzucane
Zmiana znaczenia istniejącego polaNieNajgroźniejsza — nie wywołuje błędu, tylko złe dane
Zaostrzenie walidacjiNieDotąd akceptowane dane zaczynają być odrzucane

Uwaga praktyczna: najgroźniejsza jest zmiana znaczenia pola przy zachowaniu jego nazwy i typu — na przykład gdy kwota zaczyna być podawana netto zamiast brutto. Integracja nie zgłasza błędu, tylko po cichu przetwarza złe dane. Takie zmiany zawsze wymagają nowego pola albo nowej wersji, nigdy modyfikacji w miejscu.

Sposoby oznaczania wersji

Wersja w adresie

Numer wersji stanowi część ścieżki. Rozwiązanie najprostsze i najbardziej czytelne: od razu widać, z której wersji korzysta dany klient, łatwo przekierować ruch i łatwo buforować. Wada — adres zasobu zmienia się między wersjami, co puryści uznają za niezgodne z zasadami projektowania interfejsów. W praktyce to najczęściej wybierany wariant.

Wersja w nagłówku

Adres pozostaje stały, a klient wskazuje wersję w nagłówku zapytania. Czystsze koncepcyjnie, ale trudniejsze do diagnozy — z samego adresu w dzienniku nie widać, której wersji użyto, a narzędzia pośredniczące i buforujące muszą uwzględniać nagłówek.

Wersja jako parametr zapytania

Kompromis między powyższymi. Łatwy do testowania w przeglądarce, ale łatwy też do pominięcia — klient, który zapomni o parametrze, dostaje wersję domyślną, a ta z czasem się zmienia.

Wersjonowanie po dacie

Zamiast numerów stosuje się datę wydania. Klient przypina się do konkretnej daty i dostaje zachowanie z tego dnia. Rozwiązanie wygodne przy częstych drobnych zmianach, ale wymagające dyscypliny w utrzymywaniu wielu wariantów zachowania jednocześnie.

Zasady, które oszczędzają kłopotów

Wycofywanie starej wersji

Utrzymywanie wersji bez końca jest równie szkodliwe jak ich brak. Każda aktywna wersja to kod, testy i przypadki do obsługi przy każdej zmianie. Proces wycofania warto opisać, zanim wydasz drugą wersję.

EtapCo robiszSygnał dla klienta
ZapowiedźOgłoszenie daty wycofania i ścieżki migracjiKomunikat bezpośredni i w dokumentacji
OznaczenieOdpowiedzi starej wersji niosą informację o wycofaniuNagłówek z datą zakończenia wsparcia
MonitoringObserwacja, kto nadal korzysta ze starej wersjiKontakt indywidualny z największymi klientami
Przerwy próbneKrótkie, zapowiedziane wyłączeniaKlienci, którzy przegapili zapowiedź, zauważają problem
WyłączenieStara wersja zwraca czytelny błąd z odesłaniem do nowejKod błędu i adres dokumentacji migracji

Okres przejściowy zależy od tego, kim są klienci. Dla wewnętrznych systemów wystarczą tygodnie. Dla partnerów zewnętrznych — miesiące. Dla aplikacji mobilnych trzeba uwzględnić użytkowników, którzy nie aktualizują aplikacji latami, i zdecydować, czy wymusić aktualizację.

Wiedza o tym, kto z czego korzysta

Nie da się rozsądnie wycofać wersji, nie wiedząc, kto jej używa. Minimum to identyfikacja klienta przy każdym zapytaniu — kluczem dostępu lub tokenem — oraz zapis wersji w dzienniku.

Dokumentacja i komunikacja

Wersjonowanie bez dokumentacji jest tylko numeracją. Klient musi wiedzieć, co się zmieniło, dlaczego i co ma zrobić.

A jeśli API ma tylko jednego klienta?

Gdy interfejs obsługuje wyłącznie własną aplikację webową wdrażaną razem z serwerem, formalne wersjonowanie bywa zbędne — obie strony zmieniają się jednocześnie. Sytuacja zmienia się w momencie pojawienia się aplikacji mobilnej, integracji z systemem partnera albo drugiego zespołu korzystającego z interfejsu. Warto przewidzieć ten moment i zaprojektować strukturę adresów tak, żeby dodanie wersji nie wymagało przebudowy.

Przy integracjach z systemami zewnętrznymi warto też zajrzeć do materiału o webhookach, bo zmiany w formacie powiadomień podlegają tym samym zasadom. Więcej o budowie systemów integrujących się z otoczeniem znajdziesz na stronie aplikacje webowe.

Najczęstsze błędy przy wersjonowaniu

Wspólną przyczyną tych błędów jest traktowanie wersjonowania jako decyzji technicznej, a nie organizacyjnej. Numer wersji jest najprostszą częścią — trudniejsze jest ustalenie, kto decyduje o wydaniu nowej, jak długo trwa wsparcie i kto rozmawia z partnerami.

Warto też pamiętać, że wersjonowanie nie zwalnia z dbania o stabilność w obrębie jednej wersji. Partner, który raz zintegrował się z interfejsem, oczekuje, że będzie on działał tak samo przez cały zapowiedziany okres wsparcia — łącznie z formatem błędów, limitami zapytań i czasem odpowiedzi.

Podsumowanie

API, z którego korzysta choć jeden zewnętrzny system, jest umową, a nie wewnętrznym szczegółem implementacji. Wersjonowanie pozwala tę umowę rozwijać: zmiany zgodne wstecz wprowadza się swobodnie, niezgodne — w nowej wersji działającej obok starej przez zapowiedziany czas.

Jeśli budujesz interfejs od zera, oznacz wersję w adresie od pierwszego wydania i zapisz w dokumentacji wymóg ignorowania nieznanych pól. Te dwie decyzje kosztują kilka minut, a oszczędzają najtrudniejszych rozmów z partnerami — tych, które zaczynają się od zdania „od wczoraj nic nam nie działa".

Najczęstsze pytania

Przy każdej zmianie niezgodnej wstecz: usunięciu lub zmianie nazwy pola, zmianie typu albo formatu danych, dodaniu obowiązkowego parametru, zaostrzeniu walidacji lub zmianie znaczenia istniejącego pola. Dodanie opcjonalnego pola lub nowego punktu dostępu nie wymaga nowej wersji.

Najczęściej wybieranym i najbardziej praktycznym rozwiązaniem jest numer w adresie, bo od razu widać wersję w dziennikach i łatwo kierować ruchem. Wersja w nagłówku jest czystsza koncepcyjnie, ale trudniejsza w diagnozie. Ważniejsza od formatu jest konsekwencja i jasno opisana wersja domyślna.

Zależy od klientów: przy systemach wewnętrznych wystarczą tygodnie, przy partnerach zewnętrznych miesiące, a przy aplikacjach mobilnych trzeba uwzględnić użytkowników, którzy nie aktualizują aplikacji. Kluczowe jest zapowiedzenie daty wycofania z wyprzedzeniem i monitorowanie, kto nadal korzysta ze starej wersji.

Zmiana znaczenia pola przy zachowaniu jego nazwy i typu, na przykład podawanie kwoty netto zamiast brutto. Integracja nie zgłasza wtedy żadnego błędu, tylko po cichu przetwarza nieprawidłowe dane. Taką zmianę zawsze wprowadza się jako nowe pole lub w nowej wersji.

Gdy interfejs obsługuje wyłącznie własną aplikację webową wdrażaną razem z serwerem, formalne wersjonowanie bywa zbędne. Staje się konieczne w momencie pojawienia się aplikacji mobilnej, integracji partnera lub drugiego zespołu, dlatego warto od początku projektować adresy tak, by wersję dało się łatwo dodać.

Convert Studio realizuje projekty z tego obszaru dla firm w całej Polsce. Zobacz: Aplikacje webowe → · Lokalizacje →

Bezpłatna wycena Twojego projektu

Opisz w kilku zdaniach, co chcesz zbudować — stronę, aplikację czy sklep. Odpowiadamy w ciągu 24 godzin roboczych konkretną propozycją zakresu i harmonogramu. Konsultacja i wycena są bezpłatne, bez zobowiązań.

Odpowiedź w 24 h roboczych. Dane wykorzystujemy wyłącznie do kontaktu w sprawie zapytania — polityka prywatności.