استدعاء وظيفة
كيفية استدعاء وظيفة منشورة باستخدام JavaScript SDK أو عبر HTTP، وكيف تعرف وظيفتك من المتصل.
1. اتصل من SDK
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 }:
اختبر data بدلاً من error عندما تحتاج إلى القيمة: TypeScript ثم تعرف أنها ليست null. للتعامل مع حالات الفشل بدقة، اقرأ الأخطاء والمهلات وإعادة المحاولة .