Invoquer une fonction
Comment appeler une fonction déployée avec le SDK JavaScript ou via HTTP, et comment votre fonction sait qui appelle.
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.
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.
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.
2. Décrivez la demande
Votre fonction reçoit exactement la requête que vous décrivez, pas un wrapper autour d'elle.
| Options | Par défaut | Ce que voit la fonction |
|---|---|---|
method | POST | req.method |
path | / | new URL(req.url).pathname |
headers | aucun | req.headers, à l'exception des en-têtes de plate-forme répertoriés ci-dessous |
body | aucun | await req.json() (ou req.text() pour une chaîne) |
timeout | client par défaut (30 s) | non visible : annule votre appel |
signal | aucun | non visible : annule votre appel |
responseType | 'json' | non visible : comment le SDK décode la réponse, voir réponses non-JSON |
Règles à connaître :
GETetHEADsont envoyés sans corps.- Un corps qui n'est pas une chaîne est envoyé au format JSON, avec
content-type: application/jsonsauf si vous en définissez un. Un corps de chaîne est envoyé tel quel et obtient égalementcontent-type: application/json, alors lisez-le avecreq.text(). - Sans
body, la fonction reçoit une requête sans corps. Un simpleawait req.json()est lancé, alors écrivezawait 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,URLSearchParamsouReadableStreamest refusé avec le code d'erreurinvalid_bodyavant l'envoi de toute requête. - Les en-têtes de tramage (
content-length,transfer-encoding,connection,host, …) sont ignorés.
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ête | Valeur |
|---|---|
x-aura-role | anon, authenticated ou service_role |
x-aura-user-id | L'identifiant de l'utilisateur lorsque x-aura-role est authenticated, sinon absent |
x-aura-project-id | L'identifiant du projet |
authorization | Le JWT de l'utilisateur, uniquement pour un utilisateur connecté |
apikey | La clé utilisée pour l'appel |
Résultats réels de cet appel avec trois clés différentes :
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.
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.
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.
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.
5. Lisez le résultat
invoke ne lance jamais. Il renvoie { data, error }:
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.