aws-api-gateway & lambda: mehrere Endpunkt/Funktionen vs einzigen Endpunkt
Habe ich eine AWS-api-Proxys lamba-Funktionen. Ich verwende derzeit verschiedene Endgeräte mit separaten lambda-Funktionen:
api.com/getData --> getData
api.com/addData --> addData
api.com/signUp --> signUp
Den Prozess zur Verwaltung aller Endpunkte und Funktionen unhandlich. Gibt es irgendwelche Nachteile, wenn ich einen einzelnen Endpunkt, um eine lambda-Funktion, die entscheidet, was zu tun basiert auf der query-string?
api.com/exec&func=getData --> exec --> if(params.func === 'getData') { ... }
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist vollkommen gültig für die Abbildung mehrerer Methoden zu einem einheitlichen lambda-Funktionen und viele Menschen sind mit dieser Methodik, die heute im Gegensatz zum erstellen einer api-gateway-Ressourcen-und lambda-Funktion für jede diskrete Methode.
Könnten Sie die Proxyfunktion alle Anfragen auf eine einzige Funktion. Werfen Sie einen Blick auf die folgende Dokumentation über die Erstellung einer API-Gateway => Lambda-proxy-integration:
http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html
Ihrem Beispiel ist hier toll. Eine Anfrage wie die folgende:
Wird wind-up-senden Sie die folgende Ereignis-Daten auf Ihre AWS Lambda-Funktion:
Jetzt haben Sie Zugriff auf alle Header, url, params, body etc. und Sie könnte verwenden, um die Anforderungen anders als in einem einzigen Lambda-Funktion (im Grunde die Umsetzung Ihrer eigenen routing).
Als eine Meinung, die ich einige Vorteile und Nachteile bei diesem Ansatz. Viele von Ihnen sind abhängig von Ihren spezifischen Anwendungsfall:
habe ich seit 5~6 microservices mit Lambda-API-Gateway, und wurde durch mehrere try & Erfolg und Misserfolg.
kurz gesagt, aus meinen Erfahrungen, ist es besser, zu delegieren alle API-Aufrufe in lambda-Ausdruck mit nur einem APIGateway wildcard-mapping, wie
wenn Sie jemals irgendwelche frameworks wie Traube Sie wissen, dass, wenn Sie APIs, Funktionen wie
"middleware"
"Globale exception-handling"
"cascade-routing"
"überprüfung der parameter"
sind wirklich entscheidend.
als Ihre API wächst, ist es fast unmöglich, zu verwalten, um alle Strecken mit API-Gateway-mapping, noch ein API-Gateway unterstützt nicht diese Funktion auch.
weiter mehr, es ist nicht wirklich praktisch zu brechen lambda für die einzelnen Endpunkte für die Entwicklung oder Bereitstellung.
durch Ihr Beispiel,
stellen Sie sich vor Sie haben Daten ORM, Benutzer-Authentifizierung Logik, common view-Datei (z.B. Daten.erb).. dann, wie Sie gonna teilen, dass?
die Sie möglicherweise können brechen,
aber nicht wie "pro Endpunkt". möglicherweise können lookup-Konzept von microservice-und best-practice-darüber, wie Sie aufgeteilt werden kann der service
für diese web-framework wie Funktionen, Kasse diese wir haben gerade gebaut web-framework für die lambda, da brauchte ich diese in meinem Unternehmen.
Ich würde kommentiert haben, fügen Sie einfach ein paar Punkte zu Dave Ahorn s Super Antwort, aber ich habe nicht genug Ruf-Punkte, doch so werde ich hinzufügen, die Kommentare hier.
Begann ich, den Kopf nach unten den Pfad, der mehrere Endpunkte zeigt auf eine Lambda-Funktion, die behandeln könnte jeden Endpunkt unterschiedlich, indem Sie auf die 'Ressource' - Eigenschaft des Ereignisses. Nach dem Versuch es, ich habe Sie jetzt getrennt in separate Funktionen, die für die Gründe, die Dave vorgeschlagen plus:
Soweit ich weiß, AWS ermöglicht nur einen handler pro Lambda-Funktion. Das ist, warum ich erstellt habe, ein wenig "routing" - Mechanismus mit Java Generics (für stärkere Typ-überprüfungen zur compile-Zeit). Im folgenden Beispiel können Sie Aufruf mehrerer Methoden und an verschiedenen Objekt-Typen in den Lambda-und zurück über eine Lambda-handler:
Lambda-Klasse mit hf:
LambdaRequest Klasse:
LambdaResponse Klasse:
Beispiel POJO-Klasse User:
JUnit-test Methode:
ps.: wenn Sie deserialisation Probleme (LinkedTreeMap kann nicht umgewandelt werden ...) Sie in Lambda-Funktion (da uf die Generika/Gson), verwenden Sie die folgende Anweisung:
Methode:
So wie ich das sehe, Auswahl single vs multiple-API ist eine Funktion von folgenden überlegungen:
Sicherheit: ich denke, das ist die größte Herausforderung, mit einer einzigen API-Struktur. Kann es möglich sein, verschiedene security-Profil für die verschiedenen Teile der Anforderung
Denke microservice-Modell aus der business-Perspektive:
Der ganze Zweck einer API dienen sollten, einige Anfragen, daher muss es gut verstanden und leicht zu bedienen. So Verwandte APIs kombiniert werden sollten. Zum Beispiel, wenn Sie ein mobile-client, und es braucht 10 Dinge gezogen zu werden, in und aus der DB, macht es Sinn, um 10 endpoints in einer einzigen API.
Aber dies sollte sich in Grund und sollte gesehen werden, die in Zusammenhang mit der Allgemeinen Lösung-design. Zum Beispiel, wenn Sie entwerfen eine Lohn-und Gehaltsabrechnung Produkt können Sie denken, separate Module für leave-management-und Benutzer-Informationen management. Auch wenn Sie oft von einem einzigen client, sollten Sie noch andere API, weil Ihre wirtschaftliche Bedeutung ist anders.
Wiederverwendbarkeit: Gilt sowohl für code und Funktionalität Wiederverwendbarkeit. Code-Wiederverwendung ist ein problem einfacher zu lösen, dh build-common-Module, die für gemeinsame Anforderungen und bauen Sie als Bibliotheken.
Funktionalität Wiederverwendbarkeit ist schwieriger zu lösen. In meinem Kopf, die meisten von die Fälle können gelöst werden, durch Neugestaltung der Wege-endpoints/Funktionen niedergelegt, weil, wenn Sie benötigen, Duplizierung von Funktionalität, dass heißt, Ihre erste design ist nicht detailliert genug.
Fand gerade eine link in dem anderen Beitrag, der fasst besser