5.7 /crud/data — REST veri erişimi

<< İçindekileri Görüntülemek İçin Tıklayın >>

Yer:  Teknik Kılavuzlar > Netsim System Agent Kurulum ve Yönetim Kılavuzu > 5. Servis yüzeyleri >

5.7 /crud/data — REST veri erişimi

Kaynak modeli standarttır: /crud/data/<tablo> koleksiyon, /crud/data/<tablo>/<anahtar> tek kayıt.

İstekNe yaparYanıt
GET /crud/data/<tablo>Satırları listeler; sayfalama, süzme, sıralama ve arama kabul eder.200
GET /crud/data/<tablo>/<anahtar>Tek satır.200
POST /crud/data/<tablo>Yeni satır. Gövde: {"KOLON": değer, …}201
PUT /crud/data/<tablo>/<anahtar>Upsert — satır varsa güncellenir, yoksa oluşturulur.200 / 201
PATCH /crud/data/<tablo>/<anahtar>Yalnızca gövdedeki kolonları günceller.200, satır yoksa 404
DELETE /crud/data/<tablo>/<anahtar>Satırı siler.200, satır yoksa 404

Bu yol kimlik ister ve kimliğin kaynağını uygulamanın authMode anahtarı seçer:

authModeKim doğrular, yetki kimin
session (öndeğer)Oturum yöneticisi: bütün fiiller Basic auth ile MASTER login'i olarak doğrulanmış bir yönetici (SYSADMIN rolünün üyesi ya da SYSDBA) oturumu arar; kimliksiz istek 401, rolü olmayan 403 alır. Veritabanına MASTER kaydının parametrelerindeki kimlikle bağlanılır. Gerekçesi yeteneğin kendisidir: uç nokta uygulamanın veritabanındaki herhangi bir tabloyu okuyabilir ve yazabilir.
databaseİstekteki Basic kullanıcı adı ve parola veritabanına iletilir: bağlantı o kimlikle açılır, doğrulamayı depolama motoru yapar (Firebird kullanıcısı / PostgreSQL rolü) ve yetki de onundur — GRANT'ı olmayan tablo motorun kendi hatasıyla (400, ayrıntı günlükte) reddedilir. Oturuma ve yönetici rolüne bakılmaz. Kimlik bilgisi olmayan istek 401 + WWW-Authenticate, motorun reddettiği kimlik de 401 alır (yanlış parola ile ulaşılamayan sunucu istemciye aynı görünür; gerçek neden günlüktedir, parola günlüğe yazılmaz). sqlite'ta kullanıcı kavramı olmadığı için bu kip seçilmemelidir.

İki kipte de /crud/metadata aynı kapıdan geçer. database kipinde /crud/fastapi uç noktaları da istekteki Basic kimliğiyle koşar: SQL OPEN / SQL EXECUTE veritabanına o kimlikle bağlanır, MQL OPEN / MQL EXECUTE aynı kimliği IVEDI motoruna iter (MASTER login'i, harita, veritabanı kullanıcısı — CURRENT_USER ve haklar bu kimliğin olur; ad önce yazıldığı gibi, sonra büyük harfe katlanarak aranır, yani sysdba yazmak yeter). Kimliksiz istek 401, motorun ya da veritabanının reddettiği kimlik 401, havuz sınırı 503 alır. session kipinde ROLE_KODU kapısı ve conf'un veritabanı kimliği sürer; motor bağlantısı ise Basic auth ile doğrulanmış oturumda o login'in kimliğiyle koşar (MQL'de CURRENT_USER oturum kullanıcısıdır), kimliksiz istekte kimliksiz kalır. endpoints ve fastapihtml her iki kipte de kimliksizdir.

Anahtar kolonu, kataloğun birincil anahtarıdır. Tek kolonlu bir birincil anahtarı olmayan kaynakta tek kayıt yolu 400 ile reddedilir — üç durum ayrı ayrı bildirilir: anahtar yok, anahtar birden çok kolonlu, ya da sağlayıcı anahtarı veremiyor. Rastgele bir kolonu anahtar saymak sessizce yanlış satırı hedeflerdi. Görünümlerin ve anahtarsız tabloların koleksiyon yolu her zaman açıktır; tek kayıt yerine süzgeç kullanın.

5.7.1 Sorgu seçenekleri

ParametreAnlamı
limit=<n>En fazla n satır. Öndeğer 1000, üst sınır 10000.
offset=<n>İlk n satırı atlar.
order=<kolon>[.asc|.desc][,…]Sıralama.
q=<metin>Bütün düz metin kolonlarında arar (VEYA), büyük/küçük harf duyarsız. En fazla 200 bayt.
count=trueYanıta totalCount ekler — ayrı bir COUNT(*) sorgusu koşar.
<kolon>=[<işleç>.]<değer>Süzgeç. İşleç verilmezse eq. İşleçler: eq ne lt lte gt gte like nlike in nin isnull. in/nin değeri virgülle ayrılır, isnull değeri true/false.

Yanıt offset, limit ve rowCount taşır; count=true ile totalCount da. Tek kayıt yolunda sorgu seçenekleri okunmaz.

Dikkat

Tanınmayan bir sorgu parametresi 400 alır, sessizce yok sayılmaz — süzdüğünü sanıp bütün tabloyu okuyan bir çağıran üretmemek için. Bunun sonucu olarak limit, offset, order, q ve count adları rezervedir: aynı adı taşıyan bir kolon bu uç noktadan süzülemez.

Sıralamasız sayfalama deterministik değildir. Motorlar sıralamasız bir sorguda satır sırasını garanti etmez; offset kullanırken order da verin, yoksa sayfalar arasında satır tekrarlanabilir ya da atlanabilir.

Arama büyük/küçük harf eşlemesi veritabanının harmanlamasına bağlıdır. Aranan metin istemci tarafında ICU ile büyütülür, kolon ise motorda; motorun UPPER işlevi ASCII dışı harfleri büyütmüyorsa (sqlite'ın belgelenmiş davranışı, ve C benzeri yerelde kurulmuş bir PostgreSQL veritabanı) Türkçe harf içeren aramalar eşleşmeyebilir. Çaresi veritabanını Unicode farkındalığı olan bir harmanlamayla kurmaktır.