PRODEgemen Avrupa BaaS platformuKontrol Panelini Aç →

Performans · 10 dk. okuma

PostgREST ve Hasura ve özel bir API karşılaştırması

Affane Daylami · Fondateur · 15 Mayıs 2026

Bloga geri dön

Üç mimari aynı soruyu her biri kendi yöntemiyle yanıtlıyor: Her şeyi elle yazmadan bir API'nin Postgres veritabanına nasıl takılacağı. PostgREST, SQL şemanızdan bir REST API oluşturur. Hasura, iş mantığınız için kendi izin sistemine ve uzantı noktalarına sahip bir GraphQL API oluşturur. Node.js veya başka bir yerde bulunan özel bir API, her şeyi kendiniz kodlamanız pahasına size tam kontrol sağlar. Doğru seçim, ham performansa daha az, iş mantığınızın nerede yaşamasını istediğinize daha çok bağlıdır.

Bu İngilizce metin, Fransızca orijinalinden otomatik olarak oluşturulmuştur ve henüz incelenmemiştir.
Bu sayfa otomatik olarak çevrildi. İngilizce versiyonu yetkilidir.

This article extends two comparisons already published on this blog: our review of PostgREST compatibility and its alternatives and our comparison dedicated to GraphQL layers on Postgres. Here the angle changes: a decision grid between three ways to build an API layer, with Hasura treated for its permissions and business extension points rather than its GraphQL syntax, and a hand-written API as an option in its own right, not a simple "else" line at the bottom of the table.

Temeller

  • PostgREST, Postgres şemasından otomatik olarak bir REST API oluşturur; rastgele bir iş mantığı mümkün değildir, RLS tek güvenlik sınırı olarak kalır.
  • Hasura, GraphQL motorunun üzerine rol ve tabloya göre kendi izin sistemini, bir iş web kancasına bağlanmak için Eylemleri, Etkinlik Tetikleyicilerini ve RESTified uç noktalarını ekler.
  • Özel bir API (Node.js, Express, Fastify...), her şeyi kendiniz yazma, test etme ve bakımını yapma pahasına iş mantığı, doğrulama ve kimlik doğrulama üzerinde tam kontrol sağlar.
  • Aurabase'de PostgREST katmanı gerçek bir örnektir; CRUD'un ötesindeki iş mantığı, barındırılacak ayrı bir Node sunucusu aracılığıyla değil, RPC'de kullanıma sunulan SQL işlevlerinden veya Edge İşlevlerinden geçer.
  • Üç yaklaşımın mutlaka birbirini dışlaması gerekmez: CRUD için PostgREST ile hassas işlemler için özel bir API'nin birleştirilmesi, üretimde yaygın bir modeldir.
#
Genel Bakış

Gerçek seçim: iş mantığını kim, nerede yazıyor?

“PostgREST mi Hasura mı yoksa özel API” sorusu daha faydalı bir soruyu gizliyor: İş mantığınızı kim, hangi araçla yazıyor ve bu kodu üretimde kim kullanıyor? Üç mimari farklı tepki veriyor ve bu fark diğer her şeyi (güvenlik, uygulama hızı, uzun vadede teknik borç) yapılandırıyor.

API'nin KökeniSQL şemasından oluşturulduGraphQL Hasura motoru aracılığıyla şemadan oluşturulduElle rota rota yazılı
Özel iş mantığıYalnızca SQL işlevleri (RPC)Eylemler (webhook) + Etkinlik TetikleyicileriAraç kısıtlamaları olmadan herhangi bir kod
Güvenlik ModeliRLS Postgres, JWT tarafından yönlendirilen rolRLS'ye bir delegasyona değil, role/tabloya özel izinlerKodladığınız şey (ara katman yazılımı, ORM, isteğe bağlı RLS)
Ek olarak konaklamak içinHiçbir şey — hafif bir ikili dosyaKendi meta veri tabanına sahip Hasura motoruEksiksiz uygulama sunucusu
Öğrenme eğrisiEkip zaten SQL yazmayı biliyorsa düşükMedium — yeni bir izinler ve yapılandırma sistemiAraçta hiçbir şey yok, ancak tasarlanacak her şey var
POSGREST SONRASIHAŞURAÖZEL API

Üç sütundan hiçbiri kesinlikle daha iyi değil: her biri işi başka bir yere kaydırıyor. PostgREST bunu SQL'e, Hasura'yı yapılandırmaya ve özel bir API olan web kancalarına, klasik uygulama koduna taşır.

#
Hatırlatma

PostgREST: şemanın doğrudan yansıması olarak API

PostgREST, Postgres şemanızı yazılacak arka uç olmadan filtreler, ilişki yerleştirme, RPC, JWT tarafından yönlendirilen RLS'den oluşan bir REST API'sine dönüştürür. Bu kapsamı, gerçek uyumluluğu ve alternatifleri hakkındaki makalemizde derinlemesine detaylandırıyoruz; Bu karşılaştırma için önemli olan PostgREST'in nerede durduğudur.

PostgREST'in keyfi iş mantığı kavramı yoktur. Her kuralın SQL'de ifade edilmesi gerekir: bir RPC işlevi, bir tetikleyici, bir kısıtlama, bir RLS ilkesi. Bu, bir gözden kaçırma değil, kabul edilmiş bir kısıtlamadır; diyagram, bir uygulama katmanı ile hizmet ettiği taban arasındaki herhangi bir sapmayı ortadan kaldıran tek gerçek kaynak olmaya devam etmektedir.

Somut olarak, üçüncü taraf bir ödeme hizmetini aramak, onay e-postası göndermek veya doğrudan PostgREST isteğinden JavaScript'te bir puan hesaplamak imkansızdır. Bu mantık ya SQL'de yaşamalı (pl/pgsql işlevi) ya da dışarıda tetiklenmelidir - artık PostgREST olmayan harici bir hizmet tarafından dinlenen bir NOTIFYolayı yayınlayan bir tetikleyici.

#
Karşılaştırma

Hasura: izinler bildirildi, iş mantığı webhook tarafından aşılandı

Our article on GraphQL layers on Postgres details where the Hasura engine runs and how its permissions differ from the Postgres RLS. Here, the angle is that of business logic: how to plug custom code into a database managed by Hasura, and where.

Bir Eylemi Hasura, seçtiğiniz dilde yazdığınız bir HTTP web kancası tarafından desteklenen özel bir GraphQL mutasyonunu veya sorgusunu ortaya çıkarır. Hasura, girişleri bildirilen şemaya göre doğrular, web kancanızı çağırır ve ardından yanıtını istemciye geri gönderir. CRUD'un ötesine geçen her türlü mantığa açılan kapıdır: ödeme sağlayıcısına çağrı, karmaşık hesaplama, çok adımlı orkestrasyon.

Olay Tetikleyicileri ters yönü takip eder: tablodaki bir ekleme, güncelleme veya silme işlemi, eşzamansız olarak ve başarısızlık durumunda otomatik yeniden başlatmayla bir web kancasını tetikler. Bu, çoğu Hasura entegrasyonunun, bu kodu ilk müşteri isteğine bağlamadan bir üçüncü taraf hizmetini (faturalandırma, işlemsel e-posta, arama motoru) senkronize etmek için kullandığı mekanizmadır.

Hasura ayrıca önceden yazılmış bir GraphQL sorgusunu, adlandırılmış bir yol ve parametrelerle (kendi belgelerinin terminolojisinde RESTifieduç noktaları) tipik bir REST rotası olarak ortaya çıkarabilir. Ön uç ekibiniz temel GraphQL izin motorundan vazgeçmeden REST kullanmayı tercih ediyorsa kullanışlıdır.

Tekrarlamaya değer bir nokta

Hasura izinleri, Postgres RLS'ye bir delegasyon değil, rol ve tablo başına Hasura'ya özgü bir sistemdir. Erişim kurallarını denetlemek için tek bir yer yerine iki yer; Eylemler ve Olay Tetikleyicilerinden elde edilen esneklikle karşılaştırıldığında gerçek bir maliyet.

Özel makalemizde geliştirilen bağlam hatırlatıcısı: Hasura, Haziran 2025'ten bu yana, resmi web sitesinde hala "savaşta test edilmiş" olarak sunulan GraphQL motorunu kaldırmadan, iletişimini AI aracıları için tasarlanmış bir katman olan PromptQL'e yeniden odakladı.

#
Karşılaştırma

Özel API (Node.js, Express, Fastify): her şeyi kodlayın, her şeyi kontrol edin

Elle yazılan bir API'nin tanımı gereği hiçbir sınırı yoktur: herhangi bir dilde, herhangi bir bağımlılıkla herhangi bir iş mantığı. Aynı zamanda sizin için hiçbir şeyin üretilmediği üç seçenekten sadece biridir; her rota, her doğrulama, veritabanına olan her bağlantı, sahip olduğunuz ve sürdürmeniz gereken koddur.

routes/orders.js (Express, extrait)javascript
// Filtreleme, sıralama ve ilişki yerleştirme elle yazılır,
// yalnızca bu rota için — her API kaynağı için tekrarlayın
router.get('/orders', async (req, res) => {
  const { status } = req.query
  const result = await db.query(
    `SELECT o.id, o.total, c.email AS customer_email
     FROM orders o JOIN customers c ON c.id = o.customer_id
     WHERE o.status = $1 ORDER BY o.created_at DESC`,
    [status]
  );
  res.json(result.rows)
});

Bu model, manuel çalışma karşılığında şunları sunar: hatalar ve döndürülen HTTP kodları üzerinde tam kontrol, klasik test edilebilirlik (bildirimsel yapılandırma değil işleyiciler) ve kendi diline zaten hakim olan bir ekip için öğrenilecek yeni DSL yok.

Karşılığında maliyeti nedir: Her kaynak için elle yazmak ve sürdürmek için CRUD, sayfalandırma ve filtreler; otomatik olarak devralınan RLS olmadan kendinizin uygulayıp denetlemesi için kimlik doğrulama ve yetkilendirme; her iç içe ilişkinin disiplin olmadan kendi Postgres sorgusunu tetiklemesi durumunda N+1 sorgu riski; ve API belgelerinin manuel olarak veya entegre edilecek bir üçüncü taraf oluşturucu aracılığıyla tutulması.

Ham performansla ilgili olarak, "Node.js Rust'tan daha mı yavaş?" sorusu başlı başına bir konudur - Rust ve Node.js gecikmesi hakkındaki makalemiz bu konuyu ayrıntılı olarak ele alır ve metodoloji kıyaslama metodolojisi sayfamızdayukarıda açıklanmıştır. Özel bir API, halihazırda kullanmakta olduğunuz herhangi bir HTTP hizmetiyle aynı performans profiline sahiptir; yapısı gereği ne daha iyi ne de daha kötüdür. PostgREST'in tam olarak nerede doyduğunu ve hangi noktada özel bir katmanın gerekli hale geldiğini bilmek için PostgREST'in üretimdeki gerçek sınırlarıhakkındaki makalemize bakın.

#
Karar

Karşılaştırma tablosu: üç seçenek yan yana

Mimarinin ötesinde, seçim yaparken sıklıkla dört kriter ortaya çıkıyor: uygulama hızı, gerçek iş esnekliği, uzun vadeli teknik borç ve her seçeneğin en rahat olduğu tipik kullanım durumu.

İlk kurulumDakikalar — şema zaten mevcutSaatler — üssü bağlayın, izinleri yapılandırınGünlerden haftalara — her rotayı yazın
İş esnekliğiSQL ile sınırlıdır (RPC, tetikleyiciler)Eylemler/Olay Tetikleyicileri aracılığıyla iyi, ancak harici bir web kancasından geçiyorToplam, basit
Dönem teknik borcuZayıf - diyagram gerçeğin tek kaynağı olmaya devam ediyorOrta — Şemaya ek olarak korunacak Hasura meta verileriEkip disiplin olmadan büyüyorsa yüksek (testler, dokümantasyon, inceleme)
Tipik kullanım durumuCRUD'u kararlı bir şema üzerinde yönlendirin, ekip SQL'de rahat olsunBirkaç veri kaynağını veya yapay zeka aracı odaklı mantığı birleştirinKarmaşık iş mantığı, çok sayıda üçüncü taraf entegrasyonu
POSGREST SONRASIHAŞURAÖZEL API
#
Giriş kodu

Bir Aurabase projesinde iş mantığı nereye gider?

Bir Aurabase Postgres motoru projesinde CRUD katmanı, yaklaşık bir yeniden uygulama değil, gerçek bir PostgREST örneği tarafından zaten kapsanmaktadır. Bu karşılaştırma için açık kalan soru şu: CRUD'un ötesine geçenler nereye yazılmalı?

İki yol vardır ve bunlar birbirini dışlamaz. Birincisi: SQL'de ifade edilmesi makul olan herhangi bir mantık için RPC'de kullanıma sunulan bir SQL işlevi - toplamın hesaplanması, birkaç tablo arasında çapraz doğrulama, tek bir işlemde güncellemelerin basamaklandırılması.

RPC çağrısı — SQL'de iş mantığıbash
curl -X POST "https://<gateway>/v1/db/<project_id>/rpc/apply_discount" \
  -H "apikey: <votre-cle-api>" \
  -H "Content-Type: application/json" \
  -d '{"order_id": 42, "code": "WELCOME10"}'

İkinci yol: SQL alanının ötesine geçen her şey için Edge İşlevleri - ödeme API'sinin çağrılması, e-posta gönderilmesi, yerleştirmenin hesaplanması. Aurabase'de iki yol var: Deno (TypeScript) kodunu tam olarak Supabase'de çalıştıran Studio editörü ve Rust'ta yazılan ve WASM'de derlenen işlevler için ayrı bir yol hedefleyen aura functions deployCLI — birleşik Rust mimarimizdeayrıntılı olarak açıklanmıştır. Bu makaledeki sunucunun tamamen sizin sorumluluğunuzda olduğu saf "özel API" seçeneğinin aksine, her iki yol da ayrı bir Node sunucusunun barındırılmasını gerektirmez.

Bu dağıtım, burada karşılaştırılan üç model arasında sallantılı bir uzlaşma değildir: Kelimenin tam anlamıyla CRUD için PostgREST, RPC ve tetikleyiciler aracılığıyla olay mantığı için Hasura Eylemlerine yakın bir tuğla ve "tümü PostgREST" ve "tümü özel" arasında ikili bir seçim yapmaya zorlamadan tam bir uygulama sunucusunun çalışmasını önleyen Edge İşlevleridir.

#
Karar

Bağlamınıza göre nasıl seçilir

En sık dört durum ortaya çıkar. Doğru seçim çoğunlukla bir aracın popülerliğine değil, iş mantığınızın neye ihtiyaç duyduğuna bağlıdır.

  • Şemanız kararlı ve iş mantığınız SQL'de. Kendi kendine barındırılan PostgREST veya yerel olarak entegre edilmiş (Aurabase, Supabase) yeterlidir: barındırılacak başka bir şey yoktur ve şema gerçeğin tek kaynağı olmaya devam eder.
  • Birkaç veri kaynağını bir araya getirmek istiyorsunuz veya yol haritanız, verilerinizi tüketen yapay zeka aracılarına yönelik. Hasura, PromptQL katmanıyla bu duruma daha iyi uyum sağlıyor.
  • Ürününüz zengin iş mantığına, çok sayıda üçüncü taraf entegrasyonuna ve halihazırda bir uygulama diliyle donatılmış bir ekibe sahiptir. Özel bir API, yazılması ve zaman içinde bakımının yapılması pahasına en doğrudan seçim olmaya devam etmektedir.
  • İş mantığı (RPC, Edge Functions) için gerçek alandan vazgeçmeden, istismar edilecek bir uygulama hizmeti daha istiflemeden, kendi kendine oluşturulan CRUD istiyorsunuz. Bu, önceki bölümde Aurabase'e uygulanan bu karşılaştırmada belgelenen açıdır.
#
Sıkça Sorulan Sorular

SSS

PostgREST özel bir Node.js API'sinin yerini alabilir mi?+
CRUD katmanı için genellikle evet. Bir SQL fonksiyonunun düzgün bir şekilde ifade edebileceğinin ötesine geçen herhangi bir iş mantığı için hayır: PostgREST'in, bu mantığı uygulama koduna devreden özel bir API veya Hasura Eylemlerinden farklı olarak keyfi bir iş mantığı kavramı yoktur.
Hasura açık kaynak mı?+
Hasura GraphQL Engine açık kaynak olarak yayınlandı. Hasura'nın Haziran 2025'ten bu yana iletişimine yeniden odaklandığı yapay zeka aracıları için tasarlanan katman olan PromptQL, bu motordan ayrı bir üründür.
PostgREST ile özel bir API'yi aynı projede birleştirebilir miyiz?+
Evet ve bu yaygın bir kalıptır. PostgREST, müşteriye sunulan standart CRUD'yi kapsarken, ayrı bir API veya işlev, daha sonra aynı Postgres veritabanını çağıran hassas işlemleri (ödeme, e-posta gönderme, çok adımlı mantık) yönetir.
Aurabase Hasura entegrasyonu sunuyor mu?+
Hayır. Aurabase, PostgREST'i yerel olarak REST için ve pg_graphql'i isteğe bağlı olarak GraphQL için Hasura'ya değil entegre eder. Üç yaklaşım kağıt üzerinde karşılaştırılabilir durumda ancak platformda birbirinin yerine kullanılamaz.

DAĞITILMAYA HAZIR MISINIZ?

Beş dakika içinde arka ucunuz.

Kredi kartı gerekmez · 500 MB ücretsiz · 50.000 MAU