Skip to main content

الغرض من هذه الواجهة

واجهة KayanOS البرمجية العامة هي واجهة خادم إلى خادم ذات إصدار محدد للسجلات التي أتاحتها المؤسسة عمداً. تصلح لتكامل مضبوط، مثل نظام تقارير لمركز خدمة يقرأ سجلات طلب خدمة مواطن المسموح بها أو يحدّث سجلاً معتمداً بحساب خدمة مُدار. ليست وسيلة لتجاوز الأدوار أو النطاقات أو رؤية الحقول أو قواعد الاعتماد أو البوابة العامة للنموذج. يعمل الرمز باسم العضو مالكه: لا يستطيع التكامل إلا تنفيذ أفعال الكيان ورؤية بيانات السجل/الحقل التي يملكها ذلك العضو. عامل كل رمز كبيان اعتماد عالي الحساسية. إرشاد أمان الواجهة العامة في KayanOS دون بيانات اعتماد.

قبل إرسال طلب

على مالك المؤسسة أو المسؤول الذي يملك صلاحية رموز الواجهة المناسبة إتمام القائمة التالية:
  1. من إعداد الكيان، فعّل الكيان للواجهة العامة. يعيد الكيان غير المفعّل ENTITY_NOT_FOUND عبر هذه الواجهة حتى لو كان موجوداً داخلياً.
  2. امنح مالك الرمز أقل الأفعال اللازمة للكيان: list وcreate وupdate و/أو delete. تظل النطاقات منطبقة على السجلات الفعلية.
  3. راجع الحقول. يُحذف الحقل المحمي بفعل قراءة ما لم يملك مالك الرمز ذلك الفعل، كما لا يصلح للترشيح أو الفرز عبر v1.
  4. أنشئ رمزاً مسمىً له مالك وغرض وقرار انتهاء ومالك للتدوير/الإلغاء. احفظ السر الذي يظهر لمرة واحدة في مدير أسرار معتمد، لا في كود المتصفح أو نموذج أو قالب مستند أو تذكرة أو لقطة شاشة.
  5. ابدأ بطلب للقراءة فقط على سجل غير إنتاجي معتمد لا يحوي بيانات شخصية. احتفظ بقيمة x-request-id مع دليل اختبار التكامل.
يبدأ تنسيق الرمز بـkayan_v1_؛ وهذا تنسيق تعريف فقط وليس منحاً للصلاحية. يمكن لرمز يبدو صحيحاً أن يكون منتهياً أو ملغى أو مملوكاً لعضو غير نشط أو غير قادر على الوصول إلى كيان.

عنوان الأساس والإصدار والتوثيق

استخدم مضيف KayanOS للمؤسسة المستهدفة ومسار الأساس v1:
يستخدم كل طلب رمز Bearer. لا تضع الرمز في عنوان URL أو سلسلة الاستعلام.
يعيد الخادم معرف الطلب المرسل أو ينشئ واحداً عند غيابه. احتفظ به عند الإبلاغ عن فشل. تستخدم الاستجابات الناجحة غلاف data، وتستخدم الأخطاء غلاف error.

خريطة نقاط النهاية

استبدل :entityKey بمفتاح الكيان العائد من الاكتشاف، لا بعنوان عرض مترجم. واستبدل :recordId بمعرف سجل الواجهة؛ لا يلزم بادئة الكيان الداخلية، إن وُجدت، في هذا العنوان.

اكتشف العقد الفعلي أولاً

لا تخمن مفاتيح الحقول ولا تفترض أن كياناً داخلياً متاح. ابدأ بالاكتشاف واحفظ النتيجة مع إعداد التكامل.
تتضمن النتيجة بيانات الحقول المرئية وخريطة صلاحيات. تعني صلاحية false أن التكامل لا يجوز أن يحاول ذلك الفعل؛ وليست دعوة لإعادة المحاولة بمرشح أوسع. عندما يملك الحقل قيد قراءة، قد يغيب عن قائمة الحقول ولا يجوز استخدامه في الترشيح أو الفرز عبر الواجهة العامة.

جلب السجلات والبحث والترشيح وتقسيم الصفحات

يقبل الجلب بـGET معاملات limit وcursor وsort وsearch. حجم الصفحة الافتراضي 100 والحد الأعلى 500. والفرز الافتراضي الأحدث أولاً حسب created. يستخدم فرز سلسلة الاستعلام قيم field:direction مفصولة بفواصل.
تحتوي الاستجابة على items وnextCursor. عامل nextCursor كقيمة معتمة: أرسلها كما هي مع الاستعلام المنطقي نفسه. لا تنشئ مؤشراً يدوياً ولا تفكّه لمنطق الأعمال ولا تعِد استخدامه مع فرز/مرشح تغيّر.
استخدم POST /records/query عندما يكون مرشح JSON أوضح أو أطول من عنوان URL. رشح وفرز الحقول القابلة للاستعلام العام فقط. مرشح المساواة البسيط مصفوفة من ثلاثة عناصر؛ وتستخدم المرشحات المركبة مصفوفتَي and أوor.
المرشح أو المؤشر أو الحد أو كائن الفرز غير الصالح، أو الحقل المحمي/غير القابل للاستعلام، مشكلة يجب تصحيحها في العميل. ضيّق الطلب وقارن مفاتيح الحقول بـGET /entities/:entityKey؛ ولا تعد إلى جمع كل السجلات.

أنشئ السجلات عن قصد

يتطلب الإنشاء كائناً تحوي قيمته data كائناً آخر. تستمر قواعد التحقق من جانب الخادم وصلاحيات الكيان والحقول المطلوبة وقواعد دورة الحياة والتحقق من تكرار التسمية.
يعيد الإنشاء الناجح 201 وغلاف السجل القابل للقراءة وETag عند وجود إصدار للسجل. وقد يعيد الإنشاء CREATED_RECORD_NOT_READABLE إذا استطاع مالك الرمز الإنشاء لكنه لا يستطيع قراءة السجل الجديد. عالج تصميم الصلاحية قبل افتراض فشل التكامل أو إعادة محاولة الإنشاء.

حدّث واحذف باستخدام ETag

اقرأ السجل قبل تغييره أو حذفه. تحمل استجابة القراءة ترويسة ETag المشتقة من إصدار السجل. أرسل القيمة نفسها تماماً في If-Match عند PATCH أوDELETE.
ترويسة If-Match إلزامية. يعيد غيابها 428 PRECONDITION_REQUIRED، ويعيد إصدار قديم 412 PRECONDITION_FAILED. تقبل الواجهة If-Match: * لكنها تتجاوز مقارنة الإصدار عمداً. استخدمها فقط عندما يقبل مالك تكامل موثق الكتابة فوق التغييرات المتزامنة؛ في سير العمل الخدمي العادي استخدم ETag الدقيق وأعد القراءة عند 412. يعيد الحذف { "id", "entityKey", "deleted": true } فقط بعد فحوص الصلاحية والإصدار نفسها. ليست هذه نقطة حذف جماعي. أنشئ عملية مراجعة واحتفاظ قبل منح رمز فعل delete.

الحدود والترويسات وإعادة المحاولة

القيم الافتراضية المنشورة هي 60 محاولة توثيق لكل عنوان IP في الدقيقة و600 طلب لكل رمز في الدقيقة. يمكن للنشر تغييرها، لذا اقرأ ترويسات الاستجابة بدلاً من تثبيت رقم في العميل: عند 429 انتظر على الأقل عدد ثواني retry-after وطبّق تراجعاً محدوداً. وعند 412 أعد قراءة السجل وقارن تغيير الأعمال ثم قرر إن كان التحديث ما زال صحيحاً. لا تعِد إنشاء أو حذفاً بشكل أعمى بعد مهلة: حدد أولاً هل نجح الطلب الأصلي باستخدام معرف آمن أو تسوية يراجعها المالك.

مرجع الحالات والأخطاء

مثال تكامل عملي: تقارير الطلبات المغلقة

لتكامل تقارير مركز خدمة:
  1. تفعّل المؤسسة service_requests فقط للواجهة العامة وتمنح عضواً للتقارير فعل list في نطاق مركز الخدمة المناسب.
  2. يستدعي التكامل /me عند البدء، ويحفظ تلميح الرمز ومعرف الطلب في سجل تشغيلي محمي، ويتوقف إذا كانت المؤسسة أو المالك غير متوقعين.
  3. يستعلم عن status = closed ومركز الخدمة المعتمد بالحد 25، ثم يتبع nextCursor حتى اكتمال نافذة التقرير.
  4. يحتفظ فقط بالحقول المعادة المطلوبة للتقرير، ولا يستنتج أو يجلب حقول مواطن أو مالية أو موظفين مخفية.
  5. إذا احتاج إلى تحديث حقل تديره التقارير، يقرأ السجل أولاً ويرسل ETag المعاد ثم يرسل تحديث { "data": { … } } ضيقاً. عند 412 يعيد القراءة ويطلب من مالك التكامل حسم الحالة المتغيرة.
وهذا يمنح المديرية حد تكامل قابل للتتبع من دون تحويل رمز الواجهة إلى تصدير شامل للبيانات.

قائمة الأمان والإصدار

  • استخدم رمزاً مسمىً واحداً لكل تكامل ولكل بيئة، ولا تشارك رمز شخص بين خدمات.
  • امنح المالك أقل أفعال ونطاقات للكيانات، واختبر الرفض قصداً مثلما تختبر الوصول الناجح.
  • اضبط تاريخ انتهاء ما لم تبرر متطلبات خدمة موثقة وعملية تدوير رمزاً بلا انتهاء.
  • احفظ الأسرار في مخزن أسرار خادمي معتمد فقط. لا تشحنها في عميل ويب أو جوال.
  • ألغ الرمز فوراً عند مغادرة مالكه أو تغير غرضه أو الاشتباه بتعرضه؛ الإلغاء يوقف عمله فوراً.
  • سجّل نقطة النهاية والحالة ومعرف الطلب واسم/تلميح الرمز ومرجع سجل منقحاً، لا ترويسة Authorization ولا الرمز الكامل ولا حمولة حساسة.
  • اختبر على سجل غير إنتاجي معتمد قبل تفعيل كتابات مجدولة في الإنتاج.

استكشاف الأخطاء وإصلاحها

أدلة ذات صلة