Roep een functie aan
Hoe u een geïmplementeerde functie aanroept met de JavaScript SDK of via HTTP, en hoe uw functie weet wie er belt.
1. Bel vanuit de SDK
invoke is de enige oproep die een openbare sleutel kan maken. Het werkt hetzelfde in een browser en op een server.
De generieke invoke<T> typt alleen het antwoord. De naam en de hoofdtekst worden tijdens het compileren niet gecontroleerd.
list, get, listJobs, enqueueJob en de andere beheermethoden hebben een service_role sleutel nodig en horen op uw server. Een publieke sleutel ontvangt 403. Zie wie wat kan bellen.
2. Beschrijf het verzoek
Uw functie ontvangt precies het verzoek dat u beschrijft, en geen omhulsel eromheen.
| Optie | Standaard | Wat de functie ziet |
|---|---|---|
method | POST | req.method |
path | / | new URL(req.url).pathname |
headers | geen | req.headers, behalve de hieronder vermelde platformheaders |
body | geen | await req.json() (of req.text() voor een tekenreeks) |
timeout | standaard client (30 s) | niet zichtbaar: annuleert uw oproep |
signal | geen | niet zichtbaar: annuleert uw oproep |
responseType | 'json' | niet zichtbaar: hoe de SDK het antwoord decodeert, zie niet-JSON-antwoorden |
Regels die de moeite waard zijn om te weten:
GETenHEADworden zonder body verzonden.- Een hoofdtekst die geen string is, wordt verzonden als JSON, met
content-type: application/json, tenzij u er een instelt. Een string body wordt verzonden zoals het is en krijgt ookcontent-type: application/json, dus lees het metreq.text(). - Zonder
bodyontvangt de functie een verzoek zonder hoofdtekst. Een kaleawait req.json()gooit, dus schrijfawait req.json().catch(() => ({}))wanneer de oproep kan worden gedaan zonder een payload. - De body moet JSON zijn: een object, array, string, getal of booleaanse waarde. Een
Blob,ArrayBuffer, getypte array,FormData,URLSearchParamsofReadableStreamwordt geweigerd met de foutcodeinvalid_bodyvoordat er een verzoek wordt verzonden. - Framingheaders (
content-length,transfer-encoding,connection,host, …) worden genegeerd.
3. Lees de identiteit van de beller
Het platform valideert de sleutel en het token van de gebruiker voordat uw functie wordt uitgevoerd en voegt vervolgens deze headers toe:
| Koptekst | Waarde |
|---|---|
x-aura-role | anon, authenticated of service_role |
x-aura-user-id | Het ID van de gebruiker wanneer x-aura-role authenticated is, anders afwezig |
x-aura-project-id | Het project-ID |
authorization | De JWT van de gebruiker, alleen voor een ingelogde gebruiker |
apikey | De toets die voor het gesprek wordt gebruikt |
Echte resultaten van deze oproep met drie verschillende sleutels:
Het platform verwijdert authorization, apikey, x-request-id en elke x-aura-* header die een beller in headers plaatst, ongeacht het geval. Alleen de waarden die het zelf heeft geverifieerd, bereiken uw functie. Andere aangepaste headers worden ongewijzigd doorgegeven.
De x-request-id van de oproep wordt niet doorgestuurd naar uw functie. Om een oproep te correleren met een logregel, genereert u uw eigen ID, verzendt u deze in headers en logt u deze in de functie.
4. Bel via HTTP
Verzend zonder de SDK een JSON-object dat de aanvraag beschrijft. Het veld body is wat uw functie ontvangt.
Zowel apikey als Content-Type: application/json zijn vereist. Voeg Authorization: Bearer <user JWT> toe om te bellen als ingelogde gebruiker. Het standaardantwoord is een envelop; de header X-Aurabase-Invoke-Mode: raw retourneert in plaats daarvan het eigen antwoord van uw functie, zie niet-JSON-antwoorden.
5. Lees het resultaat
invoke gooit nooit. Het retourneert { data, error }:
Test data in plaats van error als je de waarde nodig hebt: TypeScript weet dan dat het niet null is. Om fouten nauwkeurig af te handelen, leest u fouten, time-outs en nieuwe pogingen.