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). 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. Das Befehlsmuster ermöglicht das Kapseln von Anforderungen als Objekte, wodurch Clients mit unterschiedlichen Anforderungen parametrisiert werden können. Die “Prüfung” bei einem Diner ist ein Beispiel für ein Befehlsmuster. Der Kellner oder die Kellnerin nimmt eine Bestellung oder einen Befehl von einem Kunden entgegen und kapselt diese Bestellung ein, indem er sie in den Scheck schreibt. Die Bestellung wird dann für einen Kurzbestellkoch in die Warteschlange gestellt.

Beachten Sie, dass das Pad der “Prüfungen”, die von jedem Kellner verwendet werden, nicht vom Menü abhängig ist und daher Befehle zum Kochen vieler verschiedener Elemente unterstützen kann. Während wir in unserem Fall einen Methodenaufruf auf der Clientseite haben könnten, wie im Falle von RPC, sind wir jedoch nicht an eine bestimmte Semantik gebunden, während wir Nachrichten im Asynchronous Request Response-Muster freigeben. Die freigegebenen Nachrichten können verwendet werden, um eine Methode aufzurufen, oder bestätigen Einfach die Empfangsbestätigung und antworten mit einer Meldung, die den Speicherort oder die zukünftige Verfügbarkeit der verarbeiteten Informationen angibt. 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. Wie bei jeder herkömmlichen Unterhaltung, an der Teilnehmer beteiligt sind, hat auch die asynchrone Anforderungs-Antwort-Konversation folgende Teilnehmer: 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. 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.

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. Die meisten der Kommunikation, die wir im Web machen, ist “synchron”. Hauptsächlich dem Protokoll zugeschrieben, das wir für diese Kommunikation verwenden, d. h. HTTP (das Request-Response- oder Request-Response-Muster verwendet) In einigen Szenarien kann die Arbeit, die von Backend ausgeführt wird, jedoch in der Reihenfolge von Sekunden lang andauern 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. Sie müssen Anforderungen an Objekte stellen, ohne etwas über den angeforderten Vorgang oder den Empfänger der Anforderung zu wissen. Die Funktion AsyncOperationStatusChecker implementiert den Statusendpunkt.

Diese Funktion überprüft zunächst, ob die Anforderung abgeschlossen wurde Jedoch bedeutet das Leistungsleistungs- und das am häufigsten verwendete Muster nicht, dass es ohne eine Liste seiner eigenen Herausforderungen kommt.