8

Ich könnte einzelne http Antwort Header über API Gateway Integration Antwort Header Mapping.
in diesem Fall i context.fail("http://www.google.com") Antwort von aws Lambda und verwenden regex („.http.“) Gab die Antwort zu identifizieren und schließlich wie diese
Location: integration.response.body.errorMessage meinen Kopf kartieren.
Dies funktioniert, wenn ich versuche, einen einzelnen Header auf einmal zuzuordnen.
Aber ich möchte beide Location und Cookie-Header in einer einzigen Antwort setzen. dies zu erreichen, kehrte ich eine json von meinem aws Lambda wieMap mehrere HTTP-Antwort Header in AWS API Gateway mit AWS Lambda Response Body

context.fail(JSON.stringify({Location:"http://www.google.com",Cookie: vid="233kwer34343"})) 

aber ich Header Karte konnte nicht über integration.response.body.errorMessage.Location und integration.response.body.errorMessage.Cookie

Es ist möglich, dies zu tun, indem context.succeed() statt context.fail() verwenden. aber das überprüft Regex nicht. Ich möchte Regex für die Kategorisierung von Antworten überprüfen.

Was ist die beste Möglichkeit, mehrere Antwortheader vom Lambda-Antworttext abzubilden?

Antwort

0

Dies liegt nicht am API Gateway oder an mehreren Headern. Bitte beachten Sie, dass der Location-Header nur zum Redirect (3xx) oder erfolgreichen Prozess (2xx) der Anfrage hinzugefügt wird. Es wird nicht hinzugefügt werden, wenn Rückkehrcode Fehler (4xx, 5xx) usw.

Weitere Details hier - https://en.wikipedia.org/wiki/HTTP_location

Dies ist der Grund, warum es für context.succeed gearbeitet() und nicht für den Kontext nicht funktioniert. Scheitern().

+0

es ist okey .. aber sagen Sie mir eine Möglichkeit, mehrere Header mit context.fail() -Methode zuordnen. es kann irgendwelche Überschriften sein. nicht Standortkopf –

+0

Ich bin mir nicht sicher, ob das möglich ist. Was auch immer Sie an context.fail() senden, wird als JSON-Wert hinzugefügt. wie folgt: { "errorMessage": "{\" Location \ ":" http: //www.google.com \ ", \" Cookie \ ": \" 233kwer34343 \ "}" }. Sie können die Fehlermeldung wie folgt erhalten - integration.response.body.errorMessage. Vielleicht kann jemand mit tiefer JSON-Analyseerfahrung klären, ob wir das weiter analysieren können. –

+0

yaa ... das ist das Problem. Ich habe den Inhalt in "errorMessage". Aber wie könnten wir hier auf einzelne Werte wie - integration.response.body.errorMessage.Location oder integration.response.body.errorMessage.Cookie zugreifen. Momentan passiert es nicht. –

0

Ich glaube nicht, dass Sie dies mit context.fail arbeiten können. Das Problem ist, dass der an context.fail übergebene Parameter eine einfache Zeichenfolge ist. Diese Zeichenfolge wird dann in eine JSON-Zeichenfolge codiert und dann als ein Sting-Wert innerhalb eines Attributs namens "errorMessage" an API Gateway übergeben.

Die Antwort Körper von Lambda sieht wie folgt aus etwas kommen: { "errormessage": "{\" Location \ ": \" http://www.google.com \“, \ "Cookie \": \ "vid = '233kwer34343' \"} "}

Beachten Sie, dass der Wert von errorMessage eine Zeichenfolge mit den Sonderzeichen masked ist, anstatt ein Json-Objekt. Es gibt keine Möglichkeit, eine Header-Zuordnung in integration.response.body.errorMessage zu suchen, diese Zeichenfolge in json zu analysieren und das location-Attribut des resultierenden json-Objekts abzurufen.

Wenn Sie die Werte als Antworttext und nicht als Header zurückgeben, können Sie mit velocity den Inhalt von errorMessage analysieren und in den gewünschten Antworttext umwandeln. Leider haben Header-Mappings nicht die volle Verarbeitungsleistung/Flexibilität der Geschwindigkeitsvorlagen.

Warum müssen Sie in diesem Fall context.fail aufrufen?

Wenn Sie context.done rufen Sie json als Körper wie zurückgeben: { "Location": "http://www.google.com", "Cookie": "vid = '233kwer34343'"}

Dann werden die Header-Zuordnungen sind nur integration.response.body.Location und integration.response.body.Cookie

+0

Antwort für: "Warum müssen Sie context.fail in diesem Fall aufrufen?" Mein Grundbedarf besteht darin, verschiedene Header in verschiedenen Anwendungsfällen zu setzen. Ich konnte nicht mehrere Antwortcodes wie 200,210 zuordnen, wenn ich context.succeed() verwende. Die Regex-Überprüfung findet dort nicht statt. Deshalb verwende ich context.fail() und versuche, mehrere Antwortcodes zuzuordnen. In jedem Antwortcode versuchte ich, verschiedene Header zuzuordnen. –

+0

Gibt es eine Möglichkeit, Regex des Antwortkörpers zu überprüfen und sie an bestimmte Erfolgsantwortcodes zu verweisen? Kann ich context.succeed() in meiner Lambda-Funktion verwenden und mehrere Erfolgs-Response-Codes verwenden? –

Verwandte Themen