View a markdown version of this page

AWS AppSync JavaScript Resolver-Funktionsreferenz für Lambda - AWS AppSync GraphQL

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

AWS AppSync JavaScript Resolver-Funktionsreferenz für Lambda

Sie können AWS AppSync Funktionen und Resolver verwenden, um Lambda-Funktionen aufzurufen, die sich in Ihrem Konto befinden. Sie können Ihre Anforderungsnutzlasten und die Antwort Ihrer Lambda-Funktionen formen, bevor Sie sie an Ihre Kunden zurückgeben. Sie können auch die Art der Operation angeben, die in Ihrem Anforderungsobjekt ausgeführt werden soll. In diesem Abschnitt werden die Anforderungen für die unterstützten Lambda-Operationen beschrieben.

Objekt anfordern

Das Lambda-Anforderungsobjekt verarbeitet Felder, die sich auf Ihre Lambda-Funktion beziehen:

export type LambdaRequest = { operation: 'Invoke' | 'BatchInvoke'; invocationType?: 'RequestResponse' | 'Event'; payload: unknown; };

Hier ist ein Beispiel, das eine invoke Operation verwendet, deren Nutzdaten das getPost Feld aus einem GraphQL-Schema zusammen mit den Argumenten aus dem Kontext sind:

export function request(ctx) { return { operation: 'Invoke', payload: { field: 'getPost', arguments: ctx.args }, }; }

Das gesamte Mapping-Dokument wird als Eingabe an Ihre Lambda-Funktion übergeben, sodass das vorherige Beispiel jetzt so aussieht:

{ "operation": "Invoke", "payload": { "field": "getPost", "arguments": { "input": { "id": "postId1", } } } }

Operation

Mit der Lambda-Datenquelle können Sie zwei Operationen im operation Feld definieren: Invoke und. BatchInvoke Die Invoke Operation AWS AppSync informiert Sie darüber, dass Sie Ihre Lambda-Funktion für jeden GraphQL-Feldresolver aufrufen müssen. BatchInvokeweist an, Anfragen für AWS AppSync das aktuelle GraphQL-Feld zu stapeln. Das Feld operation ist ein Pflichtfeld.

Denn die Invoke aufgelöste Anfrage entspricht der eingegebenen Nutzlast der Lambda-Funktion. Lassen Sie uns das obige Beispiel ändern:

export function request(ctx) { return { operation: 'Invoke', payload: { field: 'getPost', arguments: ctx.args }, }; }

Das wird gelöst und an die Lambda-Funktion übergeben, die etwa so aussehen könnte:

{ "operation": "Invoke", "payload": { "arguments": { "id": "postId1" } } }

Denn BatchInvoke die Anfrage wird auf jeden Feldresolver im Batch angewendet. Führt aus Gründen der Übersichtlichkeit alle payload Anforderungswerte in einer Liste unter einem einzigen Objekt zusammen, das dem Anforderungsobjekt entspricht. AWS AppSync Das folgende Beispiel für einen Request-Handler zeigt die Zusammenführung:

export function request(ctx) { return { operation: 'Invoke', payload: ctx, }; }

Diese Anfrage wird ausgewertet und im folgenden Zuordnungsdokument aufgelöst:

{ "operation": "BatchInvoke", "payload": [ {...}, // context for batch item 1 {...}, // context for batch item 2 {...} // context for batch item 3 ] }

Jedes Element der payload Liste entspricht einem einzelnen Batchelement. Es wird auch erwartet, dass die Lambda-Funktion eine listenförmige Antwort zurückgibt, die der Reihenfolge der in der Anfrage gesendeten Elemente entspricht:

[ { "data": {...}, "errorMessage": null, "errorType": null }, // result for batch item 1 { "data": {...}, "errorMessage": null, "errorType": null }, // result for batch item 2 { "data": {...}, "errorMessage": null, "errorType": null } // result for batch item 3 ]

Nutzlast

Das payload Feld ist ein Container, der verwendet wird, um Daten an die Lambda-Funktion zu übergeben. Wenn das operation Feld auf gesetzt istBatchInvoke, fasst AWS AppSync die vorhandenen payload Werte in eine Liste ein. Das Feld payload ist optional.

Aufruftyp

Mit der Lambda-Datenquelle können Sie zwei Aufruftypen definieren: und. RequestResponse Event Die Aufruftypen sind gleichbedeutend mit den in der Lambda-API definierten Aufruftypen. https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html Mit dem RequestResponse Aufruftyp können AWS AppSync Sie Ihre Lambda-Funktion synchron aufrufen, um auf eine Antwort zu warten. Der Event Aufruf ermöglicht es Ihnen, Ihre Lambda-Funktion asynchron aufzurufen. Weitere Informationen darüber, wie Lambda Anfragen vom Aufruftyp verarbeitet, finden Sie unter Asynchroner Event Aufruf. https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html Das Feld invocationType ist optional. Wenn dieses Feld nicht in der Anfrage enthalten ist, AWS AppSync wird standardmäßig der Aufruftyp verwendet. RequestResponse

Für jedes invocationType Feld entspricht die gelöste Anforderung der Eingabe-Nutzlast der Lambda-Funktion. Lassen Sie uns das obige Beispiel ändern:

export function request(ctx) { return { operation: 'Invoke', invocationType: 'Event', payload: { field: 'getPost', arguments: ctx.args }, }; }

Das wird gelöst und an die Lambda-Funktion übergeben, die etwa so aussehen könnte:

{ "operation": "Invoke", "invocationType": "Event", "payload": { "arguments": { "id": "postId1" } } }

Wenn die BatchInvoke Operation in Verbindung mit dem Feld für den Event Aufruftyp verwendet wird, wird der Feld-Resolver auf die oben beschriebene Weise AWS AppSync zusammengeführt, und die Anforderung wird als asynchrones Ereignis an Ihre Lambda-Funktion übergeben, wobei es sich um eine Liste von Werten handelt. payload Die Antwort auf eine Anfrage vom Event Aufruftyp ergibt einen Wert ohne Antworthandler: null

{ "data": { "field": null } }

Wir empfehlen, das Resolver-Caching für Resolver vom Event Aufruftyp zu deaktivieren, da diese bei einem Cache-Treffer nicht an Lambda gesendet würden.

Antwortobjekt

Wie bei anderen Datenquellen sendet Ihre Lambda-Funktion eine Antwort, die in einen GraphQL-Typ AWS AppSync konvertiert werden muss. Das Ergebnis der Lambda-Funktion ist in der context Ergebniseigenschaft () enthalten. context.result

Wenn die Form Ihrer Lambda-Funktionsantwort der Form des GraphQL-Typs entspricht, können Sie die Antwort mithilfe des folgenden Funktionsantworthandlers weiterleiten:

export function response(ctx) { return ctx.result }

Es gibt keine erforderlichen Felder oder Formbeschränkungen, die für das Antwortobjekt gelten. Da GraphQL jedoch stark typisiert ist, muss die aufgelöste Antwort dem erwarteten GraphQL-Typ entsprechen.

Batch-Antwort der Lambda-Funktion

Wenn das operation-Feld auf BatchInvoke festgelegt ist, erwartet AWS AppSync eine Liste mit Elementen aus der Lambda-Funktion. Damit jedes Ergebnis wieder AWS AppSync dem ursprünglichen Anforderungselement zugeordnet werden kann, muss die Antwortliste in Größe und Reihenfolge übereinstimmen. Es ist gültig, null Elemente in der Antwortliste zu haben; ctx.result ist entsprechend auf Null gesetzt.