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.
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.
Ogólny invoke<T> wpisuje tylko odpowiedź. Nazwa i treść nie są sprawdzane w czasie kompilacji.
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.
2. Opisz prośbę
Twoja funkcja otrzymuje dokładnie żądanie, które opisujesz, a nie opakowanie wokół niego.
| Opcja | Domyślny | Co widzi funkcja |
|---|---|---|
method | POST | req.method |
path | / | new URL(req.url).pathname |
headers | nic | req.headers, z wyjątkiem nagłówków platformy wymienionych poniżej |
body | nic | await req.json() (lub req.text() w przypadku ciągu znaków) |
timeout | klient domyślny (30 s) | niewidoczne: anuluje połączenie |
signal | nic | niewidoczne: anuluje połączenie |
responseType | 'json' | niewidoczne: jak SDK dekoduje odpowiedź, zobacz odpowiedzi inne niż JSON |
Zasady, które warto znać:
GETiHEADsą 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ż otrzymujecontent-type: application/json, więc przeczytaj ją za pomocąreq.text(). - W przypadku braku
bodyfunkcja otrzymuje żądanie bez treści. Nagie rzutyawait req.json(), więc napiszawait 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,URLSearchParamslubReadableStreamjest odrzucana z kodem błęduinvalid_bodyprzed wysłaniem jakiegokolwiek żądania. - Nagłówki ramek (
content-length,transfer-encoding,connection,host, …) są ignorowane.
3. Przeczytaj tożsamość dzwoniącego
Platforma sprawdza klucz i token użytkownika przed uruchomieniem funkcji, a następnie dodaje te nagłówki:
| Chodnikowiec | Wartość |
|---|---|
x-aura-role | anon, authenticated lub service_role |
x-aura-user-id | Identyfikator użytkownika, gdy x-aura-role to authenticated, w przeciwnym razie brak |
x-aura-project-id | Identyfikator projektu |
authorization | JWT użytkownika, tylko dla zalogowanego użytkownika |
apikey | Klucz używany do połączenia |
Rzeczywiste wyniki tego połączenia z trzema różnymi kluczami:
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.
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.
4. Zadzwoń przez HTTP
Bez pakietu SDK wyślij obiekt JSON opisujący żądanie. Pole body jest tym, co otrzymuje Twoja funkcja.
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.
5. Przeczytaj wynik
invoke nigdy nie rzuca. Zwraca { data, error }:
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.