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

Hızlı Başlangıç

Eklenti Geliştirmeye Genel Bakış
İlk Eklentinizi Yazma
Proje Dizin Yapısı

Sunucu Taraflı Geliştirme

Genel Bakış
Plugin
Collections
Database İşlemleri
DataSourceManager
ResourceManager
ACL İzin Kontrolü
Middleware
Cache
Event
Context
Migration
Logger
I18n
Command
CronJobManager
Test

İstemci Taraflı Geliştirme

Genel Bakış
Plugin
Context
Router
ACL İzin Kontrolü
DataSourceManager
Resource
Request
Styles & Themes
Logger
I18n
Test

Diğer

Eklenti Yükseltme Kılavuzu
Dil Listesi
Bağımlılık Yönetimi
Derleme
Previous PageDataSourceManager
Next PageACL İzin Kontrolü
TIP

Bu belge AI tarafından çevrilmiştir. Herhangi bir yanlışlık için lütfen İngilizce sürümüne bakın

#ResourceManager Kaynak Yönetimi

NocoBase'in kaynak yönetimi özelliği, mevcut koleksiyonları ve ilişkileri (association) otomatik olarak kaynaklara dönüştürebilir. Bu özellik, geliştiricilerin REST API kaynak işlemlerini hızla oluşturmasına yardımcı olmak için çeşitli yerleşik işlem türleri sunar. Geleneksel REST API'lerinden biraz farklı olarak, NocoBase kaynak işlemleri HTTP istek yöntemlerine doğrudan bağlı değildir; bunun yerine, gerçekleştirilecek belirli işlemi açıkça tanımlanmış :action ile belirlersiniz.

#Otomatik Kaynak Oluşturma

NocoBase, veritabanında tanımlanan koleksiyonları ve ilişkileri otomatik olarak kaynaklara dönüştürür. Örneğin, posts ve tags olmak üzere iki koleksiyon tanımladığınızda:

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

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

Bu durumda aşağıdaki kaynaklar otomatik olarak oluşturulur:

  • posts kaynağı
  • tags kaynağı
  • posts.tags ilişki kaynağı

İstek Örnekleri:

İstek YöntemiYolİşlem
GET/api/posts:listListe Sorgula
GET/api/posts:get/1Tek Kayıt Sorgula
POST/api/posts:createYeni Ekle
POST/api/posts:update/1Güncelle
POST/api/posts:destroy/1Sil
İstek YöntemiYolİşlem
GET/api/tags:listListe Sorgula
GET/api/tags:get/1Tek Kayıt Sorgula
POST/api/tags:createYeni Ekle
POST/api/tags:update/1Güncelle
POST/api/tags:destroy/1Sil
İstek YöntemiYolİşlem
GET/api/posts/1/tags:listBelirli bir post'a ait tüm tags'leri sorgula
GET/api/posts/1/tags:get/1Belirli bir post altındaki tek bir tags'i sorgula
POST/api/posts/1/tags:createBelirli bir post altındaki tek bir tags'i oluştur
POST/api/posts/1/tags:update/1Belirli bir post altındaki tek bir tags'i güncelle
POST/api/posts/1/tags:destroy/1Belirli bir post altındaki tek bir tags'i sil
POST/api/posts/1/tags:addBelirli bir post'a ilişkili tags'leri ekle
POST/api/posts/1/tags:removeBelirli bir post'tan ilişkili tags'leri kaldır
POST/api/posts/1/tags:setBelirli bir post'a ait tüm ilişkili tags'leri ayarla
POST/api/posts/1/tags:toggleBelirli bir post'a ait tags ilişkisini değiştir/geçiş yap
İpucu

NocoBase kaynak işlemleri doğrudan istek yöntemlerine bağlı değildir; bunun yerine, gerçekleştirilecek işlemi açıkça tanımlanmış :action ile belirlersiniz.

#Kaynak İşlemleri

NocoBase, çeşitli iş ihtiyaçlarını karşılamak için zengin yerleşik işlem türleri sunar.

#Temel CRUD İşlemleri

İşlem AdıAçıklamaUygulanabilir Kaynak Türleriİstek YöntemiÖrnek Yol
listListe verilerini sorgulaTümüGET/POST/api/posts:list
getTek bir kaydı sorgulaTümüGET/POST/api/posts:get/1
createYeni kayıt oluşturTümüPOST/api/posts:create
updateKaydı güncelleTümüPOST/api/posts:update/1
destroyKaydı silTümüPOST/api/posts:destroy/1
firstOrCreateİlk kaydı bul, yoksa oluşturTümüPOST/api/users:firstOrCreate
updateOrCreateKaydı güncelle, yoksa oluşturTümüPOST/api/users:updateOrCreate

#İlişki İşlemleri

İşlem AdıAçıklamaUygulanabilir İlişki TürleriÖrnek Yol
addİlişki eklehasMany, belongsToMany/api/posts/1/tags:add
removeİlişkiyi kaldırhasOne, hasMany, belongsToMany, belongsTo/api/posts/1/comments:remove
setİlişkiyi sıfırlahasOne, hasMany, belongsToMany, belongsTo/api/posts/1/comments:set
toggleİlişki ekle veya kaldırbelongsToMany/api/posts/1/tags:toggle

#İşlem Parametreleri

Yaygın işlem parametreleri şunları içerir:

  • filter: Sorgu koşulları
  • values: Ayarlanacak değerler
  • fields: Döndürülecek alanları belirtir
  • appends: İlişkili verileri dahil eder
  • except: Alanları hariç tutar
  • sort: Sıralama kuralları
  • page, pageSize: Sayfalama parametreleri
  • paginate: Sayfalamanın etkinleştirilip etkinleştirilmeyeceği
  • tree: Ağaç yapısı döndürülüp döndürülmeyeceği
  • whitelist, blacklist: Alan beyaz listesi/kara listesi
  • updateAssociationValues: İlişki değerlerinin güncellenip güncellenmeyeceği

#Özel Kaynak İşlemleri

NocoBase, mevcut kaynaklar için ek işlemler kaydetmenize olanak tanır. Tüm kaynaklar veya belirli kaynaklar için işlemleri özelleştirmek üzere registerActionHandlers kullanabilirsiniz.

#Genel İşlemleri Kaydetme

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

#Belirli Kaynaklara Özgü İşlemleri Kaydetme

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

İstek Örnekleri:

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

Adlandırma kuralı: resourceName:actionName. İlişkiler dahil edildiğinde nokta sözdizimi (posts.comments) kullanılır.

#Özel Kaynaklar

Koleksiyonlarla ilişkili olmayan kaynaklar sağlamanız gerektiğinde, bunları resourceManager.define yöntemini kullanarak tanımlayabilirsiniz:

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

İstek yöntemleri, otomatik olarak oluşturulan kaynaklarla tutarlıdır:

  • GET /api/app:getInfo
  • POST /api/app:getInfo (varsayılan olarak hem GET hem de POST'u destekler)

#Özel Ara Katman Yazılımları (Middleware)

resourceManager.use() yöntemini kullanarak genel ara katman yazılımlarını kaydedebilirsiniz. Örneğin:

Genel günlükleme ara katman yazılımı

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

#Özel Bağlam (Context) Özellikleri

resourceManager katmanının ara katman yazılımına veya işlemine girebilmek, bu kaynağın mutlaka var olduğu anlamına gelir.

#ctx.action

  • ctx.action.actionName: İşlem adı
  • ctx.action.resourceName: Bir koleksiyon veya ilişki (association) olabilir
  • ctx.action.params: İşlem parametreleri

#ctx.dataSource

Mevcut veri kaynağı nesnesi.

#ctx.getCurrentRepository()

Mevcut repository nesnesi.

#Farklı Veri Kaynaklarının ResourceManager Nesneleri Nasıl Alınır?

resourceManager bir veri kaynağına aittir ve farklı veri kaynakları için ayrı ayrı işlemler kaydedebilirsiniz.

#Ana Veri Kaynağı

Ana veri kaynağı için doğrudan app.resourceManager kullanabilirsiniz:

app.resourceManager.registerActionHandlers();

#Diğer Veri Kaynakları

Diğer veri kaynakları için, dataSourceManager aracılığıyla belirli bir veri kaynağı örneğini alabilir ve bu örneğin resourceManager'ını kullanarak işlem yapabilirsiniz:

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

#Tüm Veri Kaynaklarını Yineleme

Eklenen tüm veri kaynakları üzerinde aynı işlemleri gerçekleştirmeniz gerekiyorsa, her veri kaynağının resourceManager'ının ilgili işlemleri kaydedebildiğinden emin olmak için dataSourceManager.afterAddDataSource yöntemini kullanarak yineleme yapabilirsiniz:

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