Ist es möglich, in AWS API Gateway Wildcards oder Catch-All-Pfade zu verwenden?

8

Ich versuche, den gesamten Datenverkehr für eine Domain auf eine andere Domain umzuleiten. Anstatt einen Server speziell für diesen Job auszuführen, habe ich versucht, AWS API Gateway mit Lambda zu verwenden, um die Umleitung durchzuführen.

Ich habe das funktioniert ok für den Stammpfad "/", aber alle Anfragen für Teilwege, z. / a werden nicht behandelt. Gibt es eine Möglichkeit, eine "alle capturen" Ressource oder Wildcard-Pfad-Handler zu definieren?

    
David Goate 03.03.2016, 13:05
quelle

4 Antworten

11

Ab der letzten Woche unterstützt das API-Gateway nun sogenannte "Catch-all Path-Variablen".

Ausführliche Informationen und einen Rundgang hier: API Gateway Update - Neue Funktionen vereinfachen die API-Entwicklung

    
Avi Flax 25.09.2016, 14:06
quelle
8

Update: Ab der letzten Woche unterstützt API Gateway nun sogenannte Catch-all Path-Variablen. Siehe API Gateway Update - Neue Funktionen API-Entwicklung vereinfachen .

Sie müssen leider für jedes Level eine Ressource erstellen. Der Grund hierfür ist, dass Sie mit API Gateway über ein Objekt auf diese Parameter zugreifen können.

Zum Beispiel: method.request.path.XXXX

Wenn du also nur /{param} benutzt hättest, könntest du mit method.request.path.param darauf zugreifen, aber wenn du einen verschachtelten Pfad hast (Params mit Schrägstrichen), würde es nicht funktionieren. Sie erhalten auch eine 404 für die gesamte Anfrage.

Wenn method.request.path.param stattdessen ein Array wäre, dann könnte es params nach Position erhalten, wenn es nicht benannt wird. Zum Beispiel method.request.path.param[] ... Named Params könnten sogar unter dort gehandhabt werden, aber auf sie zuzugreifen wäre nicht wirklich einfach. Es müsste etwas JSON-Pfad-Mapping verwendet werden (denken Sie daran, was Sie mit ihren Mapping-Templates machen können). Leider wird dies nicht in API Gateway gehandhabt.

Ich denke aber, dass es in Ordnung ist, weil dadurch das Konfigurieren von API Gateway noch komplexer wird. Es begrenzt jedoch auch das API-Gateway und um mit dieser Situation fertig zu werden, wird es letztendlich zu einer verwirrenderen Konfiguration kommen.

Also, du kannst den langen Weg hier gehen. Erstellen Sie die gleiche Methode für mehrere Ressourcen und tun Sie etwas wie: /{1}/{2}/{3}/{4}/{5}/{6}/{7} und so weiter. Dann können Sie bei Bedarf jede Pfadparameterebene behandeln.

Wenn die Anzahl der Parameter immer gleich ist, dann sind Sie ein bisschen glücklicher und müssen nur eine Reihe von Ressourcen einrichten, aber eine Methode am Ende.

Quelle: Ссылка

    
Tom 25.03.2016 22:27
quelle
2

Sie können eine Ressource mit einem Pfad wie /{thepath+} erstellen. Pluszeichen ist wichtig.

Dann können Sie in Ihrer Lambda-Funktion auf den Wert mit beiden

zugreifen
  • event.path - enthält immer den vollständigen Pfad
  • oder event.queryPathParameters.thepath - enthält den von Ihnen definierten Teil. Andere mögliche Anwendungsfälle: Definieren Sie Ressourcen wie /images/{imagepath+} , um nur Pfade mit einem bestimmten Präfix zu vergleichen. Die Variable enthält nur den Unterpfad.

Sie können alle Werte debuggen, die an Ihre Funktion übergeben werden: JSON.stringify(event)

Vollständige Dokumentation

    
geekQ 15.11.2016 11:05
quelle
1

Sie können eine Ressource mit der Pfadvariablen /{param} erstellen und dies als Platzhalter für den Platzhalter behandeln.

Danke, - Ka Hou

    
Ka Hou Ieong 03.03.2016 20:35
quelle

Tags und Links