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

Mulai Cepat

Gambaran Umum Pengembangan Plugin
Menulis Plugin Pertama
Struktur Direktori Proyek

Pengembangan Sisi Server

Ikhtisar
Plugin
Collections
Operasi Database
Manajemen Sumber Data
Manajemen Sumber Daya
ACL
Middleware
Cache
Event
Konteks Permintaan
Skrip Migrasi
Logger
I18n
Command
Manajemen Tugas Terjadwal
Test

Pengembangan Sisi Klien

Ikhtisar
Plugin
Konteks
Router
ACL
Manajemen Sumber Data
Resource
Request
Gaya & Tema
Logger
I18n
Test

Lainnya

Panduan Peningkatan Plugin
Daftar Bahasa
Manajemen Dependensi
Build
Previous PageManajemen Sumber Data
Next PageACL
TIP

Dokumen ini diterjemahkan oleh AI. Untuk ketidakakuratan apa pun, silakan lihat versi bahasa Inggris

#ResourceManager

Fungsi manajemen sumber daya NocoBase dapat secara otomatis mengubah koleksi dan asosiasi yang ada menjadi sumber daya, dengan tipe operasi bawaan untuk membantu pengembang membangun operasi sumber daya REST API dengan cepat. Sedikit berbeda dari REST API tradisional, operasi sumber daya NocoBase tidak bergantung pada metode permintaan HTTP, melainkan menentukan operasi spesifik yang akan dijalankan melalui definisi :action yang eksplisit.

#Membuat Sumber Daya Secara Otomatis

NocoBase secara otomatis mengubah koleksi dan asosiasi yang didefinisikan dalam database menjadi sumber daya. Misalnya, mendefinisikan dua koleksi, yaitu posts dan tags:

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

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

Ini akan secara otomatis menghasilkan sumber daya berikut:

  • Sumber daya posts
  • Sumber daya tags
  • Sumber daya asosiasi posts.tags

Contoh permintaan:

MetodePathOperasi
GET/api/posts:listMelihat daftar
GET/api/posts:get/1Melihat satu data
POST/api/posts:createMenambah baru
POST/api/posts:update/1Memperbarui
POST/api/posts:destroy/1Menghapus
MetodePathOperasi
GET/api/tags:listMelihat daftar
GET/api/tags:get/1Melihat satu data
POST/api/tags:createMenambah baru
POST/api/tags:update/1Memperbarui
POST/api/tags:destroy/1Menghapus
MetodePathOperasi
GET/api/posts/1/tags:listMelihat semua tags yang terkait dengan post tertentu
GET/api/posts/1/tags:get/1Melihat satu tag di bawah post tertentu
POST/api/posts/1/tags:createMenambah satu tag baru di bawah post tertentu
POST/api/posts/1/tags:update/1Memperbarui satu tag di bawah post tertentu
POST/api/posts/1/tags:destroy/1Menghapus satu tag di bawah post tertentu
POST/api/posts/1/tags:addMenambahkan tags terkait ke post tertentu
POST/api/posts/1/tags:removeMenghapus tags terkait dari post tertentu
POST/api/posts/1/tags:setMengatur semua tags terkait untuk post tertentu
POST/api/posts/1/tags:toggleMengalihkan asosiasi tags untuk post tertentu
Tip

Operasi sumber daya NocoBase tidak secara langsung bergantung pada metode permintaan, melainkan menentukan operasi melalui definisi :action yang eksplisit.

#Operasi Sumber Daya

NocoBase menyediakan beragam tipe operasi bawaan untuk memenuhi berbagai kebutuhan bisnis.

#Operasi CRUD Dasar

Nama OperasiDeskripsiTipe Sumber Daya yang BerlakuMetode PermintaanContoh Path
listMelihat data daftarSemuaGET/POST/api/posts:list
getMelihat satu dataSemuaGET/POST/api/posts:get/1
createMembuat catatan baruSemuaPOST/api/posts:create
updateMemperbarui catatanSemuaPOST/api/posts:update/1
destroyMenghapus catatanSemuaPOST/api/posts:destroy/1
firstOrCreateMencari catatan pertama, jika tidak ada maka buatSemuaPOST/api/users:firstOrCreate
updateOrCreateMemperbarui catatan, jika tidak ada maka buatSemuaPOST/api/users:updateOrCreate

#Operasi Asosiasi

Nama OperasiDeskripsiTipe Asosiasi yang BerlakuContoh Path
addMenambahkan asosiasihasMany, belongsToMany/api/posts/1/tags:add
removeMenghapus asosiasihasOne, hasMany, belongsToMany, belongsTo/api/posts/1/comments:remove
setMengatur ulang asosiasihasOne, hasMany, belongsToMany, belongsTo/api/posts/1/comments:set
toggleMenambahkan atau menghapus asosiasibelongsToMany/api/posts/1/tags:toggle

#Parameter Operasi

Parameter operasi umum meliputi:

  • filter: Kondisi kueri
  • values: Nilai yang diatur
  • fields: Menentukan bidang yang dikembalikan
  • appends: Menyertakan data asosiasi
  • except: Mengecualikan bidang
  • sort: Aturan pengurutan
  • page, pageSize: Parameter paginasi
  • paginate: Apakah paginasi diaktifkan
  • tree: Apakah mengembalikan struktur pohon
  • whitelist, blacklist: Daftar putih/hitam bidang
  • updateAssociationValues: Apakah memperbarui nilai asosiasi

#Operasi Sumber Daya Kustom

NocoBase memungkinkan pendaftaran operasi tambahan untuk sumber daya yang sudah ada. Anda dapat menggunakan registerActionHandlers untuk menyesuaikan operasi untuk semua atau sumber daya tertentu.

#Mendaftarkan Operasi Global

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

#Mendaftarkan Operasi Spesifik Sumber Daya

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

Contoh permintaan:

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

Aturan penamaan: resourceName:actionName, gunakan sintaks titik (posts.comments) saat menyertakan asosiasi.

#Sumber Daya Kustom

Jika Anda perlu menyediakan sumber daya yang tidak terkait dengan koleksi, Anda dapat menggunakan metode resourceManager.define untuk mendefinisikannya:

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

Metode permintaan konsisten dengan sumber daya yang dibuat secara otomatis:

  • GET /api/app:getInfo
  • POST /api/app:getInfo (secara default mendukung GET/POST secara bersamaan)

#Middleware Kustom

Gunakan metode resourceManager.use() untuk mendaftarkan middleware global. Contohnya:

Middleware pencatat global

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

#Properti Context Khusus

Kemampuan untuk masuk ke middleware atau action pada lapisan resourceManager berarti sumber daya tersebut pasti ada.

#ctx.action

  • ctx.action.actionName: Nama operasi
  • ctx.action.resourceName: Bisa berupa koleksi atau asosiasi
  • ctx.action.params: Parameter operasi

#ctx.dataSource

Objek sumber data saat ini.

#ctx.getCurrentRepository()

Objek repositori saat ini.

#Cara Mendapatkan Objek resourceManager untuk Sumber Data yang Berbeda

resourceManager termasuk dalam sumber data, dan operasi dapat didaftarkan secara terpisah untuk sumber data yang berbeda.

#Sumber Data Utama

Untuk sumber data utama, Anda dapat langsung menggunakan app.resourceManager untuk melakukan operasi:

app.resourceManager.registerActionHandlers();

#Sumber Data Lainnya

Untuk sumber data lainnya, Anda dapat memperoleh instance sumber data tertentu melalui dataSourceManager dan menggunakan resourceManager dari instance tersebut untuk melakukan operasi:

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

#Mengiterasi Semua Sumber Data

Jika Anda perlu melakukan operasi yang sama pada semua sumber data yang telah ditambahkan, Anda dapat menggunakan metode dataSourceManager.afterAddDataSource untuk melakukan iterasi, memastikan resourceManager setiap sumber data dapat mendaftarkan operasi yang sesuai:

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