Logo Aurabase
aurabazadokumenty
dokumenty›Edge Functions›Invoke a function

Wywołaj funkcję

Jak wywołać wdrożoną funkcję za pomocą pakietu JavaScript SDK lub za pośrednictwem protokołu HTTP i skąd funkcja wie, kto dzwoni.

8 min przeczytane·Poziom mediator·Zmieniono 12 paź 2026
Ten tekst w języku angielskim został wygenerowany automatycznie na podstawie francuskiego oryginału i nie był jeszcze recenzowany.
Ta strona została przetłumaczona automatycznie. Wersja angielska jest miarodajna.
#
SDK

1. Wywołaj z SDK

invoke to jedyne wywołanie, jakie może wykonać klucz publiczny. Działa tak samo w przeglądarce i na serwerze.

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
// Po zalogowaniu zestaw SDK dodaje JWT użytkownika do każdego połączenia: bez dodatkowego kodu.
await aura.auth.signInWithPassword({ email, password })
const { data } = await aura.functions.invoke('whoami')
// Funkcja widzi x-aura-role: uwierzytelniony i identyfikator użytkownika.

Ogólny invoke<T> wpisuje tylko odpowiedź. Nazwa i treść nie są sprawdzane w czasie kompilacji.

Klucz publiczny może jedynie wywoływać

list, get, listJobs, enqueueJob i inne metody zarządzania wymagają klucza service_role i należą do Twojego serwera. Klucz publiczny otrzymuje 403. Zobacz , kto może dzwonić, co.

#
Wniosek

2. Opisz prośbę

Twoja funkcja otrzymuje dokładnie żądanie, które opisujesz, a nie opakowanie wokół niego.

OpcjaDomyślnyCo widzi funkcja
methodPOSTreq.method
path/new URL(req.url).pathname
headersnicreq.headers, z wyjątkiem nagłówków platformy wymienionych poniżej
bodynicawait req.json() (lub req.text() w przypadku ciągu znaków)
timeoutklient domyślny (30 s)niewidoczne: anuluje połączenie
signalnicniewidoczne: anuluje połączenie
responseType'json'niewidoczne: jak SDK dekoduje odpowiedź, zobacz odpowiedzi inne niż JSON
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)          // nazwa ścieżki: '/elementy/1'
  const source = req.headers.get('x-source') // 'panel'
  const body = await req.json()         // {ilość: 2 }
  return Response.json({ method: req.method, id: url.pathname.split('/').pop(), source, body })
})

Zasady, które warto znać:

  • GET i HEAD są wysyłane bez treści.
  • Treść niebędąca ciągiem znaków jest wysyłana w formacie JSON z wartością content-type: application/json, chyba że ją ustawisz. Treść ciągu jest wysyłana w niezmienionej postaci i również otrzymuje content-type: application/json, więc przeczytaj ją za pomocą req.text().
  • W przypadku braku body funkcja otrzymuje żądanie bez treści. Nagie rzuty await req.json(), więc napisz await req.json().catch(() => ({})), gdy połączenie będzie można wykonać bez ładunku.
  • Treść musi być w formacie JSON: obiekt, tablica, ciąg znaków, liczba lub wartość logiczna. Blob, ArrayBuffer, tablica z określonym typem, FormData, URLSearchParams lub ReadableStream jest odrzucana z kodem błędu invalid_body przed wysłaniem jakiegokolwiek żądania.
  • Nagłówki ramek (content-length, transfer-encoding, connection, host, …) są ignorowane.
#
Tożsamość

3. Przeczytaj tożsamość dzwoniącego

Platforma sprawdza klucz i token użytkownika przed uruchomieniem funkcji, a następnie dodaje te nagłówki:

ChodnikowiecWartość
x-aura-roleanon, authenticated lub service_role
x-aura-user-idIdentyfikator użytkownika, gdy x-aura-role to authenticated, w przeciwnym razie brak
x-aura-project-idIdentyfikator projektu
authorizationJWT użytkownika, tylko dla zalogowanego użytkownika
apikeyKlucz używany do połączenia
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') })
})

Rzeczywiste wyniki tego połączenia z trzema różnymi kluczami:

results.jsonjson
{ "role": "anon",          "userId": null }
{ "role": "authenticated", "userId": "b125f8cd-ddc8-4042-9d9d-2e0aa3cebe51" }
{ "role": "service_role",  "userId": null }
Osoba wywołująca nie może sfałszować tych nagłówków

Platforma odrzuca authorization, apikey, x-request-id i każdy nagłówek x-aura-*, który osoba wywołująca umieszcza w headers, niezależnie od przypadku. Tylko wartości, które sam zweryfikował, docierają do Twojej funkcji. Inne niestandardowe nagłówki przechodzą bez zmian.

Brak identyfikatora żądania wewnątrz funkcji

x-request-id wywołania nie jest przekazywany do Twojej funkcji. Aby powiązać połączenie z linią logu, wygeneruj własny identyfikator, wyślij go w headers i zaloguj do funkcji.

#
HTTP

4. Zadzwoń przez HTTP

Bez pakietu SDK wyślij obiekt JSON opisujący żądanie. Pole body jest tym, co otrzymuje Twoja funkcja.

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

Wymagane są zarówno apikey, jak i Content-Type: application/json. Dodaj Authorization: Bearer <user JWT>, aby dzwonić jako zalogowany użytkownik. Domyślną odpowiedzią jest koperta; nagłówek X-Aurabase-Invoke-Mode: raw zwraca zamiast tego własną odpowiedź funkcji, zobacz odpowiedzi inne niż JSON.

#
Wynik

5. Przeczytaj wynik

invoke nigdy nie rzuca. Zwraca { data, error }:

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

if (error) {
  // error.status: Stan HTTP błędu
  // error.message: tekst zwrócony przez Twoją funkcję lub wyjaśnienie platformy
  return
}
// dane mają wartość null, gdy funkcja nie zwróciła żadnej treści (na przykład 204)
if (data === null) return
console.log(data)

Jeśli potrzebujesz wartości, przetestuj data zamiast error: TypeScript wtedy wie, że to nie jest null. Aby precyzyjnie radzić sobie z awariami, przeczytaj błędy, przekroczenia limitu czasu i ponowne próby.

Ostatnia aktualizacja · 12 paź 2026