Rufen Sie eine Funktion auf
So rufen Sie eine bereitgestellte Funktion mit dem JavaScript SDK oder über HTTP auf und wie Ihre Funktion weiß, wer aufruft.
1. Aufruf vom SDK
invoke ist der einzige Aufruf, den ein öffentlicher Schlüssel durchführen kann. Es funktioniert in einem Browser und auf einem Server gleich.
Der generische invoke<T> gibt nur die Antwort ein. Der Name und der Text werden zur Kompilierungszeit nicht überprüft.
list, get, listJobs, enqueueJob und die anderen Verwaltungsmethoden benötigen einen service_role-Schlüssel und gehören auf Ihren Server. Ein öffentlicher Schlüssel erhält 403. Siehe wer was nennen kann.
2. Beschreiben Sie die Anfrage
Ihre Funktion empfängt genau die von Ihnen beschriebene Anfrage, keinen Wrapper darum.
| Option | Standard | Was die Funktion sieht |
|---|---|---|
method | POST | req.method |
path | / | new URL(req.url).pathname |
headers | keine | req.headers, mit Ausnahme der unten aufgeführten Plattformheader |
body | keine | await req.json() (oder req.text() für eine Zeichenfolge) |
timeout | Client-Standard (30 s) | nicht sichtbar: Bricht Ihren Anruf ab |
signal | keine | nicht sichtbar: Bricht Ihren Anruf ab |
responseType | 'json' | nicht sichtbar: Wie das SDK die Antwort dekodiert, siehe Nicht-JSON-Antworten |
Wissenswerte Regeln:
GETundHEADwerden ohne Text gesendet.- Ein Text, der keine Zeichenfolge ist, wird als JSON mit
content-type: application/jsongesendet, sofern Sie keinen festlegen. Ein -String--Körper wird unverändert gesendet und erhält auchcontent-type: application/json, also lesen Sie ihn mitreq.text(). - Ohne
bodyempfängt die Funktion eine Anfrage ohne Text. Ein bloßerawait req.json()löst aus, also schreiben Sieawait req.json().catch(() => ({})), wenn der Aufruf ohne Nutzlast erfolgen kann. - Der Körper muss JSON sein: ein Objekt, ein Array, eine Zeichenfolge, eine Zahl oder ein boolescher Wert. Ein
Blob,ArrayBuffer, typisiertes Array,FormData,URLSearchParamsoderReadableStreamwird mit dem Fehlercodeinvalid_bodyabgelehnt, bevor eine Anfrage gesendet wird. - Framing-Header (
content-length,transfer-encoding,connection,host, …) werden ignoriert.
3. Lesen Sie die Identität des Anrufers
Die Plattform validiert den Schlüssel und das Benutzertoken, bevor Ihre Funktion ausgeführt wird, und fügt dann diese Header hinzu:
| Kopfzeile | Wert |
|---|---|
x-aura-role | anon, authenticated oder service_role |
x-aura-user-id | Die Benutzer-ID, wenn x-aura-role authenticated ist, andernfalls fehlt sie |
x-aura-project-id | Die Projekt-ID |
authorization | Der JWT des Benutzers, nur für einen angemeldeten Benutzer |
apikey | Der für den Anruf verwendete Schlüssel |
Echte Ergebnisse dieses Anrufs mit drei verschiedenen Schlüsseln:
Die Plattform verwirft authorization, apikey, x-request-id und jeden x-aura-*-Header, den ein Aufrufer in headers einfügt, unabhängig von der Groß-/Kleinschreibung. Nur die Werte, die es selbst überprüft hat, erreichen Ihre Funktion. Andere benutzerdefinierte Header werden unverändert weitergeleitet.
Der x-request-id des Aufrufs wird nicht an Ihre Funktion weitergeleitet. Um einen Anruf mit einer Protokollzeile zu korrelieren, generieren Sie Ihre eigene ID, senden Sie sie in headers und protokollieren Sie sie in der Funktion.
4. Rufen Sie über HTTP auf
Senden Sie ohne das SDK ein JSON-Objekt, das die Anfrage beschreibt. Das Feld body ist das, was Ihre Funktion empfängt.
Sowohl apikey als auch Content-Type: application/json sind erforderlich. Fügen Sie Authorization: Bearer <user JWT> hinzu, um als angemeldeter Benutzer anzurufen. Die Standardantwort ist ein Umschlag; Der Header X-Aurabase-Invoke-Mode: raw gibt stattdessen die eigene Antwort Ihrer Funktion zurück, siehe Nicht-JSON-Antworten.
5. Lesen Sie das Ergebnis ab
invoke wirft nie. Es gibt { data, error } zurück:
Testen Sie data anstelle von error, wenn Sie den Wert benötigen: TypeScript weiß dann, dass es sich nicht um null handelt. Um Fehler genau zu behandeln, lesen Sie Fehler, Zeitüberschreitungen und Wiederholungsversuche.