logologo
התחלה
מדריך
פיתוח
תוסף
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
התחלה
מדריך
פיתוח
תוסף
API
logologo

התחלה מהירה

סקירת פיתוח Plugin
כתיבת Plugin ראשון
מבנה תיקיות הפרויקט

פיתוח Server-side

סקירה כללית
Plugin
Collections טבלאות נתונים
Database: פעולות
DataSourceManager - ניהול מקורות נתונים
ResourceManager
ACL בקרת הרשאות
Middleware
Cache
Event
Context - הקשר בקשה
Migration סקריפט שדרוג
Logger יומן
Telemetry
I18n בינאום
Command
CronJobManager ניהול משימות מתוזמנות
Test

פיתוח Client-side

סקירה כללית
Plugin
Context
Router ניתוב
ACL בקרת הרשאות
DataSourceManager - ניהול מקורות נתונים
Resource
Request
Styles & Themes
Logger יומן
I18n בינאום
Test

אחר

מדריך שדרוג Plugin
רשימת שפות
ניהול תלויות
בנייה
Previous PageDataSourceManager - ניהול מקורות נתונים
Next PageACL בקרת הרשאות
TIP

מסמך זה תורגם על ידי בינה מלאכותית. לכל אי דיוק, אנא עיין בגרסה האנגלית

#מנהל משאבים (ResourceManager)

תכונת ניהול המשאבים של NocoBase ממירה אוטומטית אוספים (collections) וקשרים (associations) קיימים למשאבים. היא כוללת סוגי פעולות מובנים המסייעים למפתחים לבנות במהירות פעולות משאבי REST API. בשונה מ-REST APIs מסורתיים, פעולות המשאבים ב-NocoBase אינן מסתמכות על שיטות בקשת HTTP, אלא קובעות את הפעולה הספציפית לביצוע באמצעות הגדרה מפורשת של :action.

#יצירת משאבים אוטומטית

NocoBase ממירה אוטומטית אוספים וקשרים המוגדרים במסד הנתונים למשאבים. לדוגמה, אם נגדיר שני אוספים, posts ו-tags:

db.defineCollection({
  name: 'posts',
  fields: [
    { type: 'belongsToMany', name: 'tags' },
  ],
});

db.defineCollection({
  name: 'tags',
  fields: [],
});

זה ייצור אוטומטית את המשאבים הבאים:

  • משאב posts
  • משאב tags
  • משאב קשר posts.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 מספקת מגוון עשיר של סוגי פעולות מובנים כדי לענות על צרכים עסקיים שונים.

#פעולות CRUD בסיסיות

שם הפעולהתיאורסוגי משאבים רלוונטייםשיטת בקשהנתיב לדוגמה
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 כדי להתאים אישית פעולות עבור כל המשאבים או עבור משאבים ספציפיים.

#רישום פעולות גלובליות

resourceManager.registerActionHandlers({
  customAction: async (ctx) => {
    ctx.body = { resource: ctx.action.resourceName };
  },
});

#רישום פעולות ספציפיות למשאב

resourceManager.registerActionHandlers({
  'posts:publish': async (ctx) => publishPost(ctx),
  'posts.comments:pin': async (ctx) => pinComment(ctx),
});

דוגמאות בקשה:

POST /api/posts:customAction
POST /api/posts:publish
POST /api/posts/1/comments:pin

כלל מתן שמות: resourceName:actionName. כאשר כוללים קשרים, השתמשו בתחביר נקודה (posts.comments).

#משאבים מותאמים אישית

אם אתם צריכים לספק משאבים שאינם קשורים לאוספים, אתם יכולים להשתמש בשיטת resourceManager.define כדי להגדיר אותם:

resourceManager.define({
  name: 'app',
  actions: {
    getInfo: async (ctx) => {
      ctx.body = { version: 'v1' };
    },
  },
});

שיטות הבקשה עקביות עם משאבים שנוצרו אוטומטית:

  • GET /api/app:getInfo
  • POST /api/app:getInfo (תומך ב-GET/POST כברירת מחדל)

#Middleware מותאם אישית

השתמשו בשיטת resourceManager.use() כדי לרשום middleware גלובלי. לדוגמה:

Middleware גלובלי לרישום יומן

resourceManager.use(async (ctx, next) => {
  const start = Date.now();
  await next();
  const duration = Date.now() - start;
  console.log(`${ctx.method} ${ctx.path} - ${duration}ms`);
});

#מאפייני Context מיוחדים

היכולת להיכנס ל-middleware או לפעולה בשכבת ה-resourceManager מצביעה על כך שהמשאב חייב להתקיים.

#ctx.action

  • ctx.action.actionName: שם הפעולה
  • ctx.action.resourceName: יכול להיות אוסף או קשר
  • ctx.action.params: פרמטרים של הפעולה

#ctx.dataSource

אובייקט מקור הנתונים הנוכחי.

#ctx.getCurrentRepository()

אובייקט ה-repository הנוכחי.

#כיצד לקבל אובייקטי resourceManager עבור מקורות נתונים שונים

resourceManager שייך למקור נתונים, וניתן לרשום פעולות בנפרד עבור מקורות נתונים שונים.

#מקור נתונים ראשי

עבור מקור הנתונים הראשי, אתם יכולים להשתמש ישירות ב-app.resourceManager לביצוע פעולות:

app.resourceManager.registerActionHandlers();

#מקורות נתונים אחרים

עבור מקורות נתונים אחרים, אתם יכולים לקבל מופע ספציפי של מקור נתונים באמצעות dataSourceManager ולהשתמש ב-resourceManager של מופע זה לביצוע פעולות:

const dataSource = dataSourceManager.get('external');
dataSource.resourceManager.registerActionHandlers();

#מעבר על כל מקורות הנתונים

אם אתם צריכים לבצע את אותן פעולות על כל מקורות הנתונים שנוספו, אתם יכולים להשתמש בשיטת dataSourceManager.afterAddDataSource כדי לעבור עליהם, ובכך להבטיח ש-resourceManager של כל מקור נתונים יוכל לרשום את הפעולות המתאימות:

dataSourceManager.afterAddDataSource((dataSource) => {
  dataSource.resourceManager.registerActionHandlers();
});