Yapılan forum API nasıl?

basit ve hoş olmuş hocam ancak daha fazla parametre, doğrulama ve özellik eklenebilir.
 
Eklemeyi düşünüyorum sizce ne gibi şeyler ekleyebilirim CRUD dışında yani işte post editle sil dışında. Mesela takiplesme, chat gibi şeyler bu uygulamaya saçma mi kaçar?

Chat eklenebilir ama forum sisteminde bence gereksiz. MongoDB'yi optimize edebilirsin cacheleme koyabilirsin(var mıydı hatırlamıyorum kodda) son 20 konu tarzı şeyler yapabilirsin. Sitemap, benzer konular vb.
 
Daha modüler ve esnek bir yapıda yapılabilir.
Örneğin her konu ve mesajın ortak davranışları vardır. Mesela; oluşturan, oluşturulma zamanı, beğeni sayısı gibi de zaten aynı tür olabilir :D.

Böylelikle mesela konu arandığında OrtakDavranış türüne göre bazı içerikler aranabilir ya da düzenleme işlemi de OrtakDavranış türüne uygulanabilir falan.
 
Hic test yok, cok buyuk bir eksiklik bu.

service layer hic yok. Butun mantik controller icine gomulmus. Proje buyudukce spagetti olacaginin sinyali.

Transaction yok. Mongo replica ile transaction support sagliyor. Bir seyler ters gittiginde rollback yapamazsin bu mimariyle. Tek dokuman degistirdigin CRUD icin sorun degil. Multi-doc degistirdiginde ve kompleks mekanizmalar isin icine girdiginde buyuk problem.

Hata mesajlari hardcoded Turkce string olarak controller icinde islenmis. Merkezi bir organizasyon yok.

Commit organizasyonunun gelismesi gerekiyor, commitler ( 2 tane var zaten ) alakali alakasiz bir suru degisiklik iceriyorlar. Soyle bir commit olmamali.

Eger AI a yazdirmis olsaydin gulucuklu mulucuklu ivir zivir ile dolduracakti readme'yi, en azindan README iceren ilk commiti kendin yazdigini gosteriyor, bu da cok iyi bir sey.

Route'larin kendi mantiksal ayrimlara kodlanmasi guzel bir yapi. bcrypt auth hash icin dogru bir algoritma. Endustrinin yarisindan fazlasinin sha256 kullandigi dusunulursa su haliyle bile cogundan daha guvenli hashing anlaminda.

JavaScript:
const authRouter = express.Router();

authRouter.post('/register',registerHandler);
authRouter.post('/login',loginHandler);
authRouter.post('/logout',logoutHandler);
authRouter.get('/profile',authMiddleware,profileHandler); // sadece burada middleware var
authRouter.get('/profile/:slug',userProfileDetail);

authRouter icinde yalnizca profile altinda authMiddleware olmasi kafa karistirici. Secure alani guvence altina almaya calismissin ama hangi sayfalarin secure, hangilerinin public oldugu net degil. postRouter icinde de var benzer durum.

Bunun yerine secureRoutes ~ publicRoutes gibi 2 ayrim olsa ve secure olanlara middleware otomatik eklense cok daha okunabilir ve pratik olur.

Asagidaki gibi anlamsiz bir pattern var, bu biraz GPT generate etmis ve copy paste edilmis gibi:
Burada ya da burada hatta burada. JS'in 2026 yilinda geldigi standartsiz durum mu boyle bir seyi mumkun kildi diye dusunmedim degil ama cok muhtemelen AI zirvasi.
JavaScript:
const x = new X() //

if (X){ // JS de new falsy donmez - gereksiz indent & kontrol
 
}

Son olarak bu proje icin sorun olmasa da genel olarak backend hatasini leak etmeyiz.

Kod:
   } catch (error) {
        next(error);
    }
 
 
    // index.js icinde
 
    app.use((err,req,res,next) => {
    const statusCode = err.statusCode || 500;
    const message = err.message || "Internal Server Error"; // leak

    res.status(statusCode).json({success:false,message:message});
});
 
Son düzenleme:
Hiç test yok, cok buyuk bir eksiklik bu.

service layer hiç yok. Butun mantik Controller icine gomulmus. Proje buyudukce spagetti olacaginin sinyali.

Transaction yok. Mongo replica ile transaction Support sagliyor. Bir seyler ters gittiginde rollback yapamazsin bu mimariyle. Tek doküman degistirdigin CRUD icin sorun degil. Multi-doc degistirdiginde ve kompleks mekanizmalar isin icine girdiginde buyuk problem.

Hata mesajlari hardcoded turkce string olarak Controller icinde islenmis. Merkezi bir organizasyon yok.

Commit organizasyonunun gelismesi gerekiyor, commitler ( 2 tane var zaten ) alakali alakasiz bir suru degisiklik iceriyorlar. Soyle bir commit olmamali.

Eger AI a yazdirmis olsaydin gulucuklu mulucuklu ivir zivir ile dolduracakti Readme'yi, en azindan readme iceren ilk commiti kendin yazdigini gosteriyor, bu da cok iyi bir şey.

Route'larin kendi mantiksal ayrimlara kodlanmasi guzel bir yapi. bcrypt auth hash icin dogru bir algoritma. Endustrinin yarisindan fazlasinin sha256 kullandigi dusunulursa su haliyle bile cogundan daha guvenli hashing anlaminda.

JavaScript:
const authRouter = express.Router();

authRouter.post('/register',registerHandler);
authRouter.post('/login',loginHandler);
authRouter.post('/logout',logoutHandler);
authRouter.get('/profile',authMiddleware,profileHandler); // sadece burada middleware var.
authRouter.get('/profile/:slug',userProfileDetail);

authRouter icinde yalnizca profile altinda authmiddleware olmasi kafa karistirici. Secure alani guvence altina almaya calismissin ama hangi sayfalarin secure, hangilerinin public oldugu net degil. postRouter icinde de var benzer durum.

Bunun yerine secureRoutes ~ publicRoutes gibi 2 ayrim olsa ve secure olanlara middleware otomatik eklense cok daha okunabilir ve pratik olur.

Asagidaki gibi anlamsiz bir pattern var, bu biraz GPT generate etmis ve copy paste edilmis gibi:
Burada ya da burada hatta burada. JS'in 2026 yilinda geldigi standartsiz durum mu boyle bir seyi mumkun kildi diye dusunmedim degil ama cok muhtemelen AI zirvasi.
JavaScript:
const x = new X() //

if (X){ // JS de new falsy donmez - gereksiz indent & kontrol.

}

Son olarak bu proje icin sorun olmasa da genel olarak backend hatasini leak etmeyiz.

Kod:
 } catch (error) {
 next(error);
 }

 // index.js icinde.

 app.use((err,req,res,next) => {
 const statusCode = err.statusCode || 500;
 const message = err.message || "Internal Server Error"; // leak.

 res.status(statusCode).json({success:false,message:message});
});

Çok teşekkür ederim hocam sormak istediğim bir soru var. Backend hatasını neden leak etmemeliyiz bu ne gibi bir sorun oluşturur? Ayrıca public olmaması gerekiyorsa dotenv içinde saklamamda bir sakınca olur mu?
 
Son düzenleme:
Çok teşekkür ederim hocam sormak istediğim bir soru var. Backend hatasını neden leak etmemeliyiz bu ne gibi bir sorun oluşturur? Ayrıca public olmaması gerekiyorsa dotenv içinde saklamamda bir sakınca olur mu?

Public olmamasi demek, dotenv olmasi demek degil.

Sistem icinde aldigin hatalar, sistemin calisma yontemini barindirir ve bunu client ile paylasmayi istemezsin. Hem guvenlik nedeniyle hem de defansif programlama doktrini nedeniyle.


Kullandigin lib'lerde acik olabilir, girilen bilgiler hatada paylasiliyor olabilir vs.

Bunun yerine "Su an isleminizi yapamiyoruz' gibi jenerik bir cevap donersin client tarafa, backend de de ilgili hatayi loglarsin boylece kaybolmaz ama dis dunya ile paylasilmaz.

Ek olarak client zaten teknik bir insan degildir. unique constraint violated dersen bir sey anlamaz. bu kullanici adi zaten kullaniliyor dersen anlar.

Son olarak, http kodlari zaten bu diyalogu kurmak icin fok faydali Restful yapilarda. 400 atmaya gerek yok aslinda her sey icin. 429, 422 gibi direkt is akisina uygun hata kodlari zaten mesaja bile gerek birakmaz. Frontend in problemi bu kodu nasil prezente edecegi.
 
Public olmamasi demek, dotenv olmasi demek degil.

Sistem icinde aldığın hatalar, sistemin calisma yontemini barindirir ve bunu Client ile paylasmayi istemezsin. Hem guvenlik nedeniyle hem de defansif programlama doktrini nedeniyle.


Kullandığın Lib'lerde acik olabilir, girilen bilgiler hatada paylasiliyor olabilir vs.

Bunun yerine "su an isleminizi yapamiyoruz' gibi jenerik bir cevap donersin Client tarafa, backend de de ilgili hatayi loglarsin boylece kaybolmaz ama dis dunya ile paylasilmaz.

Ek olarak Client zaten teknik bir insan degildir. unique constraint violated dersen bir şey anlamaz. bu kullanici adi zaten kullaniliyor dersen anlar.

Son olarak, HTTP kodlari zaten bu diyalogu kurmak icin fok faydali restful yapilarda. 400 atmaya gerek yok aslinda her şey icin. 429, 422 gibi direkt is akisina uygun hata kodlari zaten mesaja bile gerek birakmaz. Frontend in problemi bu kodu nasıl prezente edecegi.

Teşekkürler projeyi dediklerinize göre baştan kodlayip paylaşacağım.
 

Bu konuyu görüntüleyen kullanıcılar

Technopat Haberler

Yeni konular

Geri
Yukarı