Node.js RESTful API Geliştirme Prompt'u
Aşağıdaki gereksinimlere ve best practice'lere uygun, production-ready bir Node.js RESTful API oluştur:
1. Temel Mimari
2. Input Validasyonu
3. Response Şeması
4. HTTP Status Yönetimi
5. Asenkron İşlemler
6. Şifre Güvenliği
7. Error Handling
8. Presenter/Formatter Pattern
9. Request Immutability
10. Ek Best Practices
11. Proje Yapısı
Örnek Endpoint İstekleri:
Yukarıdaki gereksinimlere tam uyumlu, temiz, okunabilir ve maintainable kod üret.
Aşağıdaki gereksinimlere ve best practice'lere uygun, production-ready bir Node.js RESTful API oluştur:
1. Temel Mimari
- Express.js framework kullan
- Katmanlı mimari yapısı (Controller → Service → Repository)
- Async/await kullan, callback kullanma
2. Input Validasyonu
- Joi veya express-validator ile request validasyonu
- Body, params, query parametrelerini validate et
- Custom validation kuralları tanımla
- Validation error'larını anlamlı mesajlarla döndür
3. Response Şeması
- Tutarlı response formatı kullan:
Kod:
{
"success": true/false,
"data": {},
"message": "string",
"error": {}
}
- HTTP status kodlarını doğru kullan (200, 201, 400, 401, 403, 404, 500, etc.)
4. HTTP Status Yönetimi
- Her endpoint için uygun HTTP status kodları
- RESTful standartlara uy (GET: 200, POST: 201, DELETE: 204, etc.)
5. Asenkron İşlemler
- Promise chain veya async/await kullan
- İç içe callback yapısından (callback hell) kaçın
- Promise.all() ile paralel işlemleri optimize et
6. Şifre Güvenliği
- bcrypt veya argon2 ile asimetrik şifreleme
- Salt rounds minimum 10
- Veritabanında plain text şifre saklanmamalı
- Şifre hash'leme için ayrı utility fonksiyonu
7. Error Handling
- Global error handler middleware
- Custom error class'ları (ValidationError, AuthenticationError, NotFoundError, etc.)
- Uncaught exception ve unhandled rejection handling:
Kod:
process.on('uncaughtException', handler)
process.on('unhandledRejection', handler)
- Try-catch blokları ile hata yakalama
- Hataları loglama (winston veya morgan)
8. Presenter/Formatter Pattern
- Response data'yı formatlamak için presenter katmanı
- Sensitive bilgileri filtrele (password, internal id'ler)
- DTO (Data Transfer Object) pattern'i kullan
- Veritabanı modellerini direkt expose etme
9. Request Immutability
- Request objesini direkt mutate etme
- Yeni objeler oluştur veya spread operator kullan
- req.body, req.params, req.query'yi kopyala
10. Ek Best Practices
- Environment variables (.env) ile konfigürasyon
- Rate limiting middleware
- CORS yapılandırması
- Helmet.js ile güvenlik header'ları
- Request logging
- API versioning (/api/v1)
- Swagger/OpenAPI dokümantasyonu
11. Proje Yapısı
Kod:
src/
├── config/
├── controllers/
├── services/
├── repositories/
├── models/
├── middlewares/
├── validators/
├── presenters/
├── utils/
├── errors/
└── routes/
Örnek Endpoint İstekleri:
- User CRUD operasyonları
- Authentication (register, login, logout)
- Authorization middleware (JWT)
- Pagination ve filtering
Yukarıdaki gereksinimlere tam uyumlu, temiz, okunabilir ve maintainable kod üret.