Invocar una función
Cómo llamar a una función implementada con el SDK de JavaScript o a través de HTTP, y cómo su función sabe quién está llamando.
1. Llamada desde el SDK
invoke es la única llamada que puede realizar una clave pública. Funciona igual en un navegador y en un servidor.
El invoke<T> genérico solo escribe la respuesta. El nombre y el cuerpo no se verifican en el momento de la compilación.
list, get, listJobs, enqueueJob y los otros métodos de administración necesitan una clave service_role y pertenecen a su servidor. Una clave pública recibe 403. Vea quién puede llamar a qué.
2. Describe la solicitud
Su función recibe exactamente la solicitud que usted describe, no un envoltorio a su alrededor.
| Opción | Predeterminado | Lo que ve la función |
|---|---|---|
method | POST | req.method |
path | / | new URL(req.url).pathname |
headers | ninguno | req.headers, excepto los encabezados de plataforma que se enumeran a continuación |
body | ninguno | await req.json() (o req.text() para una cadena) |
timeout | valor predeterminado del cliente (30 s) | no visible: cancela tu llamada |
signal | ninguno | no visible: cancela tu llamada |
responseType | 'json' | no visible: cómo el SDK decodifica la respuesta; consulte respuestas que no sean JSON |
Reglas que vale la pena conocer:
GETyHEADse envían sin cuerpo.- Un cuerpo que no es una cadena se envía como JSON, con
content-type: application/jsona menos que establezca uno. Un cuerpo de cadena se envía tal cual y también recibecontent-type: application/json, así que léelo conreq.text(). - Sin
body, la función recibe una solicitud sin cuerpo. Se arroja unawait req.json()desnudo, así que escribaawait req.json().catch(() => ({}))cuando la llamada se pueda realizar sin una carga útil. - El cuerpo debe ser JSON: un objeto, matriz, cadena, número o booleano. Una matriz escrita
Blob,ArrayBuffer,FormData,URLSearchParamsoReadableStreamse rechaza con el código de errorinvalid_bodyantes de enviar cualquier solicitud. - Los encabezados de marco (
content-length,transfer-encoding,connection,host,…) se ignoran.
3. Lea la identidad de la persona que llama.
La plataforma valida la clave y el token del usuario antes de que se ejecute la función y luego agrega estos encabezados:
| encabezado | Valor |
|---|---|
x-aura-role | anon, authenticated o service_role |
x-aura-user-id | La identificación del usuario cuando x-aura-role es authenticated; de lo contrario, está ausente |
x-aura-project-id | La identificación del proyecto |
authorization | El JWT del usuario, solo para un usuario que haya iniciado sesión |
apikey | La clave utilizada para la llamada. |
Resultados reales de esta convocatoria con tres claves diferentes:
La plataforma descarta authorization, apikey, x-request-id y cada encabezado x-aura-* que una persona que llama coloca en headers, cualquiera que sea su caso. Sólo los valores que él mismo verificó alcanzan su función. Otros encabezados personalizados pasan sin cambios.
El x-request-id de la llamada no se reenvía a su función. Para correlacionar una llamada con una línea de registro, genere su propia identificación, envíela en headers y regístrela en la función.
4. Llamar a través de HTTP
Sin el SDK, envíe un objeto JSON que describa la solicitud. El campo body es lo que recibe su función.
Se requieren tanto apikey como Content-Type: application/json. Agregue Authorization: Bearer <user JWT> para llamar como usuario registrado. La respuesta predeterminada es un sobre; el encabezado X-Aurabase-Invoke-Mode: raw devuelve la propia respuesta de su función; consulte respuestas no JSON.
5. Lee el resultado
invoke nunca lanza. Devuelve { data, error }:
Pruebe data en lugar de error cuando necesite el valor: TypeScript entonces sabrá que no es null. Para manejar las fallas con precisión, lea errores, tiempos de espera y reintentos.