Aurabase-logo
aurabasisdocumenten
documenten›Edge Functions›Invoke a function

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.

8 min lezen·Niveau tussenproduct·Herzien op 12 okt 2026
Deze Engelse tekst is automatisch gegenereerd op basis van het Franse origineel en is nog niet beoordeeld.
Deze pagina is automatisch vertaald. De Engelse versie is gezaghebbend.
#
SDK

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.

src/lib/call.tstypescript
import { createClient } from '@aurabase/aurabase-js'

const aura = createClient(process.env.AURA_URL!, process.env.AURA_ANON_KEY!)

const { data, error } = await aura.functions.invoke<{ greeting: string }>('hello', {
  body: { name: 'Ada' },
})
if (error) throw error
console.log(data?.greeting)
src/lib/call-as-user.tstypescript
// Na het inloggen voegt de SDK de JWT van de gebruiker toe aan elk gesprek: geen extra code.
await aura.auth.signInWithPassword({ email, password })
const { data } = await aura.functions.invoke('whoami')
// De functie ziet x-aura-role: authenticated en de ID van de gebruiker.

De generieke invoke<T> typt alleen het antwoord. De naam en de hoofdtekst worden tijdens het compileren niet gecontroleerd.

Een publieke sleutel kan alleen een beroep doen

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.

#
Verzoek

2. Beschrijf het verzoek

Uw functie ontvangt precies het verzoek dat u beschrijft, en geen omhulsel eromheen.

OptieStandaardWat de functie ziet
methodPOSTreq.method
path/new URL(req.url).pathname
headersgeenreq.headers, behalve de hieronder vermelde platformheaders
bodygeenawait req.json() (of req.text() voor een tekenreeks)
timeoutstandaard client (30 s)niet zichtbaar: annuleert uw oproep
signalgeenniet zichtbaar: annuleert uw oproep
responseType'json'niet zichtbaar: hoe de SDK het antwoord decodeert, zie niet-JSON-antwoorden
request.tstypescript
await aura.functions.invoke('items', {
  method: 'PUT',
  path: '/items/1',
  headers: { 'x-source': 'dashboard' },
  body: { qty: 2 },
})
aurabase/functions/items/index.tstypescript
Deno.serve(async (req) => {
  const url = new URL(req.url)          // padnaam: '/items/1'
  const source = req.headers.get('x-source') // 'dashboard'
  const body = await req.json()         // { aantal: 2 }
  return Response.json({ method: req.method, id: url.pathname.split('/').pop(), source, body })
})

Regels die de moeite waard zijn om te weten:

  • GET en HEAD worden 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 ook content-type: application/json, dus lees het met req.text().
  • Zonder body ontvangt de functie een verzoek zonder hoofdtekst. Een kale await req.json() gooit, dus schrijf await 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, URLSearchParams of ReadableStream wordt geweigerd met de foutcode invalid_body voordat er een verzoek wordt verzonden.
  • Framingheaders (content-length, transfer-encoding, connection, host, …) worden genegeerd.
#
Identiteit

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:

KoptekstWaarde
x-aura-roleanon, authenticated of service_role
x-aura-user-idHet ID van de gebruiker wanneer x-aura-role authenticated is, anders afwezig
x-aura-project-idHet project-ID
authorizationDe JWT van de gebruiker, alleen voor een ingelogde gebruiker
apikeyDe toets die voor het gesprek wordt gebruikt
aurabase/functions/whoami/index.tstypescript
Deno.serve((req) => {
  if (req.headers.get('x-aura-role') !== 'authenticated') {
    return new Response('Sign in first', { status: 401 })
  }
  return Response.json({ userId: req.headers.get('x-aura-user-id') })
})

Echte resultaten van deze oproep met drie verschillende sleutels:

results.jsonjson
{ "role": "anon",          "userId": null }
{ "role": "authenticated", "userId": "b125f8cd-ddc8-4042-9d9d-2e0aa3cebe51" }
{ "role": "service_role",  "userId": null }
Een beller kan deze headers niet vervalsen

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.

Geen verzoek-ID binnen de functie

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.

#
HTTP

4. Bel via HTTP

Verzend zonder de SDK een JSON-object dat de aanvraag beschrijft. Het veld body is wat uw functie ontvangt.

terminalbash
curl -X POST "$AURA_URL/v1/functions/hello/invoke" \
  -H "apikey: $AURA_ANON_KEY" \
  -H "Content-Type: application/json" \
  -d '{"body":{"name":"Ada"}}'

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.

#
Resultaat

5. Lees het resultaat

invoke gooit nooit. Het retourneert { data, error }:

result.tstypescript
const { data, error } = await aura.functions.invoke('hello', { body: { name: 'Ada' } })

if (error) {
  // error.status: HTTP-status van de fout
  // error.message: de tekst die uw functie heeft geretourneerd, of de uitleg van het platform
  return
}
// gegevens zijn nul wanneer de functie geen inhoud retourneert (bijvoorbeeld een 204)
if (data === null) return
console.log(data)

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.

Laatst bijgewerkt · 12 okt 2026