parsql-deadpool-postgres
Parsql için Deadpool PostgreSQL entegrasyon küfesidir. Bu paket, parsql'in deadpool-postgres kütüphanesi ile asenkron bağlantı havuzu yönetimini destekleyen API'leri içerir.
Özellikler
- Deadpool ile PostgreSQL bağlantı havuzu yönetimi
- Asenkron PostgreSQL işlemleri (tokio runtime ile)
- Otomatik SQL sorgu oluşturma
- Güvenli parametre yönetimi
- Generic CRUD işlemleri (get, insert, update, delete)
- Pool nesnesi için extension method'lar (doğrudan pool üzerinden CRUD işlemleri)
- Veritabanı satırlarını struct'lara dönüştürme
- Özel satır dönüşümleri
- SQL Injection saldırılarına karşı otomatik koruma
- Transaction desteği
Güvenlik Özellikleri
SQL Injection Koruması
parsql-deadpool-postgres, SQL Injection saldırılarına karşı güvenli bir şekilde tasarlanmıştır:
- Tüm kullanıcı girdileri otomatik olarak parametrize edilir
- PostgreSQL'in "$1, $2, ..." parametrelendirme yapısı otomatik olarak kullanılır
- Makrolar, SQL parametrelerini güvenli bir şekilde işleyerek injection saldırılarına karşı koruma sağlar
- Parametrelerin doğru sırada ve tipte gönderilmesi otomatik olarak yönetilir
#[where_clause]
ve diğer SQL bileşenlerinde kullanıcı girdileri her zaman parametrize edilir- Bağlantı havuzu kullanırken bile güvenlik önlemleri tam olarak korunur
// SQL injection koruması örneği
// Kullanıcı girdisi (potansiyel olarak zararlı) güvenle kullanılır
let query = UserQuery ;
// Oluşturulan sorgu: "SELECT * FROM users WHERE username = $1 AND status = $2"
// Parametreler güvenli bir şekilde: [kullanici_girdisi, 1] olarak gönderilir
let user = get.await?;
Kurulum
Cargo.toml dosyanıza şu şekilde ekleyin:
[]
# Deadpool PostgreSQL için
= { = "0.4.0", = ["deadpool-postgres"] }
= "0.14"
= "0.7"
= { = "1", = ["full"] }
Temel Kullanım
Bu paket, PostgreSQL veritabanı ile çalışırken asenkron işlemler ve bağlantı havuzu yönetimi kullanır. Bu, async/await kullanımı gerektirdiği anlamına gelir.
Bağlantı Havuzu Oluşturma
use ;
use NoTls;
async
Modelleri Tanımlama
Veritabanı CRUD işlemleri için, ilgili makrolarla işaretlenmiş model struct'ları tanımlayın:
use ;
// Eklemek için model
// Güncellemek için model
// Sorgulamak için model
// Silmek için model
CRUD İşlemleri
CRUD işlemlerini gerçekleştirmek için iki farklı yaklaşım kullanabilirsiniz:
- Fonksiyon çağrıları ile
- Extension method'lar ile (doğrudan Pool nesnesi üzerinden)
Fonksiyon Çağrıları ile Kullanım
Veri Ekleme
use insert;
let user = UserInsert ;
let result = insert.await?;
println!;
Veri Güncelleme
use update;
let user = UserUpdate ;
let rows_affected = update.await?;
println!;
Veri Sorgulama
use ;
// Tek bir kayıt getirme
let query = UserById ;
let user = get.await?;
// Birden fazla kayıt getirme
let query = UsersByActive ;
let active_users = get_all.await?;
Veri Silme
use delete;
let user_delete = UserDelete ;
let deleted_count = delete.await?;
println!;
Extension Method'lar ile Kullanım
Pool nesnesi üzerinde doğrudan çalışan extension method'ları kullanmak için CrudOps
trait'ini içe aktarın:
use CrudOps;
// Extension method kullanarak ekleme
let user = UserInsert ;
let result = pool.insert.await?;
println!;
// Extension method kullanarak güncelleme
let user_update = UserUpdate ;
let rows_affected = pool.update.await?;
println!;
// Extension method kullanarak kayıt getirme
let query = UserById ;
let user = pool.get.await?;
println!;
// Extension method kullanarak birden fazla kayıt getirme
let active_query = UsersByActive ;
let active_users = pool.get_all.await?;
println!;
// Extension method kullanarak silme
let user_delete = UserDelete ;
let deleted_count = pool.delete.await?;
println!;
Transaction İşlemleri
Transaction işlemlerini gerçekleştirmek için iki farklı yaklaşım kullanabilirsiniz:
- Extension method'lar ile (doğrudan Transaction nesnesi üzerinden)
- Transaction helper fonksiyonları ile
Transaction Extension Method'ları ile Kullanım
Transaction nesnesi üzerinde doğrudan çalışan extension method'ları kullanmak için TransactionOps
trait'ini içe aktarın:
use ;
use NoTls;
use ;
async
Transaction nesnesi üzerinde şu extension methodlar kullanılabilir:
tx.insert(entity)
- Kayıt eklertx.update(entity)
- Kayıt güncellertx.delete(entity)
- Kayıt silertx.get(params)
- Tek bir kayıt getirirtx.get_all(params)
- Birden fazla kayıt getirirtx.select(entity, to_model)
- Özel dönüştürücü fonksiyon ile tek kayıt getirirtx.select_all(entity, to_model)
- Özel dönüştürücü fonksiyon ile çoklu kayıt getirir
Transaction Helper Fonksiyonları ile Kullanım
Transaction helper fonksiyonlarını kullanmak için transactional
modülünü içe aktarın:
use ;
async
Transaction helper fonksiyonları şunları içerir:
begin(client)
- Yeni bir transaction başlatırtx_insert(tx, entity)
- Transaction içinde kayıt eklertx_update(tx, entity)
- Transaction içinde kayıt güncellertx_delete(tx, entity)
- Transaction içinde kayıt silertx_get(tx, params)
- Transaction içinde tek bir kayıt getirirtx_get_all(tx, params)
- Transaction içinde birden fazla kayıt getirirtx_select(tx, entity, to_model)
- Transaction içinde özel dönüştürücü fonksiyon ile tek kayıt getirirtx_select_all(tx, entity, to_model)
- Transaction içinde özel dönüştürücü fonksiyon ile çoklu kayıt getirir
Örnek Proje
Daha kapsamlı bir örnek için, proje içindeki /examples/tokio-deadpool-postgres
dizinine bakabilirsiniz.
Lisans
Bu proje MIT lisansı altında lisanslanmıştır.