Invocar uma função
Como chamar uma função implantada com o JavaScript SDK ou por HTTP e como sua função sabe quem está chamando.
1. Chame do SDK
invoke é a única chamada que uma chave pública pode fazer. Funciona da mesma forma em um navegador e em um servidor.
O invoke<T> genérico digita apenas a resposta. O nome e o corpo não são verificados em tempo de compilação.
list, get, listJobs, enqueueJob e os outros métodos de gerenciamento precisam de uma chave service_role e pertencem ao seu servidor. Uma chave pública recebe 403. Veja quem pode chamar o que.
2. Descreva a solicitação
Sua função recebe exatamente a solicitação que você descreve, não um wrapper em torno dela.
| Opção | Padrão | O que a função vê |
|---|---|---|
method | POST | req.method |
path | / | new URL(req.url).pathname |
headers | nenhum | req.headers, exceto os cabeçalhos de plataforma listados abaixo |
body | nenhum | await req.json() (ou req.text() para uma string) |
timeout | padrão do cliente (30 s) | não visível: cancela sua chamada |
signal | nenhum | não visível: cancela sua chamada |
responseType | 'json' | não visível: como o SDK decodifica a resposta, consulte respostas não JSON |
Regras que vale a pena conhecer:
GETeHEADsão enviados sem corpo.- Um corpo que não é uma string é enviado como JSON, com
content-type: application/json, a menos que você defina um. Uma string body é enviada como está e também recebecontent-type: application/json, então leia-a comreq.text(). - Sem
body, a função recebe uma solicitação sem corpo. Umawait req.json()simples é lançado, então escrevaawait req.json().catch(() => ({}))quando a chamada puder ser feita sem carga útil. - O corpo deve ser JSON: um objeto, array, string, número ou booleano. Um
Blob,ArrayBuffer, array digitado,FormData,URLSearchParamsouReadableStreamé recusado com o código de erroinvalid_bodyantes de qualquer solicitação ser enviada. - Os cabeçalhos de enquadramento (
content-length,transfer-encoding,connection,host, …) são ignorados.
3. Leia a identidade do chamador
A plataforma valida a chave e o token do usuário antes da execução da função e, em seguida, adiciona estes cabeçalhos:
| Cabeçalho | Valor |
|---|---|
x-aura-role | anon, authenticated ou service_role |
x-aura-user-id | O ID do usuário quando x-aura-role é authenticated, caso contrário ausente |
x-aura-project-id | O ID do projeto |
authorization | O JWT do usuário, apenas para um usuário conectado |
apikey | A chave usada para a chamada |
Resultados reais desta chamada com três chaves diferentes:
A plataforma descarta authorization, apikey, x-request-id e todos os cabeçalhos x-aura-* que um chamador coloca em headers, seja qual for o caso. Somente os valores que ele verificou chegam à sua função. Outros cabeçalhos personalizados passam inalterados.
O x-request-id da chamada não é encaminhado para sua função. Para correlacionar uma chamada com uma linha de log, gere seu próprio id, envie-o em headers e registre-o na função.
4. Chamada por HTTP
Sem o SDK, envie um objeto JSON que descreva a solicitação. O campo body é o que sua função recebe.
Ambos apikey e Content-Type: application/json são obrigatórios. Adicione Authorization: Bearer <user JWT> para chamar como usuário conectado. A resposta padrão é um envelope; o cabeçalho X-Aurabase-Invoke-Mode: raw retorna a própria resposta da sua função, consulte respostas não JSON.
5. Leia o resultado
invoke nunca joga. Ele retorna { data, error }:
Teste data em vez de error quando precisar do valor: TypeScript então saberá que não é null. Para lidar com falhas com precisão, leia erros, tempos limite e novas tentativas.