Aufgrund der asynchronen Art der Kommunikation, die wir über den Anforderer / Anbieter sprechen, kann er jedoch mehrere Kommunikationen durchführen, ohne die Garantie, dass die Reihenfolge der Antworten in der Reihenfolge der Anfragen beibehalten wird (was auf die Tatsache zurückzuführen ist, dass einige Anfragen möglicherweise schneller bearbeitet werden als die anderen), müsste der Requester jede Anforderung mit einer eindeutigen Kennung ausstatten, um sie mit der ursprünglichen Kommunikation, d.h. correlationId, zu korrelieren. Sie müssen Anforderungen an Objekte stellen, ohne etwas über den angeforderten Vorgang oder den Empfänger der Anforderung zu wissen. Die API reagiert so schnell wie möglich synchron. Es gibt einen HTTP 202 (Accepted)-Statuscode zurück und bestätigt, dass die Anforderung zur Verarbeitung empfangen wurde. Die Funktion AsyncOperationStatusChecker implementiert den Statusendpunkt. Diese Funktion überprüft zunächst, ob die Anforderung abgeschlossen wurde In einigen Szenarien kann die vom Back-End ausgeführte Arbeit jedoch in der Reihenfolge von Sekunden lang andauernd ausgeführt werden oder ein Hintergrundprozess sein, der in Minuten oder sogar Stunden ausgeführt wird. In diesem Fall ist es nicht möglich, zu warten, bis die Arbeit abgeschlossen ist, bevor Sie auf die Anforderung antworten. Diese Situation ist ein potenzielles Problem für jedes synchrone Anforderungsantwortmuster. In einigen Szenarien möchten Sie Clients möglicherweise eine Möglichkeit bieten, eine lang andauernde Anforderung abzubrechen.

In diesem Fall muss der Backend-Dienst eine Form der Stornierungsanweisung unterstützen. Der folgende Code zeigt Auszüge aus einer Anwendung, die Azure Functions zum Implementieren dieses Musters verwendet. Die Lösung verfügt über drei Funktionen: Es gibt eine Reihe von Möglichkeiten, dieses Muster über HTTP zu implementieren, und nicht alle Upstreamdienste haben die gleiche Semantik. Beispielsweise geben die meisten Dienste keine HTTP 202-Antwort von einer GET-Methode zurück, wenn ein Remoteprozess noch nicht abgeschlossen ist. Nach reiner REST-Semantik sollten sie HTTP 404 (Not Found) zurückgeben. Diese Antwort ist sinnvoll, wenn Sie bedenken, dass das Ergebnis des Anrufs noch nicht vorhanden ist. Einige Architekturen lösen dieses Problem, indem sie einen Nachrichtenbroker verwenden, um die Anforderungs- und Antwortphasen zu trennen. Diese Trennung wird häufig durch die Verwendung des Queue-Based Load Leveling-Musters erreicht.

Diese Trennung kann es ermöglichen, dass der Clientprozess und die Back-End-API unabhängig skaliert werden. Diese Trennung bringt jedoch auch zusätzliche Komplexität mit sich, wenn der Client eine Erfolgsbenachrichtigung benötigt, da dieser Schritt asynchron werden muss. Die API sollte sowohl die Anforderung als auch die auszuführende Aktion überprüfen, bevor der Prozess mit langer Ausführung gestartet wird. Wenn die Anforderung ungültig ist, antworten Sie sofort mit einem Fehlercode wie HTTP 400 (Bad Request). Request-response oder Request-Reply ist eine der grundlegenden Methoden, mit denen Computer miteinander kommunizieren, wobei der erste Computer eine Anforderung für einige Daten sendet und der zweite auf die Anforderung antwortet. In der Regel gibt es eine Reihe solcher Austauschvorgänge, bis die vollständige Nachricht gesendet wird. Das Durchsuchen einer Webseite ist ein Beispiel für die Kommunikation zwischen Anforderung und Antwort. Die Anforderungsantwort kann als Telefonanruf angesehen werden, bei dem jemand angerufen wird und den Anruf entgegennimmt. Wie bei jeder herkömmlichen Unterhaltung hat auch die asynchrone Anforderungs-Antwort-Konversation folgende Teilnehmer: Das Befehlsmuster ermöglicht das Kapseln von Anforderungen als Objekte, sodass Clients mit unterschiedlichen Anforderungen parametrisiert werden können.