Aurabase Logosu
aura tabanıdokümanlar
dokümanlar›Edge Functions›Invoke a function

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.

8 dk. oku·Seviye orta düzey·12 Eki 2026 tarihinde revize edildi
Bu İngilizce metin, Fransızca orijinalinden otomatik olarak oluşturulmuştur ve henüz incelenmemiştir.
Bu sayfa otomatik olarak çevrildi. İngilizce versiyonu yetkilidir.
#
SDK'sı

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.

src/lib/call.tstypescript
import { createClient } from '@aurabase/aurabase-js'

const aura = createClient(process.env.AURA_URL!, process.env.AURA_ANON_KEY!)

const { data, error } = await aura.functions.invoke<{ greeting: string }>('hello', {
  body: { name: 'Ada' },
})
if (error) throw error
console.log(data?.greeting)
src/lib/call-as-user.tstypescript
// Oturum açtıktan sonra SDK, kullanıcının JWT değerini her çağrıya ekler: ekstra kod gerekmez.
await aura.auth.signInWithPassword({ email, password })
const { data } = await aura.functions.invoke('whoami')
// İşlev, x-aura-role: kimlik doğrulamasını ve kullanıcının kimliğini görür.

Genel invoke<T> yalnızca yanıtı yazar. Ad ve gövde derleme zamanında kontrol edilmez.

Bir ortak anahtar yalnızca çağrılabilir

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.

#
Talep

2. Talebi açıklayın

İşleviniz, etrafındaki sarmalayıcıyı değil, tanımladığınız isteği tam olarak alır.

SeçenekVarsayılanİşlev ne görür?
methodPOSTreq.method
path/new URL(req.url).pathname
headershiçbirireq.headers, aşağıda listelenen platform başlıkları hariç
bodyhiçbiriawait req.json() (veya bir dize için req.text())
timeoutistemci varsayılanı (30 sn)görünmez: aramanızı iptal eder
signalhiçbirigörünmez: aramanızı iptal eder
responseType'json'görünmez: SDK yanıtın kodunu nasıl çözer, bkz. JSON olmayan yanıtlar
request.tstypescript
await aura.functions.invoke('items', {
  method: 'PUT',
  path: '/items/1',
  headers: { 'x-source': 'dashboard' },
  body: { qty: 2 },
})
aurabase/functions/items/index.tstypescript
Deno.serve(async (req) => {
  const url = new URL(req.url)          // yol adı: '/items/1'
  const source = req.headers.get('x-source') // 'kontrol paneli'
  const body = await req.json()         // { adet: 2 }
  return Response.json({ method: req.method, id: url.pathname.split('/').pop(), source, body })
})

Bilmeye değer kurallar:

  • GET ve HEAD gövde olmadan gönderilir.
  • Dize olmayan bir gövde, siz ayarlamadığınız sürece content-type: application/json ile JSON olarak gönderilir. Bir dizesi gövdesi olduğu gibi gönderilir ve ayrıca content-type: application/json alır, bu nedenle onu req.text() ile okuyun.
  • body olmadığında işlev, gövdesi olmayan bir istek alır. Çıplak bir await req.json() atar, bu nedenle çağrı bir veri yükü olmadan yapılabildiğinde await req.json().catch(() => ({})) yazın.
  • Gövde JSON olmalıdır: bir nesne, dizi, dize, sayı veya boole. Blob, ArrayBuffer yazılan bir dizi, FormData, URLSearchParams veya ReadableStream herhangi bir istek gönderilmeden önce invalid_body hata koduyla reddedilir.
  • Çerçeveleme başlıkları (content-length, transfer-encoding, connection, host, …) dikkate alınmaz.
#
Kimlik

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ıkDeğer
x-aura-roleanon, authenticated veya service_role
x-aura-user-idx-aura-role olduğunda kullanıcının kimliği authenticated olduğunda, aksi halde mevcut değilse
x-aura-project-idProje kimliği
authorizationKullanıcının JWT, yalnızca oturum açmış kullanıcı için
apikeyArama için kullanılan anahtar
aurabase/functions/whoami/index.tstypescript
Deno.serve((req) => {
  if (req.headers.get('x-aura-role') !== 'authenticated') {
    return new Response('Sign in first', { status: 401 })
  }
  return Response.json({ userId: req.headers.get('x-aura-user-id') })
})

Üç farklı tuşla bu aramanın gerçek sonuçları:

results.jsonjson
{ "role": "anon",          "userId": null }
{ "role": "authenticated", "userId": "b125f8cd-ddc8-4042-9d9d-2e0aa3cebe51" }
{ "role": "service_role",  "userId": null }
Arayan kişi bu başlıkları taklit edemez

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.

Fonksiyonun içinde istek kimliği yok

Ç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.

#
HTTP

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.

terminalbash
curl -X POST "$AURA_URL/v1/functions/hello/invoke" \
  -H "apikey: $AURA_ANON_KEY" \
  -H "Content-Type: application/json" \
  -d '{"body":{"name":"Ada"}}'

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.

#
Sonuç

5. Sonucu okuyun

invoke asla fırlatmaz. { data, error } değerini döndürür:

result.tstypescript
const { data, error } = await aura.functions.invoke('hello', { body: { name: 'Ada' } })

if (error) {
  // error.status: Hatanın HTTP durumu
  // error.message: işlevinizin döndürdüğü metin veya platformun açıklaması
  return
}
// işlev hiçbir içerik döndürmediğinde veriler boştur (örneğin 204)
if (data === null) return
console.log(data)

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.