Gibt es eine Möglichkeit, die von Amazon API Gateway zurückgegebenen http-Statuscodes zu ändern?
Zum Beispiel, wenn ich will, um wieder eine bestimmte 400-Fehler bei ungültigen Parametern oder vielleicht a 201, wenn die lambda-Funktion Aufruf führte zu einer erstellen.
Ich würde gerne verschiedene http-status-codes, aber es sieht aus wie api-gateway gibt immer einen Statuscode 200, auch wenn der lambda-Funktion einen Fehler.
InformationsquelleAutor der Frage MonkeyBonkey | 2015-07-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Update pro 20-9-2016
Amazon schließlich diesen einfach mit der Lambda-Proxy-integration. Dies ermöglicht Ihre Lambda-Funktion zum zurückgeben der richtigen HTTP-codes und-Header:
Verabschieden Anfrage/Antwort-mapping in der API-Gateway!
Option 2
Integration eines bestehenden Express-app mit Lambda/API-Gateway mit aws-serverless-express.
InformationsquelleAutor der Antwort Eric Eijkelenboom
Hier ist der Schnellste Weg, um wieder custom-HTTP Status-Codes und einer benutzerdefinierten
errorMessage
:In der API-Gateway dashboard, tun Sie den folgenden:
Hinzufügen eines integration Antwort für jede der HTTP-Status-Codes, die Sie zuvor erstellt haben. Stellen Sie sicher, dass input-passthrough aktiviert ist. Verwenden lambda Fehler regex zu identifizieren, in welchen status-code sollte verwendet werden, wenn Sie eine Fehlermeldung zurück, die aus Ihrer lambda-Funktion. Zum Beispiel:
Ihre API-Gateway-route zurückkehren sollte:
Sehe ich keinen Weg Sie diese Einstellungen zu kopieren und wieder verwenden es für verschiedene Methoden, so haben wir viel lästige redundanten manuellen Eingabe zu tun!
Meine Integration Antworten wie folgt Aussehen:
InformationsquelleAutor der Antwort ac360
Zurückkehren zu können einen benutzerdefinierten Fehler-Objekt als JSON-Sie haben zu springen durch ein paar Reifen.
Ersten, müssen Sie nicht die Lambda und übergeben Sie stringified JSON-Objekt:
Nächsten, Sie setup die regex-mapping für jede der status-codes, die Sie möchten, um zurückzukehren. Mit dem Objekt-ich, die oben definiert Sie würden setup diese regex für 400:
.*"status":400.*
Schließlich die Einrichtung einer Mapping-Vorlage extrahieren von JSON-Antwort von der errorMessage-Eigenschaft zurückgegeben von der Lambda. Die Mapping-Vorlage sieht wie folgt aus:
$input.Pfad('$.errorMessage')
Schrieb ich einen Artikel über diese, die geht mehr ins detail und erklärt die Reaktion flow aus der Lambda-API-Gateway hier:
http://kennbrodhagen.net/2016/03/09/how-to-return-a-custom-error-object-and-status-code-from-api-gateway-with-lambda/
InformationsquelleAutor der Antwort kennbrodhagen
1) Konfigurieren Sie Ihren API-Gateway Ressource, die zu verwenden Lambda-Proxy-Integration durch ankreuzen der Kontrollkästchen mit der Bezeichnung " "Verwenden von Lambda-Proxy-integration" auf die "Integration Anfrage" - Bildschirm von der API-Gateway resource definition. (Oder definieren Sie es in Ihrem cloudformation/terraform/serverlose/etc config)
2) Ändern Sie Ihre lambda-code 2 Möglichkeiten
event
(1. Funktion-argument) entsprechend. Es ist nicht mehr nur der bloßen Nutzlast, es repräsentiert den gesamten HTTP-Anforderung, einschließlich Kopf -, query-string und body. Beispiel unten. Zentraler Punkt ist, dass JSON Körper Zeichenfolgen erfordern expliziteJSON.parse(event.body)
nennen (vergessen Sie nichttry/catch
etwa das). Beispiel ist unten.statusCode
body
undheaders
.body
sollte ein string sein, also tunJSON.stringify(payload)
BedarfstatusCode
kann eine Zahlheaders
ist ein Objekt der header-Namen auf WerteProbe Lambda-Ereignis-Argument für die Proxy-Integration
Beispiel Callback-Antwort-Form
Hinweise
- Ich glaube, die Methoden auf
context
wiecontext.succeed()
veraltet sind. Sie sind nicht mehr dokumentiert, obwohl Sie immer noch zu funktionieren scheint. Ich denke Codierung, um die callback-API ist die richtige Sache für die Zukunft.InformationsquelleAutor der Antwort Peter Lyons
Für diejenigen, die alles versucht, setzen auf diese Frage und konnte sich nicht diese Arbeit machen (so wie ich), überprüfen Sie die thedevkit Kommentar zu diesem Beitrag (meinen Tag gerettet):
https://forums.aws.amazon.com/thread.jspa?threadID=192918
Reproduktion ganz unten:
InformationsquelleAutor der Antwort Carlos Ballock
Der einfachste Weg, dies zu tun ist, um verwenden LAMBDA_PROXY integration. Mit dieser Methode, Sie brauchen keine speziellen Transformationen werden in API-Gateway-pipeline.
Ihre Rendite-Objekt sein müsste, ähnlich wie das snippet unter:
Es gibt auch ein paar Nachteile: so müssen besonders vorsichtig über die Fehlerbehandlung und die Kupplung Ihre lambda-Funktion an die API-Gateway-Endpunkt; das heißt, wenn Sie nicht wirklich verwenden Sie es irgendwo anders, es ist nicht so, dass viel von einem problem.
InformationsquelleAutor der Antwort Ricardo Nolde
Wollte ich immer eine Fehlermeldung von der Lambda-richtige 500 Fehler,
nach tun eine Menge Forschung, kam mit dem unten, das funktioniert:
Auf LAMBDA
Für eine gute Antwort, bin ich wieder wie folgt:
Für eine schlechte Antwort zurück, wie unten
Auf API-Gateway
Für eine GET-METHODE, sagen, der /res1/service1:
Dann,
Nun, publish /res1/service1, drücken Sie die veröffentlichte URL, der in Verbindung mit den oben lambda
Verwendet Advanced REST client (oder den Briefträger) chrome-plugin, werden Sie sehen, richtigen http-codes wie " server error (500) oder 400 statt 200 http-Antwort-code, die für alle Anforderungen, bei denen die waren in httpStatusCode.
Aus der "Dashboard" - API in der API-Gateway, können wir sehen, die http-status-codes wie unten gezeigt:
InformationsquelleAutor der Antwort Manohar Reddy Poreddy
Ich bin mit serverlose 0.5. Dies ist, wie es funktioniert, für meinen Fall
s-Funktion.json:
handler.js:
InformationsquelleAutor der Antwort Relu Mesaros
Dies ist, wie es empfohlen die AWS Compute-Blog, wenn mit API-Gateway. Überprüfen, um zu sehen, ob integration funktioniert mit direkten Lambda-Aufruf.
Für direkte Lambda-Aufrufe, dies scheint die beste Lösung zu sein-parsing auf client-Seite.
InformationsquelleAutor der Antwort spakmad