Um diese Fälle abzufangen und den API-Vertrag für den Anbieter durchzusetzen, bevor er überhaupt eine Veröffentlichung durchsetzt, lädt der Anbieter in seiner CI-Pipeline die Verträge aller seiner Verbraucher herunter und führt die erforderlichen Anbietertests durch, um zu bestätigen, dass er nichts kaputt gemacht hat. Ungeachtet solcher Zwänge wird der Umfang eines Vertrags einfach durch den Zusammenhalt seiner Mitgliedselemente bestimmt. Ein Vertrag kann viele Elemente enthalten und einen breiten Umfang haben oder sich nur auf wenige beschränken, solange er eine gewisse Geschäftsfunktionsfähigkeit zum Ausdruck bringt. Ihre Systemtests (End-to-End- oder Integration)-Tests verwenden Mocks für die Dienste, von der das Team abhängt. Warum würden Sie sich dafür entscheiden? Anbieter können sich auch von Verbrauchern für ihre Tests entkoppeln. Pacto kann die Verträge nutzen, um Verbraucher für Anbietertests zu simulieren: Hier ist das Paktmanifest nützlich. Es wird standardmäßig getagt den Vertrag als dev, um mit zu beginnen, und später, wenn der Verbraucher das Update, dass der Anbieter implementiert und freigegeben die API eine manuelle Aktualisierung wird auf die pakt Manifest-Datei, um diesen Vertrag als prod taggen und veröffentlichen Sie es an den Broker als solchen. Wir können unsere Untersuchungen zu Vertrags- und Kopplungsproblemen beginnen, die unseren ProductSearch-Service verteufeln, indem wir uns mit dem Problem der Schemaversionierung befassen. Die WC3 Technical Architecture Group (TAG) hat eine Reihe von Versionsstrategien beschrieben, die uns helfen könnten, die Nachrichtenschemata unseres Dienstes so weiterzuentwickeln, dass unsere Kopplungsprobleme verringert werden.

Diese Strategien reichen von der übermäßig liberalen, die vorschreibt, dass Dienste nicht zwischen verschiedenen Versionen eines Schemas unterscheiden dürfen und daher alle Änderungen tolerieren müssen, bis hin zum äußerst konservativen Urknall, der den Abbruch von Diensten erfordert, wenn sie eine unerwartete Version einer Nachricht erhalten. Schemas sowohl rückwärts- als auch vorwärts kompatibel zu machen, ist eine gut verstandene Designaufgabe, die am besten durch das Must-Ignore-Muster der Erweiterbarkeit ausgedrückt wird (siehe gthe papers von David Orchard und Dare Obasanjo). Das Must-Ignorieren-Muster empfiehlt, dass Schemas Erweiterbarkeitspunkte enthalten, die das Fügen von Erweiterungselementen zu Typen und zusätzlichen Attributen zu jedem Element ermöglichen. Das Muster empfiehlt auch, dass XML-Sprachen ein Verarbeitungsmodell definieren, das angibt, wie Verbraucher Erweiterungen verarbeiten. Das einfachste Modell erfordert, dass Verbraucher Elemente ignorieren, die sie nicht erkennen – daher der Name des Musters. Das Modell erfordert möglicherweise auch, dass Verbraucher Elemente verarbeiten, die das Flag “Muss verstehen” haben, oder abbrechen, wenn sie sie nicht verstehen können. Um dies zu tun, müssen wir eine echte Instanz des API-Dienstes des Anbieters ausgliedern, vorzugsweise mit einer echten Datenbank, da es höchstwahrscheinlich notwendig sein wird, den Zustand zu mutieren. Dies bedeutet, dass es am besten geeignet ist, die Anbietervertragstests in CI auszuführen, damit die Tests näher an einem Integrations- oder End-to-End-Test sind. Wir nutzen CDC-Tests in der E2E-Phase, in der wir davon profitieren können, dass wir keine echten Drittanbieter aufbringen müssen, und unsere Anwendung/unseren Dienst in End-to-End-Strömen in einer semi-realen Umgebung testen können. Wie kann einfach getestet werden, ob ein Dienst eine API bereitstellt, die seine Clients erwarten? Durch die Verallgemeinerung dieser Struktur können wir das, was wir den Anbietervertrag bereits genannt haben, von den individuellen vertraglichen Verpflichtungen unterscheiden, die im Falle von Anbieter-Verbraucher-Beziehungen bestehen, die wir nun Verbraucherverträge nennen. Akzeptiert und übernimmt ein Anbieter die von einem Verbraucher geäußerten berechtigten Erwartungen, schließt er einen Verbrauchervertrag ab.

Dazu verwenden wir den Pakt, der eine Reihe von Bibliotheken und Rahmengebern ist, die von der Pact Foundation entwickelt und open sourced entwickelt wurden, um das Muster umzusetzen. Ein genauerer Blick in die Mechanik der Consumers-Pipeline wird weiter ein Licht auf die Vertragstests werfen, und wie ist die Interaktion mit dem Broker und Pakt Manifest Tagging. Bei der Verwendung von Microservices sind Integrationspunkte zwischen Diensten eine Hotbed für Fehler. Verbrauchergesteuerte Vertragstests sind eine Technik, bei der der Verbraucher den Vertrag definiert und überprüfungen für diesen Vertrag innerhalb des Build-/Test-Lebenszyklus der Anbieter durchgeführt werden.