किसी फ़ंक्शन का आह्वान करें
जावास्क्रिप्ट एसडीके या HTTP पर तैनात फ़ंक्शन को कैसे कॉल करें, और आपका फ़ंक्शन कैसे जानता है कि कौन कॉल कर रहा है।
1. एसडीके से कॉल करें
invoke एकमात्र कॉल है जो सार्वजनिक कुंजी कर सकती है। यह ब्राउज़र और सर्वर पर समान रूप से कार्य करता है।
सामान्य invoke<T> केवल प्रतिक्रिया टाइप करता है। संकलन के समय नाम और मुख्य भाग की जाँच नहीं की जाती है।
list, get, listJobs, enqueueJob और अन्य प्रबंधन विधियों के लिए service_role कुंजी की आवश्यकता होती है और वे आपके सर्वर पर होती हैं। एक सार्वजनिक कुंजी 403 प्राप्त करती है। देखें कौन क्या कह सकता है।
2. अनुरोध का वर्णन करें
आपका फ़ंक्शन ठीक वही अनुरोध प्राप्त करता है जिसका आप वर्णन करते हैं, न कि उसके चारों ओर कोई आवरण।
| विकल्प | गलती करना | फ़ंक्शन क्या देखता है |
|---|---|---|
method | POST | req.method |
path | / | new URL(req.url).pathname |
headers | कोई नहीं | req.headers, नीचे सूचीबद्ध प्लेटफ़ॉर्म हेडर को छोड़कर |
body | कोई नहीं | await req.json() (या एक स्ट्रिंग के लिए req.text()) |
timeout | क्लाइंट डिफ़ॉल्ट (30 सेकंड) | दृश्यमान नहीं: आपकी कॉल रद्द कर देता है |
signal | कोई नहीं | दृश्यमान नहीं: आपकी कॉल रद्द कर देता है |
responseType | 'json' | दृश्यमान नहीं: SDK प्रतिक्रिया को कैसे डिकोड करता है, देखें गैर-JSON प्रतिक्रियाएँ |
जानने लायक नियम:
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-role | anon, authenticated या service_role |
x-aura-user-id | x-aura-role होने पर उपयोगकर्ता की आईडी authenticated है, अन्यथा अनुपस्थित है |
x-aura-project-id | प्रोजेक्ट आईडी |
authorization | उपयोगकर्ता का JWT, केवल साइन-इन उपयोगकर्ता के लिए |
apikey | कॉल के लिए उपयोग की जाने वाली कुंजी |
तीन अलग-अलग कुंजियों के साथ इस कॉल के वास्तविक परिणाम:
प्लेटफ़ॉर्म authorization, apikey, x-request-id और प्रत्येक x-aura-* हेडर को हटा देता है जो एक कॉलर headers में डालता है, चाहे उनका मामला कुछ भी हो। केवल वही मान जो उसने स्वयं सत्यापित किए हैं, आपके फ़ंक्शन तक पहुंचते हैं। अन्य कस्टम हेडर अपरिवर्तित होकर गुजरते हैं।
कॉल का x-request-id आपके फ़ंक्शन पर अग्रेषित नहीं किया जाता है। किसी कॉल को लॉग लाइन के साथ सहसंबंधित करने के लिए, अपनी स्वयं की आईडी बनाएं, इसे headers में भेजें और फ़ंक्शन में लॉग इन करें।
4. HTTP पर कॉल करें
SDK के बिना, एक JSON ऑब्जेक्ट भेजें जो अनुरोध का वर्णन करता हो। body फ़ील्ड वह है जो आपका फ़ंक्शन प्राप्त करता है।
apikey और Content-Type: application/json दोनों आवश्यक हैं। साइन-इन उपयोगकर्ता के रूप में कॉल करने के लिए Authorization: Bearer <user JWT> जोड़ें। डिफ़ॉल्ट प्रतिक्रिया एक लिफाफा है; X-Aurabase-Invoke-Mode: raw हेडर इसके बजाय आपके फ़ंक्शन की अपनी प्रतिक्रिया देता है, गैर-JSON प्रतिक्रियाएँ देखें।
5. परिणाम पढ़ें
invoke कभी नहीं फेंकता. यह { data, error } लौटाता है:
जब आपको मान की आवश्यकता हो तो error के बजाय data का परीक्षण करें: TypeScript तब पता चलता है कि यह null नहीं है। विफलताओं को ठीक से संभालने के लिए, त्रुटियाँ, टाइमआउट और पुनः प्रयास पढ़ें।