Durch das Verwerfen von REST verlieren Sie viel mehr als nur HATEOAS. Wenn Ihre Microservices öffentlich sind (und es eine gute Idee ist, dass sie öffentlich sind oder zumindest dazu tendieren, eines Tages öffentlich zu sein¹), ist die Verwendung von etwas anderem als REST und SOAP problematisch:
Einige Entwickler haben noch nie AMQP verwendet.
Einige haben AMQP verwendet, sind aber häufig mit REST und SOAP besser vertraut.
AMQP-Bibliotheken für einige Sprachen sind nicht besonders einfach.
Das manuelle Experimentieren mit dem Dienst ist sehr begrenzt: Ich kann CURL verwenden, um alle Anforderungen an Amazon S3 zu richten. Was muss ich auf meinem Computer installieren , wenn ich mit einer AMQP-Variante von S3 spielen möchte?
Das Debuggen von REST und SOAP ist einfach. Ich verfolge nur den HTTP-Austausch und analysiere ihn. Ich bin nicht sicher, mit welchen Tools ich AMQP-Austausche debuggen soll.
AMQP ist großartig, wird jedoch für einen ganz bestimmten Zweck des Austauschs auf der Grundlage von Ereignissen durchgeführt. Obwohl es technisch möglich ist, RPC mit AMQP zu erstellen, ist dies nicht der primäre Zweck.
Der asynchrone Aspekt ist ebenfalls wichtig. Manchmal ist es ein Vorteil: Ich möchte die Benutzeroberfläche einer App nicht blockieren, während Anfragen an Server gestellt werden. Manchmal macht es die Dinge nur schwieriger, als sie sein müssen: Wenn ich eine Dateisicherung von Amazon S3 wiederherstellen muss, weil die lokale beschädigt war, und dann die Sicherung wiederherstellen möchte, benötigt meine Batchdatei unbedingt CURL, um ihren Job zu beenden, bevor ich fortfahre. und ein synchroner Betrieb (mit einer bestimmten Zeitüberschreitung) ist vollkommen sinnvoll.
Behalten Sie REST für primäre Operationen bei:
und verwenden Sie AMQP für die Aufgaben, bei denen Messaging tatsächlich Sinn macht:
Verarbeitung aller Rechnungen ab September und Benachrichtigung der App, wenn der Bericht angezeigt werden kann (da der Vorgang normalerweise zwei bis zehn Minuten dauert),
Der Vorteil von AMQP ist hier der asynchrone Aspekt. Bei einer seit zehn Minuten anstehenden HTTP-Anforderung besteht eine gute Wahrscheinlichkeit, dass eine Zeitüberschreitung und andere Probleme auftreten.
Versenden der Informationen, dass die Sicherungen beschädigt wurden, an alle Interessenten, z. B. Supportmitarbeiter, Datenbankadministratoren, Überwachungsteams, Entwickler der Anwendung, die diese Datenbank verwendet, usw.
Der Vorteil von AMQP besteht unter anderem in der Möglichkeit, die Abonnenten hinzuzufügen, ohne die Anwendung zu ändern, die Sicherungen verfolgt und die Warnung auslöst, wenn eine beschädigte Anwendung gefunden wird.
¹ Ein öffentlicher Webdienst wird nicht unbedingt von Benutzern außerhalb eines Unternehmens verwendet. In großen oder mittelgroßen Unternehmen wird Ihr Service oft von anderen Abteilungen desselben Unternehmens genutzt und hat die gleichen Anforderungen wie derjenige, der von Dritten genutzt wird: Er sollte jedem Anruf misstrauen (der Tatsache, dass jemand Ihnen nie begegnet Wenn Sie erfahren, wer Ihren Service in der gleichen Firma anruft, die Sie auch haben, bedeutet dies nicht, dass er seine Sicherheitsprobleme nicht ausnutzt. Es sollte ordnungsgemäß dokumentiert werden (da derselbe Inder nicht unbedingt Ihre Telefonnummer kennt und auch nicht unbedingt Englisch sprechen usw.
Verwende beide.
JSON - Webdienste im REST - Stil eignen sich hervorragend für die Interoperabilität mit Javascript, iOS usw
AMQP eignet sich hervorragend für lang laufende Prozesse, Ereignisse und die Orchestrierung von Microservices.
Beide sind jedoch nur Kommunikations-Wrapper für den eigentlichen Dienst. Sie können denselben Dienst auf verschiedene Arten verfügbar machen und sollten dies wahrscheinlich tun.
AMPQ kann über Websockets, die einem REST-Endpunkt ähneln, wenn Sie darauf blinzeln, gut belichtet werden.
quelle
REST ist eine Standardtechnologie, die sich besonders für die Interoperabilität zwischen Komponenten eignet. Dies ist der Schlüssel, der sich hervorragend dazu eignet, einen Webdienst zu erstellen, den andere nutzen können. Es leidet jedoch an den üblichen Problemen einer solchen Interoperabilität, da es weniger effizient ist als ein benutzerdefiniertes Protokoll.
Wenn Sie eine Back-End-Architektur schreiben, bei der die Dienste nur von Ihnen selbst genutzt werden, können Sie jedes gewünschte Protokoll verwenden. Sie müssen kein so interoperables Protokoll mehr verwenden. Sie können ein MQ oder etwas enger gekoppeltes und performantes verwenden. Welchen Sie verwenden, hängt von Ihrem Anwendungsfall ab. Ein Nachrichtenbus eignet sich sehr gut für verteilte Dienste, die Daten verarbeiten, bei denen es dem Client egal ist, wer die von ihm gesendeten Nachrichten erhält.
quelle
202
Asynchronität diktiert, aber warum haben Sie REST verwenden dann? Wahrscheinlich , weil es die Öffentlichkeit.)AMQP unterstützt auch die Punkt-zu-Punkt-Kommunikation (siehe beispielsweise das
python-qpid-proton
Lernprogramm). Damit könnten Sie eine RESTful-Schnittstelle implementieren, da REST!=
HTTP.AMQP bietet auch eine viel bessere Leistung als HTTP.
quelle