REST’in orijinal tanimina mi sadik kaliyorsunuz, yoksa HTTP filleri kullanan ve obje donduren bir uygulama mi yaziyorsunuz? Orijinal tanimina cok hakim degilim; tek soyleyebilecegim obje grafigini alip API endpoint’leri uretecek –ORM gibi– otomatik tooling kullanmanin faydali ve belki gerekli olacagi.
JSON over HTTP bir API yaziyorsaniz bu herhangi bir mimaride olabilir; yazilana yakin mimarilerden ve genel gecer best practice’lerden bahsedecegim.
Normalde ikisini de ucuncu bir modulde uretip orada birbirine baglamak dogrusu (dependency inversion principle) fakat api’nin DBUtil’i uretmesinden daha buyuk bir sorun DBUtil’de tanimlanan objenin detaylarina bagli olmasi.
Yani zaten DBUtil’i cikartip yerine baska bir sinif koymak mumkun olmayacagi icin aslinda bu iki modul (veya modul+sinif) birbirinden bagimsiz degil. O yuzden birinin digerini uretmesinde veya ayni dosyada bulunmalarinda bile bir sakinca yok.
Bunlari daha da ayirmak icin Pocket bir business objesine donusturulebilir, al, ver, vs. fonksiyonlari Pocket alacak sekilde degistirilebilir.
Ikisi de lazim degil.
Fakat JSON ciktisi istiyorsak HTTP handler’dan JSON cikmasi lazim.
db↔api arasinda ne gectigi kimseyi ilgilendirmiyor. Cok katmanli mimari istiyorsak yukarida dedigim gibi bir business objesi gecebilir.
Evet; python’da hata kontrolu boyle yapiliyor.
DBUtil’e daha iyi bir isim lazim. Manage ettigi objelerin kolonlarina kadar bildigine gore genel bir “DB utility” class’i degil, birinin data access/persistance layer’i.
Constructor’da is yapmak genel olarak iyi bir fikir degil; objeyi idare etmeyi zor hale getiriyor. (Okey oldugunu dusunenler de var; arastirilabilir.)
def insert_data(self, item_name: str, category: str, price: float, payment_method: str):
Cok parametre alan methodlara tekrar bakmak gerekiyor. Parametreleri gruplamak mantikli olabilir. (Ki burada yukarida bahsettigim Pocket objesine denk geliyor.)
api.py’nin main fonksiyonu module dagilmis durumda. Flask’in dekoratorleri baska sekilde kullanilmiyor ama. Cozumu ne bilmiyorum. (Her seyi main icine almak?)
Varsa 1-2 obje/tablo daha ekleyince ortaya cikacaktir. Cikmazsa her sey yolundadir zaten?