Logo Aurabase
aurabasedocuments
documents›Edge Functions›Invoke a function

Invoquer une fonction

Comment appeler une fonction déployée avec le SDK JavaScript ou via HTTP, et comment votre fonction sait qui appelle.

8 min de lecture·Niveau intermédiaire·Révisé le 12 oct. 2026
Ce texte anglais a été généré automatiquement à partir de l’original français et n’a pas encore été relu.
Cette page a été traduite automatiquement. La version anglaise fait foi.
#
SDK

1. Appel depuis le SDK

invoke est le seul appel qu'une clé publique peut effectuer. Cela fonctionne de la même manière dans un navigateur et sur un serveur.

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
// Après la connexion, le SDK ajoute le JWT de l'utilisateur à chaque appel : aucun code supplémentaire.
await aura.auth.signInWithPassword({ email, password })
const { data } = await aura.functions.invoke('whoami')
// La fonction voit x-aura-role: authentifié et l'identifiant de l'utilisateur.

Le invoke<T> générique tape uniquement la réponse. Le nom et le corps ne sont pas vérifiés au moment de la compilation.

Une clé publique ne peut invoquer

list, get, listJobs, enqueueJob et les autres méthodes de gestion nécessitent une clé service_role et appartiennent à votre serveur. Une clé publique reçoit 403. Voir qui peut appeler quoi.

#
Demande

2. Décrivez la demande

Votre fonction reçoit exactement la requête que vous décrivez, pas un wrapper autour d'elle.

OptionsPar défautCe que voit la fonction
methodPOSTreq.method
path/new URL(req.url).pathname
headersaucunreq.headers, à l'exception des en-têtes de plate-forme répertoriés ci-dessous
bodyaucunawait req.json() (ou req.text() pour une chaîne)
timeoutclient par défaut (30 s)non visible : annule votre appel
signalaucunnon visible : annule votre appel
responseType'json'non visible : comment le SDK décode la réponse, voir réponses non-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)          // chemin d'accès : '/items/1'
  const source = req.headers.get('x-source') // 'tableau de bord'
  const body = await req.json()         // { quantité : 2 }
  return Response.json({ method: req.method, id: url.pathname.split('/').pop(), source, body })
})

Règles à connaître :

  • GET et HEAD sont envoyés sans corps.
  • Un corps qui n'est pas une chaîne est envoyé au format JSON, avec content-type: application/json sauf si vous en définissez un. Un corps de chaîne est envoyé tel quel et obtient également content-type: application/json, alors lisez-le avec req.text().
  • Sans body, la fonction reçoit une requête sans corps. Un simple await req.json() est lancé, alors écrivez await req.json().catch(() => ({})) lorsque l'appel peut être effectué sans charge utile.
  • Le corps doit être au format JSON : un objet, un tableau, une chaîne, un nombre ou un booléen. Un Blob, ArrayBuffer, tableau typé, FormData, URLSearchParams ou ReadableStream est refusé avec le code d'erreur invalid_body avant l'envoi de toute requête.
  • Les en-têtes de tramage (content-length, transfer-encoding, connection, host, …) sont ignorés.
#
Identité

3. Lisez l'identité de l'appelant

La plateforme valide la clé et le jeton de l'utilisateur avant l'exécution de votre fonction, puis ajoute ces en-têtes :

En-têteValeur
x-aura-roleanon, authenticated ou service_role
x-aura-user-idL'identifiant de l'utilisateur lorsque x-aura-role est authenticated, sinon absent
x-aura-project-idL'identifiant du projet
authorizationLe JWT de l'utilisateur, uniquement pour un utilisateur connecté
apikeyLa clé utilisée pour l'appel
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') })
})

Résultats réels de cet appel avec trois clés différentes :

results.jsonjson
{ "role": "anon",          "userId": null }
{ "role": "authenticated", "userId": "b125f8cd-ddc8-4042-9d9d-2e0aa3cebe51" }
{ "role": "service_role",  "userId": null }
Un appelant ne peut pas falsifier ces en-têtes

La plate-forme supprime authorization, apikey, x-request-id et chaque en-tête x-aura-* qu'un appelant place dans headers, quel que soit son cas. Seules les valeurs qu'il a lui-même vérifiées atteignent votre fonction. Les autres en-têtes personnalisés sont transmis sans modification.

Aucun identifiant de demande dans la fonction

Le x-request-id de l’appel n’est pas transmis à votre fonction. Pour corréler un appel avec une ligne de journal, générez votre propre identifiant, envoyez-le dans headers et enregistrez-le dans la fonction.

#
HTTP

4. Appel via HTTP

Sans le SDK, envoyez un objet JSON qui décrit la requête. Le champ body est ce que votre fonction reçoit.

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

apikey et Content-Type: application/json sont requis. Ajoutez Authorization: Bearer <user JWT> pour appeler en tant qu'utilisateur connecté. La réponse par défaut est une enveloppe ; l'en-tête X-Aurabase-Invoke-Mode: raw renvoie à la place la propre réponse de votre fonction, voir réponses non JSON.

#
Résultat

5. Lisez le résultat

invoke ne lance jamais. Il renvoie { data, error }:

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

if (error) {
  // error.status : état HTTP de l'échec
  // error.message : le texte renvoyé par votre fonction ou l'explication de la plateforme
  return
}
// les données sont nulles lorsque la fonction n'a renvoyé aucun contenu (par exemple un 204)
if (data === null) return
console.log(data)

Testez data plutôt que error lorsque vous avez besoin de la valeur : TypeScript sait alors que ce n'est pas null. Pour gérer les échecs avec précision, lisez les erreurs , les délais d'attente et les tentatives.

Dernière mise à jour · 12 oct. 2026