Aurabase-Logo
AurabasisDokumente
Dokumente›Edge Functions›Invoke a function

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.

8 Min. gelesen·Ebene Mittelstufe·Überarbeitet am 12.10.2026
Dieser englische Text wurde automatisch aus dem französischen Original generiert und wurde noch nicht überprüft.
Diese Seite wurde automatisch übersetzt. Maßgeblich ist die englische Version.
#
SDK

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.

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
// Nach der Anmeldung fügt das SDK bei jedem Aufruf den JWT des Benutzers hinzu: kein zusätzlicher Code.
await aura.auth.signInWithPassword({ email, password })
const { data } = await aura.functions.invoke('whoami')
// Die Funktion sieht x-aura-role:authentifiziert und die Benutzer-ID.

Der generische invoke<T> gibt nur die Antwort ein. Der Name und der Text werden zur Kompilierungszeit nicht überprüft.

Ein öffentlicher Schlüssel kann nur aufgerufen werden

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.

#
Anfrage

2. Beschreiben Sie die Anfrage

Ihre Funktion empfängt genau die von Ihnen beschriebene Anfrage, keinen Wrapper darum.

OptionStandardWas die Funktion sieht
methodPOSTreq.method
path/new URL(req.url).pathname
headerskeinereq.headers, mit Ausnahme der unten aufgeführten Plattformheader
bodykeineawait req.json() (oder req.text() für eine Zeichenfolge)
timeoutClient-Standard (30 s)nicht sichtbar: Bricht Ihren Anruf ab
signalkeinenicht sichtbar: Bricht Ihren Anruf ab
responseType'json'nicht sichtbar: Wie das SDK die Antwort dekodiert, siehe Nicht-JSON-Antworten
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)          // Pfadname: '/items/1'
  const source = req.headers.get('x-source') // 'Dashboard'
  const body = await req.json()         // { Menge: 2 }
  return Response.json({ method: req.method, id: url.pathname.split('/').pop(), source, body })
})

Wissenswerte Regeln:

  • GET und HEAD werden ohne Text gesendet.
  • Ein Text, der keine Zeichenfolge ist, wird als JSON mit content-type: application/json gesendet, sofern Sie keinen festlegen. Ein -String--Körper wird unverändert gesendet und erhält auch content-type: application/json, also lesen Sie ihn mit req.text().
  • Ohne body empfängt die Funktion eine Anfrage ohne Text. Ein bloßer await req.json() löst aus, also schreiben Sie await 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, URLSearchParams oder ReadableStream wird mit dem Fehlercode invalid_body abgelehnt, bevor eine Anfrage gesendet wird.
  • Framing-Header (content-length, transfer-encoding, connection, host, …) werden ignoriert.
#
Identität

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:

KopfzeileWert
x-aura-roleanon, authenticated oder service_role
x-aura-user-idDie Benutzer-ID, wenn x-aura-role authenticated ist, andernfalls fehlt sie
x-aura-project-idDie Projekt-ID
authorizationDer JWT des Benutzers, nur für einen angemeldeten Benutzer
apikeyDer für den Anruf verwendete Schlüssel
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 Ergebnisse dieses Anrufs mit drei verschiedenen Schlüsseln:

results.jsonjson
{ "role": "anon",          "userId": null }
{ "role": "authenticated", "userId": "b125f8cd-ddc8-4042-9d9d-2e0aa3cebe51" }
{ "role": "service_role",  "userId": null }
Ein Anrufer kann diese Header nicht fälschen

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.

Keine Anforderungs-ID innerhalb der Funktion

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.

#
HTTP

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.

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

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.

#
Ergebnis

5. Lesen Sie das Ergebnis ab

invoke wirft nie. Es gibt { data, error } zurück:

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

if (error) {
  // error.status: HTTP-Status des Fehlers
  // error.message: Der von Ihrer Funktion zurückgegebene Text oder die Erklärung der Plattform
  return
}
// Daten sind null, wenn die Funktion keinen Inhalt zurückgegeben hat (z. B. 204).
if (data === null) return
console.log(data)

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.

Zuletzt aktualisiert · 12.10.2026