Mamy projekt, w którym ten sam zespół opracuje kod interfejsu użytkownika, ale w innym języku (Python / Django) niż warstwa usług (REST / Java). Kod dla każdej warstwy jest zamykany w różnych repozytoriach kodów i które mogą podlegać różnym cyklom wydania. Próbuję wymyślić proces, który zapobiegnie / ograniczy przełamywanie zmian w warstwie usług z perspektywy warstwy interfejsu użytkownika.
Myślałem o napisaniu testów integracyjnych na poziomie warstwy interfejsu użytkownika, które będziemy uruchamiać za każdym razem, gdy budujemy interfejs użytkownika lub warstwę usług (używamy Jenkinsa jako naszego narzędzia CI do tworzenia kodu, który jest w dwóch repozytoriach Git) i jeśli są awarie, wtedy coś w warstwie usług zepsuło się i zatwierdzenie nie jest akceptowane.
Czy dobrym pomysłem byłoby (czy jest to najlepsza praktyka?), Aby twórca warstwy usług utworzył i utrzymywał bibliotekę kliencką dla usługi REST, która istnieje w warstwie interfejsu użytkownika, którą będą aktualizować za każdym razem, gdy nastąpi przełomowa zmiana w ich interfejs API usługi? Można sobie wyobrazić, że mielibyśmy wtedy przewagę nad statycznym interfejsem API, na którym opiera się kod interfejsu użytkownika. Jeśli interfejs API biblioteki klienta ulegnie zmianie, kod interfejsu użytkownika nie zostanie skompilowany (więc wcześniej dowiemy się, że nastąpiła przełomowa zmiana). Nadal przeprowadzałbym testy integracji po zbudowaniu interfejsu użytkownika lub warstwy usług, aby dodatkowo sprawdzić, czy integracja między interfejsem użytkownika a usługą (usługami) nadal działa.