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)
Колекції (таблиці даних)
Операції з базою даних (Database)
Керування джерелами даних (DataSourceManager)
Керування ресурсами (ResourceManager)
Контроль доступу (ACL)
Проміжне ПЗ (Middleware)
Кеш (Cache)
Подія (Event)
Контекст запиту (Context)
Скрипт оновлення (Migration)
Логи (Logger)
Інтернаціоналізація (I18n)
Командний рядок (Command)
Керування завданнями за розкладом (CronJobManager)
Тестування (Test)

Клієнтська розробка

Огляд
Плагін (Plugin)
Контекст (Context)
Маршрутизатор (Router)
Контроль доступу (ACL)
Керування джерелами даних (DataSourceManager)
Ресурс (Resource)
Запит (Request)
Стилі та теми (Styles & Themes)
Логи (Logger)
Інтернаціоналізація (I18n)
Тестування (Test)

Інше

Посібник з оновлення плагінів
Список мов
Керування залежностями
Збірка
Previous PageКерування джерелами даних (DataSourceManager)
Next PageКонтроль доступу (ACL)
Повідомлення про переклад ШІ

Ця документація була автоматично перекладена штучним інтелектом.

#ResourceManager Керування ресурсами

Функція керування ресурсами NocoBase може автоматично перетворювати наявні таблиці даних (колекції) та зв'язки (асоціації) на ресурси, і має вбудовані типи операцій, що допомагає розробникам швидко створювати операції з ресурсами REST API. На відміну від традиційних REST API, операції з ресурсами 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Запит однієї tags для post
POST/api/posts/1/tags:createСтворити одну tags для post
POST/api/posts/1/tags:update/1Оновити одну tags для post
POST/api/posts/1/tags:destroy/1Видалити одну tags для 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)

#Користувацьке проміжне програмне забезпечення

Використовуйте метод resourceManager.use() для реєстрації глобального проміжного програмного забезпечення. Наприклад:

Глобальне проміжне програмне забезпечення для логування

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

Можливість доступу до проміжного програмного забезпечення або дії на рівні resourceManager означає, що цей ресурс обов'язково існує.

#ctx.action

  • ctx.action.actionName: Назва операції
  • ctx.action.resourceName: Може бути колекцією або зв'язком
  • ctx.action.params: Параметри операції

#ctx.dataSource

Поточний об'єкт джерела даних.

#ctx.getCurrentRepository()

Поточний об'єкт репозиторію.

#Як отримати об'єкти 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();
});