Bir işlevi çağırma
Dağıtılmış bir işlevin JavaScript SDK'sıyla veya HTTP üzerinden nasıl çağrılacağı ve işlevinizin kimin aradığını nasıl bildiği.
1. SDK'dan çağrı yapın
invoke bir genel anahtarın yapabileceği tek çağrıdır. Tarayıcıda ve sunucuda aynı şekilde çalışır.
Genel invoke<T> yalnızca yanıtı yazar. Ad ve gövde derleme zamanında kontrol edilmez.
list, get, listJobs, enqueueJob ve diğer yönetim yöntemleri bir service_role anahtarına ihtiyaç duyar ve sunucunuza aittir. Ortak anahtar 403 alır. kimlerin neyi arayabileceğine bakın.
2. Talebi açıklayın
İşleviniz, etrafındaki sarmalayıcıyı değil, tanımladığınız isteği tam olarak alır.
| Seçenek | Varsayılan | İşlev ne görür? |
|---|---|---|
method | POST | req.method |
path | / | new URL(req.url).pathname |
headers | hiçbiri | req.headers, aşağıda listelenen platform başlıkları hariç |
body | hiçbiri | await req.json() (veya bir dize için req.text()) |
timeout | istemci varsayılanı (30 sn) | görünmez: aramanızı iptal eder |
signal | hiçbiri | görünmez: aramanızı iptal eder |
responseType | 'json' | görünmez: SDK yanıtın kodunu nasıl çözer, bkz. JSON olmayan yanıtlar |
Bilmeye değer kurallar:
GETveHEADgövde olmadan gönderilir.- Dize olmayan bir gövde, siz ayarlamadığınız sürece
content-type: application/jsonile JSON olarak gönderilir. Bir dizesi gövdesi olduğu gibi gönderilir ve ayrıcacontent-type: application/jsonalır, bu nedenle onureq.text()ile okuyun. bodyolmadığında işlev, gövdesi olmayan bir istek alır. Çıplak birawait req.json()atar, bu nedenle çağrı bir veri yükü olmadan yapılabildiğindeawait req.json().catch(() => ({}))yazın.- Gövde JSON olmalıdır: bir nesne, dizi, dize, sayı veya boole.
Blob,ArrayBufferyazılan bir dizi,FormData,URLSearchParamsveyaReadableStreamherhangi bir istek gönderilmeden önceinvalid_bodyhata koduyla reddedilir. - Çerçeveleme başlıkları (
content-length,transfer-encoding,connection,host, …) dikkate alınmaz.
3. Arayanın kimliğini okuyun
Platform, işleviniz çalıştırılmadan önce anahtarı ve kullanıcının belirtecini doğrular ve ardından şu başlıkları ekler:
| Başlık | Değer |
|---|---|
x-aura-role | anon, authenticated veya service_role |
x-aura-user-id | x-aura-role olduğunda kullanıcının kimliği authenticated olduğunda, aksi halde mevcut değilse |
x-aura-project-id | Proje kimliği |
authorization | Kullanıcının JWT, yalnızca oturum açmış kullanıcı için |
apikey | Arama için kullanılan anahtar |
Üç farklı tuşla bu aramanın gerçek sonuçları:
Platform, durumu ne olursa olsun, authorization, apikey, x-request-id ve arayanın headers içine koyduğu her x-aura-* başlığını atar. Yalnızca kendi doğruladığı değerler fonksiyonunuza ulaşır. Diğer özel başlıklar değişmeden geçer.
Çağrının x-request-id işlevi işlevinize iletilmez. Bir çağrıyı bir günlük satırıyla ilişkilendirmek için kendi kimliğinizi oluşturun, onu headers'ye gönderin ve işleve kaydedin.
4. HTTP üzerinden çağrı yapın
SDK olmadan isteği açıklayan bir JSON nesnesi gönderin. body alanı işlevinizin aldığı alandır.
Hem apikey hem de Content-Type: application/json gereklidir. Oturum açmış kullanıcı olarak aramak için Authorization: Bearer <user JWT> ekleyin. Varsayılan yanıt bir zarftır; X-Aurabase-Invoke-Mode: raw başlığı bunun yerine işlevinizin kendi yanıtını döndürür; bkz. JSON olmayan yanıtlar.
5. Sonucu okuyun
invoke asla fırlatmaz. { data, error } değerini döndürür:
Değere ihtiyacınız olduğunda data yerine error değerini test edin: TypeScript o zaman bunun null olmadığını bilir. Hataları tam olarak ele almak için hatalarını, zaman aşımlarını ve yeniden denemeleri okuyun.