BiSoft Logo

Hizmetler

Ürünler

Ortaklık

Blog

Turkish

Genel

Kod Yok, API Var: PostgREST ile Backend’siz Backend

Hep Aynı Hikaye

PostgreSQL veritabanında bir tablo oluşturdunuz. İçine birkaç satır veri eklediniz. Şimdi bu verileri ekranlarınızdan göstermek istiyorsunuz.

Normal senaryo:

  1. Backend framework seçilir (Node.js, Django, Spring Boot…)

  2. ORM entegre edilir (opsiyonel)

  3. CRUD endpoint’leri yazılır

  4. Yetkilendirme eklenir

  5. Deployment yapılır

Bazen hızlı prototipleme için, sırf birkaç satır veriyi okumak için gereksiz karmaşık bir backend inşa edilir. Böylece prototipleme hızlı olmaz.

PostgREST ile sadece PostgreSQL bilginizle, sıfır backend koduyla, hazır ve güvenli bir REST API elde edebilirsiniz.


PostgREST nedir?

PostgREST, PostgreSQL veritabanınızı doğrudan RESTful bir API’ye dönüştüren açık kaynaklı bir araçtır. Ek bir geliştirme yapmadan veritabanınızı bir endpoint olarak dışarı açmanızı sağlar.

  • Tablolarınız → Otomatik endpoint’ler

  • SQL fonksiyonlarınız → Custom action’lar

  • PostgreSQL rolleriniz → API yetkilendirme sistemi


Kurulum

PostgreSQL veritabanınıza bir şey kurmanıza gerek yoktur. DB sunucusuna ya da karşılayacağı yüke göre ayrı bir sunucuya executable ı kopyalamanız ve config dosyası ile çalıştırmanız yeterli olur.

postgrest.conf:

# PostgreSQL connection info
db-uri = "postgres://user:password@localhost:5432/database_name"

# Port PostgREST will listen on
server-port = 3000

# Log levels: crit, error, warn, info, debug
log-level = "info"
# PostgreSQL connection info
db-uri = "postgres://user:password@localhost:5432/database_name"

# Port PostgREST will listen on
server-port = 3000

# Log levels: crit, error, warn, info, debug
log-level = "info"
# PostgreSQL connection info
db-uri = "postgres://user:password@localhost:5432/database_name"

# Port PostgREST will listen on
server-port = 3000

# Log levels: crit, error, warn, info, debug
log-level = "info"


Bir musteri tablonuz olsun:

CREATE TABLE customer(
  id serial primary key,
  full_name text,
  email text
)

CREATE TABLE customer(
  id serial primary key,
  full_name text,
  email text
)

CREATE TABLE customer(
  id serial primary key,
  full_name text,
  email text
)


API üzerinden otomatik çalışan örnekler:

Tüm müşteriler

curl http://localhost:3000
curl http://localhost:3000
curl http://localhost:3000

Filtreleme

curl http://localhost:3000
curl http://localhost:3000
curl http://localhost:3000

Yeni müşteri ekleme

curl -X POST http://localhost:3000/customer \
  -H "Content-Type: application/json" \
  -d '{"full_name": "Ayşe", "email": "[email protected]"}'
curl -X POST http://localhost:3000/customer \
  -H "Content-Type: application/json" \
  -d '{"full_name": "Ayşe", "email": "[email protected]"}'
curl -X POST http://localhost:3000/customer \
  -H "Content-Type: application/json" \
  -d '{"full_name": "Ayşe", "email": "[email protected]"}'

Müşteri Güncelleme

curl -X PATCH "http://localhost:3000/customer?id=eq.1" \
  -H "Content-Type: application/json" \
  -d '{"full_name": "Mehmet", "email": "[email protected]"}'
curl -X PATCH "http://localhost:3000/customer?id=eq.1" \
  -H "Content-Type: application/json" \
  -d '{"full_name": "Mehmet", "email": "[email protected]"}'
curl -X PATCH "http://localhost:3000/customer?id=eq.1" \
  -H "Content-Type: application/json" \
  -d '{"full_name": "Mehmet", "email": "[email protected]"}'

Müşteri varsa update yoksa insert (UPSERT)

curl -X POST "http://localhost:3000/customer" \
  -H "Content-Type: application/json" \
  -H "Prefer: resolution=merge-duplicates" \
  -d '{"id": 1, "full_name": "Ahmet", "email": "[email protected]"}'
curl -X POST "http://localhost:3000/customer" \
  -H "Content-Type: application/json" \
  -H "Prefer: resolution=merge-duplicates" \
  -d '{"id": 1, "full_name": "Ahmet", "email": "[email protected]"}'
curl -X POST "http://localhost:3000/customer" \
  -H "Content-Type: application/json" \
  -H "Prefer: resolution=merge-duplicates" \
  -d '{"id": 1, "full_name": "Ahmet", "email": "[email protected]"}'

Veya:

curl -X PUT "http://localhost:3000/customer?id=eq.1" \
  -H "Content-Type: application/json" \
  -d '{"full_name": "Ahmet", "email": "[email protected]"}'
curl -X PUT "http://localhost:3000/customer?id=eq.1" \
  -H "Content-Type: application/json" \
  -d '{"full_name": "Ahmet", "email": "[email protected]"}'
curl -X PUT "http://localhost:3000/customer?id=eq.1" \
  -H "Content-Type: application/json" \
  -d '{"full_name": "Ahmet", "email": "[email protected]"}'

Güvenlik

Güvenlik katmanına geldiğimiz zaman, o iş yükünün tamamen PostgreSQL üzerinde olduğunu görüyoruz.

  • “anon” rolü → halka açık API

  • JWT token → kullanıcı doğrulama

  • Row-Level Security (RLS) → satır bazlı erişim kontrolü

Bunları veriyi kimlerin nasıl görebileceği için kullanbilirsiniz. Ya da araya NGINX gibi bir katman ekleyerek tokenları statik bir şekilde onun üzerinden yönetebilirsiniz. Ya da kendiniz bir orta katman yazarak dagha ileri seviye bir yetkilendirme de kullanabilirsiniz.

Kullanım Senaryoları

  • Prototip geliştirme → Backend ile zaman kaybetmeden direk frontend geliştirmeye başlama.

  • Dashboard / Admin panel → CRUD operasyonları hazır

  • Mikroservis → PostgreSQL’i olan servisi API’ye çevir

  • Low-code / No-code çözümler → Frontend doğrudan API’den beslenir

Avantajlar

  • Backend yazmaya gerek yok

  • PostgreSQL’in tüm gücünü kullanır

  • Hızlı prototip ve üretim hazır API

  • Güvenlik Postgres rollerine devredilir

Dezavantajlar

  • PostgreSQL bağımlılığı, diğer veritabanları için de benzer uygulamalar biliyorsanız yorumlara ekleyebilirsiniz.

  • Karmaşık iş kuralları için SQL fonksiyonlarına yüklenmek gerekebilir. PostgreSQL de farklı programlama dilleri ile function yazabiliyor olmak bu noktada avantaja da dönüşebilir.

  • API tasarımında özelleştirme sınırlı.

Eğer PostgreSQL kullanıyor ve “keşke backend ile uğraşmadan doğrudan API olsa” diyorsanız, PostgREST sizin için doğru tercih olabilir.

250'den fazla müşterimize katılın

İster uzman danışmanlık, ister özel yazılım, ister kapsamlı veri çözümleri arıyor olun, BiSoft yanınızda. Hedeflerinize nasıl katkı sağlayabileceğimizi konuşalım.

250'den fazla müşterimize katılın

İster uzman danışmanlık, ister özel yazılım, ister kapsamlı veri çözümleri arıyor olun, BiSoft yanınızda. Hedeflerinize nasıl katkı sağlayabileceğimizi konuşalım.

250'den fazla müşterimize katılın

İster uzman danışmanlık, ister özel yazılım, ister kapsamlı veri çözümleri arıyor olun, BiSoft yanınızda. Hedeflerinize nasıl katkı sağlayabileceğimizi konuşalım.

İş büyümesi ve verimliliği için akıllı veri çözümleri

Şirket

Hizmetler

Ürün

Vispeahen

BFM

BFM4Patroni

Daha fazla içerik