Anasayfa / Blog / Genişletilebilir ve Bakımı Kolay API’ler için İleri Seviye NestJS Uygulamaları
Genişletilebilir ve Bakımı Kolay API’ler için İleri Seviye NestJS Uygulamaları

Genişletilebilir ve Bakımı Kolay API’ler için İleri Seviye NestJS Uygulamaları

Öne Çıkan

Genişletilebilir ve Bakımı Kolay API’ler için İleri Seviye NestJS Uygulamaları

a

admin

Yazar

25 dakika okuma
47 Görüntülenme
22 Haziran 2025

NestJS becerilerini bir üst seviyeye taşımak mı istiyorsun? Bu kapsamlı rehber, projelerini ölçeklenebilir, modüler ve bakımı kolay hale getirmek için kullanabileceğin gelişmiş (ama başlangıç dostu) NestJS pratiklerini adım adım açıklıyor.

🚀 Genişletilebilir ve Bakımı Kolay API’ler için İleri Seviye NestJS Uygulamaları

NestJS, Node.js ve TypeScript üzerinde inşa edilmiş güçlü bir backend framework’tür. Sağladığı düzenli yapı, bağımlılık enjeksiyonu ve TypeScript entegrasyonu sayesinde profesyonel projeler için oldukça uygundur.

Ancak birçok geliştirici sadece temel özelliklerle yetinir. Bu yazıda, NestJS ile sağlam, bakımı kolay ve gerçek anlamda ölçeklenebilir API’ler inşa etmek için kullanabileceğin ileri seviye ama kolay anlaşılır uygulamaları anlatacağım.

🧱 1. Modüler Mimarinin Gerçek Gücünü Kullan

📌 Modül (Module) nedir?

NestJS'te modüller, uygulamanın farklı özelliklerini organize etmeye yarar. Her modül belirli bir işlevi içerir: örneğin auth, users, payments.

👎 Yeni Başlayanların Hatası:

Tüm mantığı AppModule içinde tutmak veya çok az sayıda büyük modül kullanmak.

✅ Doğru Yaklaşım: Özellik Bazlı Yapı

src/
├── auth/
│   ├── auth.controller.ts
│   ├── auth.service.ts
│   └── auth.module.ts
├── users/
│   ├── users.controller.ts
│   ├── users.service.ts
│   └── users.module.ts

Avantajları:

  • Her özelliği izole etmek kolay
  • Kodun okunabilirliği artar
  • Takım çalışmasında modüller ayrılabilir
  • Gerekirse lazy-loading kullanılabilir

🧠 2. Bağımlılık Enjeksiyonunu (DI) Etkili Kullan

📌 DI Nedir?

NestJS, ihtiyaç duyduğun servisleri senin yerine enjekte eder. Örneğin:

constructor(private userService: UserService) {}

Sen sadece UserService yazarsın, NestJS onu senin için hazırlar.

✅ Tavsiyeler:

  • Ortak servisleri (örn. Logger) tekrar tekrar oluşturma
  • Test için servisleri mock’lamak kolaylaşır
  • Sık kullanılan kodu özel servislerde toparla

Örnek:

@Injectable()
export class AppLogger {
  log(message: string) {
    console.log(`[APP] ${message}`);
  }
}

🛡️ 3. Guard, Interceptor ve Pipe'ları Bilinçli Kullan

685948104142d_1750681616.png


🛡️ Örnek: Guard ile Yetki Kontrolü

@Injectable()
export class AuthGuard implements CanActivate {
  canActivate(context: ExecutionContext): boolean {
    const req = context.switchToHttp().getRequest();
    return !!req.user;
  }
}

🔄 Örnek: DTO Doğrulama ile Pipe

@UsePipes(new ValidationPipe())
@Post()
createUser(@Body() dto: CreateUserDto) {
  // dto zaten doğrulanmış ve dönüştürülmüş olur
}

🛠️ 4. Özel Dekoratörler (Custom Decorators)

📌 Nedir?

Decorator’lar, sınıflara veya parametrelere ekstra işlevler kazandırır. NestJS'te birçok hazır decorator vardır: @Body(), @Param(), @Query(), vs.

✅ Özel Kullanım: @CurrentUser()

export const CurrentUser = createParamDecorator(
  (_, ctx: ExecutionContext) => {
    const req = ctx.switchToHttp().getRequest();
    return req.user;
  },
);

Sonra böyle kullan:

@Get()
getProfile(@CurrentUser() user) {
  return user;
}

Temiz ve okunabilir kod = daha kolay bakım ve geliştirme.

🌐 5. Ortam Değişkenleri (Environment Variables) Doğrulama

📌 Neden Önemli?

Üretim ortamında yanlış yapılandırılmış bir .env uygulamanın çökmesine sebep olabilir.

✅ Joi ile doğrulama örneği:

ConfigModule.forRoot({
  isGlobal: true,
  validationSchema: Joi.object({
    DATABASE_URL: Joi.string().required(),
    PORT: Joi.number().default(3000),
  }),
});

Bu sayede:

  • Uygulama yanlış konfigürasyonla başlamaz
  • Tüm ortam değişkenleri önceden kontrol edilir

📄 6. Küresel Hata Yakalama (Exception Filters)

📌 Neden Gerekli?

Hatalar varsayılan olarak kontrolsüz ve kullanıcı dostu olmayan bir formatta dönebilir.

✅ Örnek:

@Catch(HttpException)
export class GlobalHttpExceptionFilter implements ExceptionFilter {
  catch(exception: HttpException, host: ArgumentsHost) {
    const ctx = host.switchToHttp();
    const response = ctx.getResponse();
    const status = exception.getStatus();
    const message = exception.getResponse();

    response.status(status).json({
      statusCode: status,
      message,
      timestamp: new Date().toISOString(),
    });
  }
}

Tüm uygulama genelinde tutarlı hata formatı sağlar.

🔢 7. API Sürümleme (Versioning)

Yeni özellikler eklerken eski istemcileri bozmamak için API versiyonlama kullan:

app.enableVersioning({
  type: VersioningType.URI,
});
ts

Copy

Edit
@Controller({ path: 'users', version: '1' })
export class UsersV1Controller {}

@Controller({ path: 'users', version: '2' })
export class UsersV2Controller {}

🧪 8. Anlamlı Testler Yaz

Test yazmak:

  • Güvenli refactor yapmanı sağlar
  • Kodun güvenilirliğini artırır
  • Yeni geliştiriciler için onboarding sürecini kolaylaştırır

✅ Örnek: Unit Test

describe('UsersService', () => {
  let service: UsersService;

  beforeEach(async () => {
    const module = await Test.createTestingModule({
      providers: [UsersService],
    }).compile();

    service = module.get(UsersService);
  });

  it('should find a user', async () => {
    expect(await service.findOne(1)).toBeDefined();
  });
});

⏱️ 9. Cache, Queue ve Arka Plan İşlemleri

Zaman alan görevleri (ör. e-posta gönderimi, PDF oluşturma) senkron şekilde yapmak performansı düşürür.

✅ Ne Yapabilirsin?

  • Redis ile cache işlemleri (@nestjs/cache-manager)
  • BullMQ ile arka plan görevleri (@nestjs/bull)
  • Event’lerle esnek iş akışı (@nestjs/event-emitter)

🎯 10. Geliştirici Deneyimini Artır

Kod kalitesini korumak için:

  • eslint ve prettier ile otomatik formatlama
  • husky ile commit öncesi test çalıştırma
  • @nestjs/swagger ile otomatik API dökümantasyonu

✅ Sonuç

NestJS, yüzeyde basit ama altında kurumsal düzeyde güçlü bir mimariye sahiptir. Bu yazıda öğrendiğin gelişmiş (ama sade) uygulamalar sayesinde:

  • Daha okunabilir
  • Daha test edilebilir
  • Daha bakımı kolay
  • Ve daha profesyonel API’ler geliştirebilirsin.

Unutma: Küçük adımlarla başla, sürekli geliştir. NestJS bu yolculukta sana büyük kolaylık sağlayacak.

🔗 Faydalı Kaynaklar


bu yazıyı paylaş

Bağlantı Kopyalandı