Skip to content

CRUD ve Sorgular

Cavanshirpro edited this page Sep 19, 2026 · 1 revision

SQL CRUD, filtreler, pagination ve batch

English · Türkçe · Languages / Diller

Kapsam: JSON API Forge 0.5.1 · İnceleme: 17 Eylül 2026 · Dil: Türkçe

Bir SQL resource, izin verilen HTTP işlemleriyle tabloyu eşler. En küçük kullanışlı kaynak:

{
  "resources": [
    {
      "database": "primary",
      "table": "notes",
      "path": "notes",
      "auto_create": true,
      "columns": {
        "id": {"type": "integer", "primary_key": true, "nullable": false},
        "title": {"type": "string", "nullable": false, "max_length": 160},
        "status": {"type": "string", "default": "draft", "index": true}
      },
      "writable_fields": ["title", "status"],
      "allowed_filters": ["status"],
      "filter_operators": ["eq", "ne", "in"],
      "search_fields": ["title"],
      "allowed_sort": ["id", "title"],
      "permissions": {
        "list": "notes.list", "read": "notes.read", "create": "notes.create",
        "update": "notes.update", "delete": "notes.delete"
      }
    }
  ]
}

Üretilen yollar

P proje API prefix'i olsun. Endpointlerin varlığı enabled, allowed_actions, batch/count ayarlarına bağlıdır.

Yöntem/yol Davranış
GET P/notes Sınırlı liste
POST P/notes Yeni kayıt
GET P/notes/{item_id} Tek kayıt
PATCH P/notes/{item_id} Gönderilen alanları değiştirir
PUT P/notes/{item_id} Yazılabilir temsilin yerini alır; kimlik/politika alanları korunur
DELETE P/notes/{item_id} Silme veya yapılandırıldıysa soft-delete
GET P/notes/_count Aynı görünürlük/filtre politikasında sayım

Tam listeyi forge routes ve proje /_openapi.json çıktısından alın. Statik Wiki tablosunu tüm uygulamaların zorunlu API'si olarak kullanmayın.

Alan politikaları

readable_fields okuma allowlist'i, hidden_fields gizlenecek alanlar, writable_fields istemcinin yazabileceği alanlardır. Açık allowlist'ler tercih edin. create_schema ve update_schema ayrıca JSON Schema doğrulaması uygular; alanın veritabanında var olması istemcinin yazabileceği anlamına gelmez.

Primary key, tenant, owner ve soft-delete alanları server politikasına aittir. Bunları istemci yazma listesine koymayın. owner_actions ve tenant_field için satır yetkileri sayfasını okuyun.

Filtre ve arama

GET P/notes?status=draft&limit=20&offset=0&sort=-id
GET P/notes?status__in=draft,published&q=api

SQL operatörleri: eq, ne, gt, gte, lt, lte, in, like, ilike, isnull. Hem alan hem operatör allowlist'te olmalıdır. q yalnız search_fields üzerinde arar. sort=-field azalan sıralamadır.

v0.5.1 ayrıntısı: SQL filtreleyici tanınmayan veya izin verilmeyen filtreyi sessizce atlar. Yazım hatasında sorgunun beklediğinizden geniş sonuç dönmediğini kontrol edin. Filtreler yetkilendirme değildir; tenant/owner sınırı ayrı uygulanır.

Offset yanıtı items, limit, offset içerir; otomatik total alanı vaat edilmez. Toplam gerektiğinde _count kullanılır. Sayım büyük tablolarda ek maliyet oluşturur.

Cursor pagination

pagination_mode: "cursor", cursor_field ve primary key bağlama sıralamasıyla kararlı keyset pagination sağlar. Yanıt next_cursor ve has_more içerir. Cursor opaque kabul edilir, sunucuya aynen geri gönderilir. Cursor modunda offset ve sort reddedilir; offset modunda cursor reddedilir. İndeksleri seçtiğiniz cursor alanı ve primary key'e göre tasarlayın.

Python SDK'nın sync iter_items yardımcısı offset kullanır; cursor kaynağı için kendi sınırlı döngünüzde next_cursor izleyin.

Batch ve silme

batch_enabled varsayılan olarak kapalıdır; max_batch_size varsayılanı 100'dür. Batch endpointleri için gerçek OpenAPI gövde sözleşmesini kullanın; REST istemcinizin her batch işlemini tek büyük atomik iş saymasına izin vermeyin. Soft-delete görünürlüğü list/read/count'ta uygulanır; satırın fiziksel olarak silinmemesi retention ve disk temizliği politikasını ayrıca gerektirir.

Kaynak ve doğrulama

Bu sayfa aşağıdaki sabit commitlerdeki davranışı açıklar. Yeni bir sürümde aynı davranışın sürdüğünü varsaymayın.


Wiki ana sayfa · Tüm sayfalar · Sürüm ve bakım

Clone this wiki locally