w dniu
architecture
design-patterns
devops
quality
- Pobierz link
- X
- Inne aplikacje
W architekturze mikroserwisów komunikacja między usługami to chleb powszedni. Serwis A woła B, B woła C, a C czasem pyta jeszcze o coś D... I wszystko działa — do pierwszej zmiany w jednym z tych komponentów.
Zamiast "to się chyba uda", lepiej postawić na testy kontraktowe, a konkretnie na podejście Consumer-Driven Contract (CDC). To technika, która pozwala upewnić się, że komunikujące się systemy rozumieją się bez niedomówień.
To umowa między usługą kliencką (consumer) a usługą dostarczającą dane (provider).
Kontrakt opisuje co dokładnie oczekuje klient, a testy sprawdzają, czy dostawca spełnia te wymagania.
Nie chodzi tu o pełne testy integracyjne – tylko o weryfikację zachowania w określonych scenariuszach komunikacyjnych.
W podejściu CDC:
Klient definiuje kontrakt – np. jaką strukturę odpowiedzi HTTP oczekuje po zapytaniu GET /orders/{id}
.
Kontrakt jest zapisywany jako artefakt (np. plik .json
, .yml
, .pact
).
Dostawca (provider) implementuje API, które musi spełniać oczekiwania konsumentów.
W CI/CD kontrakt jest weryfikowany po stronie providera, by uniknąć regresji.
Załóżmy, że aplikacja frontendowa (consumer) oczekuje takiej odpowiedzi z serwisu zamówień:
{
"id": "abc123",
"status": "DELIVERED",
"total": 99.99
}
Konsument definiuje kontrakt:
const provider = new Pact({
consumer: 'Frontend',
provider: 'OrderService',
});
provider
.given('Order exists')
.uponReceiving('a request for order details')
.withRequest({
method: 'GET',
path: '/orders/abc123',
})
.willRespondWith({
status: 200,
body: {
id: like('abc123'),
status: like('DELIVERED'),
total: like(99.99),
},
});
📤 Kontrakt jest publikowany do brokera (np. Pactflow), a provider w swoim CI odpala testy, które go weryfikują.
✅ Zwiększasz pewność, że nie złamiesz kompatybilności
✅ Wcześnie wykrywasz konflikty między zespołami
✅ Odchudzasz testy E2E (bo nie musisz testować wszystkiego z wszystkimi)
✅ Automatyzujesz weryfikację zgodności API
✅ Ułatwiasz niezależne wdrażanie mikroserwisów
🔴 Zmiana API w jednym mikroserwisie powoduje błędy w innym (niespójność)
🔴 Brak testów integracyjnych → produkcja testuje za nas
🔴 "Ale przecież dokumentacja mówiła inaczej..."
🔴 Trudność w wersjonowaniu i utrzymaniu API
Narzędzie | Język / Ekosystem | Uwagi |
---|---|---|
Pact | Java, JS, Python, .NET | Najpopularniejsze narzędzie CDC |
Spring Cloud Contract | Java | Integracja z Spring Boot |
Hoverfly | HTTP proxy, języki dowolne | Simulacja usług w testach |
ContractTest | JS, REST | Lekkie testy kontraktowe |
Zdefiniuj kontrakt po stronie klienta (frontend, inny mikroserwis)
Publikuj kontrakt do repozytorium (broker)
W CI providera uruchamiaj testy weryfikujące kontrakt
Nie wdrażaj providerów, którzy łamią oczekiwania klientów
Automatyzuj ten proces w CI/CD
Testy kontraktowe i podejście CDC to must-have w ekosystemie mikroserwisów:
🔹 Gwarantują kompatybilność usług
🔹 Ułatwiają komunikację między zespołami
🔹 Wzmacniają kulturę DevOps i ciągłą integrację
🔹 Ograniczają chaos wersjonowania API
Komentarze
Prześlij komentarz