Tek Satırda API Oluşturma

Mobil uygulamalar için api yazmak alışkanlıklarımızdan oldu. Bunun için genelde php frameworklerin hazır sistemlerini kullanırdım. Bu sabah e-postama gelen bir bültenle bu günden itibaren api yazma işini tek satırda yapabileceğimi öğrendim.

Aslında çok mantıklı, veritabanı zaten belli, CRUD uygulamasının örneğini rahatlıkla üretebilir. Bu fikri bizler için çok kaliteli hale getiren o1lab‘a teşekkür etmeli 🙂

MySQL veritabanı motoru için geliştirilen bu API oluşturma sisteminin adı xmysql.

Tek satırda hangi veritabanı için olduğunu belirtiyorsunuz ve sizler için herşeyi hazır hale getiriyor.

Aşağıdaki hareketli resimde örneği görebilirsiniz.

Hemen ekliyorum, bu uygulamayı nodejs ile kullanabiliyorsunuz. Sunucunuzda Nodejs kurulu olmalı.

Hemen xmysql’i kurup denememizi yapalım,

npm install -g xmysql

Başka hiç bir şey yapmamız gerekmiyor, zaten çalışan MySQL’imizde bulunan veritabanı ve giriş bilgilerini yine terminalden giriyoruz.

xmysql -h localhost -u mysqlKullanicisi -p mysqlŞifresi -d veritabanı

Sonrasında

http://localhost:3000

ile erişebiliyoruz.

xmysql Özellikleri

  • Tüm MySQL Veritabanı türleri için API üretebilir.
  • CRUD desteği (ekle,oku,güncelle,sil)
  • Veritabanı ilişkileri
  • Primary key desteği
  • Sayfalama
  • Sıralama
  • Sütuna göre filtreleme
  • Satır filtreleme (Where clause)
  • Group By, Having kullanım
  • Dinamik query çalıştırma
  • Tekli dosya yükleme
  • Çoklu dosya yükleme
  • Dosya indirme

Bir API’da daha ne olsun ki ?

CRUD Kullanımı

  • GET /api/tableName
  • POST /api/tableName
  • GET /api/tableName/:id
  • PUT /api/tableName/:id
  • GET /api/tableName/count
  • GET /api/tableName/exists
  • GET /api/tableName/groupby
  • GET /api/tableName/aggregate
  • GET /api/parentTable/:id/childTable
  • DELETE /api/tableName/:id
  • POST /dynamic
  • GET /api/tableName/describe
  • GET /api/tables

İlişikili Tablolar

  • /api/blogs/103/comments

Primary Key Desteği

  • /api/payments/103___JM555205

Buradaki primary key olayını üç adet alt çizgi ile veriyoruz.

Pagination

Aman ya Rabbi, en sevdiğim kısmıda bu. Burada _p ve/veya _size kullanıyoruz. _p tabi ki sayfa _size ise kaç satır dönmesini istediğimizi beliyor, örnekler ;

/api/payments?_size=50
/api/payments?_p=2
/api/payments?_p=2&_size=50

Order by , Sıralama

Artan (ASC)

/api/payments?_sort=column1

Azalan (DESC)

/api/payments?_sort=-column1 Fark çok ince dimi 🙂 Evet sütünun başında – işareti var.

Çoklu Sütuna Göre Sıralama

/api/payments?_sort=column1,-column2

Sütunlara Göre Filtreleme

/api/payments?_fields=customerNumber,checkNumber

Şimdi buraya kadar süper, daha süperi de var, örneğin ben checkNumber harici herşeyi istiyorsam ?

/api/payments?_fields=-checkNumber

Evet, giderek hayran kalıyorum.

Where kullanımı

Where kullanımından önce hemen bir tanım listemizi inceleyelim,

eq  -   '='
ne  -   '!='
gt  -   '>'
gte -   '>='
lt  -   '<'
lte -   '<='

Kullanım örneği ise,

/api/payments?_where=(checkNumber,eq,JM555205)

Mantıksal operatörler için de bir tablomuz mevcut,

~or     -   'or'
~and    -   'and'
~xor    -   'xor'

Mantıksal operatör kullanımı ise,

/api/payments?_where=(checkNumber,eq,JM555205)~or(checkNumber,eq,OM314933)

Biraz daha karmaşık ise daha çok parantez kullanabiliriz 🙂

/api/payments?_where=((checkNumber,eq,JM555205)~or(checkNumber,eq,OM314933))~and(amount,gt,100)

Sıralama,sayfalama ve filtrelemeyi de istersek,

/api/payments?_where=(amount,gte,1000)&_sort=-amount&p=2&&_fields=customerNumber

Group By / Having

Örnek Sorgu: SELECT country,count(*) FROM offices GROUP BY country /api/offices?_groupby=country Örnek Sorgu: SELECT country,count(1) as _count FROM offices GROUP BY country having _count > 1 Bizdeki karşılığı /api/offices?_groupby=country&_having=(_count,gt,1)

Dinamik Sorgu Çalıştırma

Dinamik sorguları sunucuyu ayağa kaldırırken mysql’ide kullanırsak çalıştırabiliyoruz. -h ile server ile çalıştırmaktan bahsediyoruz.

Hemen örnek ardından da açıklamaya bakalım

POST /dynamic   

    {
        "query": "select * from ?? limit 1,20",
        "params": ["customers"]
    }

Burası localhost:3000/dynamic adresine post ettiğimiz veri. buradaki ?? bizler için prepare statement. params ise malum, bindValue veya bindParam

xmysql ile daha fazla uğraş isteyenler için https://github.com/o1lab/xmysql bu adres biçilmiş kaftan 🙂

Bir Cevap Yazın