ऑराबेस लोगो
aurabaseडॉक्स
डॉक्स›Edge Functions›Invoke a function

किसी फ़ंक्शन का आह्वान करें

जावास्क्रिप्ट एसडीके या HTTP पर तैनात फ़ंक्शन को कैसे कॉल करें, और आपका फ़ंक्शन कैसे जानता है कि कौन कॉल कर रहा है।

8 मि॰ पढ़ें·स्तर मध्यवर्ती·12 अक्टू॰ 2026 पर संशोधित
यह अंग्रेजी पाठ फ़्रेंच मूल से स्वचालित रूप से उत्पन्न हुआ था और अभी तक इसकी समीक्षा नहीं की गई है।
यह पृष्ठ स्वचालित रूप से अनुवादित किया गया था. अंग्रेजी संस्करण प्रामाणिक है.
#
एसडीके

1. एसडीके से कॉल करें

invoke एकमात्र कॉल है जो सार्वजनिक कुंजी कर सकती है। यह ब्राउज़र और सर्वर पर समान रूप से कार्य करता है।

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
// साइन-इन करने के बाद, SDK प्रत्येक कॉल में उपयोगकर्ता का JWT जोड़ता है: कोई अतिरिक्त कोड नहीं।
await aura.auth.signInWithPassword({ email, password })
const { data } = await aura.functions.invoke('whoami')
// फ़ंक्शन x-aura-role: प्रमाणित और उपयोगकर्ता की आईडी देखता है।

सामान्य invoke<T> केवल प्रतिक्रिया टाइप करता है। संकलन के समय नाम और मुख्य भाग की जाँच नहीं की जाती है।

सार्वजनिक कुंजी केवल आह्वान कर सकती है

list, get, listJobs, enqueueJob और अन्य प्रबंधन विधियों के लिए service_role कुंजी की आवश्यकता होती है और वे आपके सर्वर पर होती हैं। एक सार्वजनिक कुंजी 403 प्राप्त करती है। देखें कौन क्या कह सकता है।

#
अनुरोध

2. अनुरोध का वर्णन करें

आपका फ़ंक्शन ठीक वही अनुरोध प्राप्त करता है जिसका आप वर्णन करते हैं, न कि उसके चारों ओर कोई आवरण।

विकल्पगलती करनाफ़ंक्शन क्या देखता है
methodPOSTreq.method
path/new URL(req.url).pathname
headersकोई नहींreq.headers, नीचे सूचीबद्ध प्लेटफ़ॉर्म हेडर को छोड़कर
bodyकोई नहींawait req.json() (या एक स्ट्रिंग के लिए req.text())
timeoutक्लाइंट डिफ़ॉल्ट (30 सेकंड)दृश्यमान नहीं: आपकी कॉल रद्द कर देता है
signalकोई नहींदृश्यमान नहीं: आपकी कॉल रद्द कर देता है
responseType'json'दृश्यमान नहीं: SDK प्रतिक्रिया को कैसे डिकोड करता है, देखें गैर-JSON प्रतिक्रियाएँ
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)          // पथनाम: '/आइटम/1'
  const source = req.headers.get('x-source') // 'डैशबोर्ड'
  const body = await req.json()         // { मात्रा: 2 }
  return Response.json({ method: req.method, id: url.pathname.split('/').pop(), source, body })
})

जानने लायक नियम:

  • GET और HEAD बिना किसी बॉडी के भेजे जाते हैं।
  • एक बॉडी जो स्ट्रिंग नहीं है उसे JSON के रूप में content-type: application/json के साथ भेजा जाता है, जब तक कि आप एक सेट नहीं करते। एक स्ट्रिंग बॉडी को वैसे ही भेजा जाता है और उसे content-type: application/json भी मिलता है, इसलिए इसे req.text() के साथ पढ़ें।
  • body के बिना, फ़ंक्शन को बिना किसी निकाय के एक अनुरोध प्राप्त होता है। एक खाली await req.json() फेंकता है, इसलिए जब कॉल पेलोड के बिना किया जा सकता है तो await req.json().catch(() => ({})) लिखें।
  • मुख्य भाग JSON होना चाहिए: एक ऑब्जेक्ट, सरणी, स्ट्रिंग, संख्या या बूलियन। किसी भी अनुरोध को भेजने से पहले Blob, ArrayBuffer, टाइप की गई सरणी, FormData, URLSearchParams या ReadableStream को त्रुटि कोड invalid_body के साथ अस्वीकार कर दिया जाता है।
  • फ़्रेमिंग हेडर (content-length, transfer-encoding, connection, host, ...) को नजरअंदाज कर दिया जाता है।
#
पहचान

3. कॉल करने वाले की पहचान पढ़ें

प्लेटफ़ॉर्म आपके फ़ंक्शन के चलने से पहले कुंजी और उपयोगकर्ता के टोकन को मान्य करता है, फिर इन हेडर को जोड़ता है:

हैडरकीमत
x-aura-roleanon, authenticated या service_role
x-aura-user-idx-aura-role होने पर उपयोगकर्ता की आईडी authenticated है, अन्यथा अनुपस्थित है
x-aura-project-idप्रोजेक्ट आईडी
authorizationउपयोगकर्ता का JWT, केवल साइन-इन उपयोगकर्ता के लिए
apikeyकॉल के लिए उपयोग की जाने वाली कुंजी
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') })
})

तीन अलग-अलग कुंजियों के साथ इस कॉल के वास्तविक परिणाम:

results.jsonjson
{ "role": "anon",          "userId": null }
{ "role": "authenticated", "userId": "b125f8cd-ddc8-4042-9d9d-2e0aa3cebe51" }
{ "role": "service_role",  "userId": null }
कोई कॉल करने वाला इन हेडर को जाली नहीं बना सकता

प्लेटफ़ॉर्म authorization, apikey, x-request-id और प्रत्येक x-aura-* हेडर को हटा देता है जो एक कॉलर headers में डालता है, चाहे उनका मामला कुछ भी हो। केवल वही मान जो उसने स्वयं सत्यापित किए हैं, आपके फ़ंक्शन तक पहुंचते हैं। अन्य कस्टम हेडर अपरिवर्तित होकर गुजरते हैं।

फ़ंक्शन के अंदर कोई अनुरोध आईडी नहीं

कॉल का x-request-id आपके फ़ंक्शन पर अग्रेषित नहीं किया जाता है। किसी कॉल को लॉग लाइन के साथ सहसंबंधित करने के लिए, अपनी स्वयं की आईडी बनाएं, इसे headers में भेजें और फ़ंक्शन में लॉग इन करें।

#
HTTP

4. HTTP पर कॉल करें

SDK के बिना, एक JSON ऑब्जेक्ट भेजें जो अनुरोध का वर्णन करता हो। body फ़ील्ड वह है जो आपका फ़ंक्शन प्राप्त करता है।

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

apikey और Content-Type: application/json दोनों आवश्यक हैं। साइन-इन उपयोगकर्ता के रूप में कॉल करने के लिए Authorization: Bearer <user JWT> जोड़ें। डिफ़ॉल्ट प्रतिक्रिया एक लिफाफा है; X-Aurabase-Invoke-Mode: raw हेडर इसके बजाय आपके फ़ंक्शन की अपनी प्रतिक्रिया देता है, गैर-JSON प्रतिक्रियाएँ देखें।

#
परिणाम

5. परिणाम पढ़ें

invoke कभी नहीं फेंकता. यह { data, error } लौटाता है:

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

if (error) {
  // error.status: विफलता की HTTP स्थिति
  // error.message: आपके फ़ंक्शन द्वारा लौटाया गया टेक्स्ट, या प्लेटफ़ॉर्म का स्पष्टीकरण
  return
}
// जब फ़ंक्शन कोई सामग्री नहीं लौटाता तो डेटा शून्य हो जाता है (उदाहरण के लिए 204)
if (data === null) return
console.log(data)

जब आपको मान की आवश्यकता हो तो error के बजाय data का परीक्षण करें: TypeScript तब पता चलता है कि यह null नहीं है। विफलताओं को ठीक से संभालने के लिए, त्रुटियाँ, टाइमआउट और पुनः प्रयास पढ़ें।