تمت ترجمة هذه الوثائق تلقائيًا بواسطة الذكاء الاصطناعي.
تتيح ميزة إدارة الموارد في NocoBase تحويل المجموعات (collection) والارتباطات (association) الموجودة تلقائيًا إلى موارد، وتوفر أنواع عمليات مدمجة لمساعدة المطورين على بناء عمليات موارد REST API بسرعة. على عكس واجهات REST API التقليدية، لا تعتمد عمليات موارد NocoBase على طرق طلب HTTP، بل تحدد العملية المحددة التي سيتم تنفيذها من خلال تعريف صريح لـ :action.
يحول NocoBase تلقائيًا collection و association المعرفة في قاعدة البيانات إلى موارد. على سبيل المثال، عند تعريف مجموعتين (collection) هما posts و tags:
سيؤدي هذا إلى توليد الموارد التالية تلقائيًا:
poststagsposts.tagsأمثلة على الطلبات:
| طريقة الطلب | المسار | العملية |
|---|---|---|
GET | /api/posts:list | استعلام القائمة |
GET | /api/posts:get/1 | استعلام فردي |
POST | /api/posts:create | إضافة جديد |
POST | /api/posts:update/1 | تحديث |
POST | /api/posts:destroy/1 | حذف |
| طريقة الطلب | المسار | العملية |
|---|---|---|
GET | /api/tags:list | استعلام القائمة |
GET | /api/tags:get/1 | استعلام فردي |
POST | /api/tags:create | إضافة جديد |
POST | /api/tags:update/1 | تحديث |
POST | /api/tags:destroy/1 | حذف |
| طريقة الطلب | المسار | العملية |
|---|---|---|
GET | /api/posts/1/tags:list | استعلام عن جميع tags المرتبطة بـ post معين |
GET | /api/posts/1/tags:get/1 | استعلام عن tag فردي ضمن post معين |
POST | /api/posts/1/tags:create | إنشاء tag فردي ضمن post معين |
POST | /api/posts/1/tags:update/1 | تحديث tag فردي ضمن post معين |
POST | /api/posts/1/tags:destroy/1 | حذف tag فردي ضمن post معين |
POST | /api/posts/1/tags:add | إضافة tags مرتبطة إلى post معين |
POST | /api/posts/1/tags:remove | إزالة tags مرتبطة من post معين |
POST | /api/posts/1/tags:set | تعيين جميع tags المرتبطة لـ post معين |
POST | /api/posts/1/tags:toggle | تبديل ارتباط tags لـ post معين |
لا تعتمد عمليات موارد NocoBase بشكل مباشر على طرق الطلب، بل تحدد العمليات من خلال تعريفات :action الصريحة.
يوفر NocoBase أنواع عمليات مدمجة غنية لتلبية مختلف احتياجات العمل.
| اسم العملية | الوصف | أنواع الموارد المطبقة | طريقة الطلب | مسار المثال |
|---|---|---|---|---|
list | استعلام بيانات القائمة | الكل | GET/POST | /api/posts:list |
get | استعلام بيانات فردية | الكل | GET/POST | /api/posts:get/1 |
create | إنشاء سجل جديد | الكل | POST | /api/posts:create |
update | تحديث سجل | الكل | POST | /api/posts:update/1 |
destroy | حذف سجل | الكل | POST | /api/posts:destroy/1 |
firstOrCreate | البحث عن أول سجل، وإنشاؤه إذا لم يكن موجودًا | الكل | POST | /api/users:firstOrCreate |
updateOrCreate | تحديث سجل، وإنشاؤه إذا لم يكن موجودًا | الكل | POST | /api/users:updateOrCreate |
| اسم العملية | الوصف | أنواع العلاقة المطبقة | مسار المثال |
|---|---|---|---|
add | إضافة ارتباط | hasMany, belongsToMany | /api/posts/1/tags:add |
remove | إزالة ارتباط | hasOne, hasMany, belongsToMany, belongsTo | /api/posts/1/comments:remove |
set | إعادة تعيين الارتباط | hasOne, hasMany, belongsToMany, belongsTo | /api/posts/1/comments:set |
toggle | إضافة أو إزالة ارتباط | belongsToMany | /api/posts/1/tags:toggle |
تشمل معلمات العملية الشائعة ما يلي:
filter: شروط الاستعلامvalues: القيم المراد تعيينهاfields: تحديد الحقول المراد إرجاعهاappends: تضمين البيانات المرتبطةexcept: استبعاد الحقولsort: قواعد الفرزpage، pageSize: معلمات الترحيلpaginate: هل يتم تمكين الترحيلtree: هل يتم إرجاع بنية شجريةwhitelist، blacklist: القائمة البيضاء/السوداء للحقولupdateAssociationValues: هل يتم تحديث قيم الارتباطيسمح NocoBase بتسجيل عمليات إضافية للموارد الموجودة. يمكنك استخدام registerActionHandlers لتخصيص العمليات لجميع الموارد أو لموارد محددة.
أمثلة على الطلبات:
قاعدة التسمية: resourceName:actionName، استخدم صيغة النقطة (posts.comments) عند تضمين الارتباطات.
إذا كنت بحاجة إلى توفير موارد لا ترتبط بالمجموعات (collection)، يمكنك استخدام طريقة resourceManager.define لتعريفها:
تتفق طرق الطلب مع الموارد التي يتم توليدها تلقائيًا:
GET /api/app:getInfoPOST /api/app:getInfo (يدعم GET/POST افتراضيًا)استخدم طريقة resourceManager.use() لتسجيل البرمجيات الوسيطة العامة (global middleware). على سبيل المثال:
برمجية وسيطة عامة للتسجيل (logging)
القدرة على الدخول إلى البرمجيات الوسيطة (middleware) أو الإجراء (action) في طبقة resourceManager تعني أن هذا المورد موجود حتمًا.
ctx.actionctx.action.actionName: اسم العمليةctx.action.resourceName: قد يكون مجموعة (collection) أو ارتباطًا (association)ctx.action.params: معلمات العمليةctx.dataSourceكائن مصدر البيانات الحالي
ctx.getCurrentRepository()كائن المستودع (repository) الحالي
resourceManager لمصادر بيانات مختلفةينتمي resourceManager إلى مصدر بيانات، ويمكن تسجيل العمليات بشكل منفصل لمصادر البيانات المختلفة.
بالنسبة لمصدر البيانات الرئيسي، يمكنك استخدام app.resourceManager مباشرة لتنفيذ العمليات:
بالنسبة لمصادر البيانات الأخرى، يمكنك الحصول على مثيل مصدر بيانات محدد عبر dataSourceManager، ثم استخدام resourceManager الخاص بهذا المثيل لتنفيذ العمليات:
إذا كنت بحاجة إلى تنفيذ نفس العمليات على جميع مصادر البيانات المضافة، يمكنك استخدام طريقة dataSourceManager.afterAddDataSource للتكرار، مما يضمن أن resourceManager لكل مصدر بيانات يمكنه تسجيل العمليات المقابلة: