TypeScript'i Mikroservis Mimarisiyle Nasıl Kullanabilirsiniz

TypeScript'in güçlü tiplemesi ve modülerliği onu mikro hizmetler oluşturmak için mükemmel bir seçim haline getirir. Bir mikro hizmetler mimarisinde, her hizmet API'ler aracılığıyla diğer hizmetlerle iletişim kuran küçük, bağımsız olarak dağıtılabilir bir bileşendir. Bu bağlamda TypeScript'i kullanmak kod kalitesini artırabilir, sürdürülebilirliği iyileştirebilir ve ekipler arasında daha iyi iş birliğini kolaylaştırabilir.

1. Mikroservisler için TypeScript Projesi Kurma

TypeScript'i bir mikro hizmet mimarisinde kullanmaya başlamak için, her mikro hizmet için TypeScript'i ayarlamanız gerekir. Başlamanız için adım adım bir kılavuz:

1.1 Bir TypeScript Projesi Başlatma

Öncelikle yeni bir Node.js projesi başlatalım ve TypeScript'i kuralım:

mkdir my-microservice
cd my-microservice
npm init -y
npm install typescript --save-dev
npx tsc --init

tsc --init komutu varsayılan TypeScript yapılandırmasıyla bir tsconfig.json dosyası oluşturur. Bu dosyayı ihtiyaçlarınıza göre özelleştirebilirsiniz.

1.2 tsconfig.json yapılandırılıyor

tsconfig.json dosyasını bir mikroservis ortamına uyacak şekilde güncelleyin. İşte bir örnek yapılandırma:

{
  "compilerOptions": {
    "target": "ES6",
    "module": "commonjs",
    "outDir": "./dist",
    "rootDir": "./src",
    "strict": true,
    "esModuleInterop": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules"]
}

Bu yapılandırma çıktı ve kök dizinlerini belirtir, sıkı tip denetimini etkinleştirir ve ES modüllerinin birlikte çalışabilirliğini destekler.

2. TypeScript ile Mikroservisleri Yapılandırma

Her mikro servisin iyi tanımlanmış bir yapısı olmalıdır. Tipik bir TypeScript mikro servis projesi şunları içerebilir:

  • src/ - Kaynak kod dizini
  • src/routes/ - API rota işleyicileri
  • src/services/ - İş mantığı
  • src/models/ - Veri modelleri ve türleri
  • src/utils/ - Yardımcı işlevler
  • dist/ - Derlenmiş JavaScript dosyaları
  • tests/ - Birim ve entegrasyon testleri

2.1 Örnek Proje Yapısı

TypeScript mikroservisini nasıl yapılandırabileceğinize dair basit bir örnek şöyledir:

my-microservice/
├── src/
│   ├── routes/
│   │   └── userRoutes.ts
│   ├── services/
│   │   └── userService.ts
│   ├── models/
│   │   └── userModel.ts
│   ├── utils/
│   │   └── logger.ts
│   └── index.ts
├── dist/
├── tests/
│   └── userService.test.ts
├── package.json
├── tsconfig.json
└── README.md

3. Mikroservisler için TypeScript Kodu Yazma

Mikroservisler için TypeScript kodu yazarken, servisleriniz için net arayüzler ve tipler tanımlamaya odaklanmalısınız. Bu, her servisin diğerleriyle güvenilir ve öngörülebilir bir şekilde etkileşime girebilmesini sağlamaya yardımcı olur.

3.1 Modelleri ve Türleri Tanımlama

Veri modellerinizi ve türlerinizi tanımlayarak başlayın. Örneğin, bir kullanıcı modeli şu şekilde görünebilir:

export interface User {
  id: string;
  name: string;
  email: string;
}

3.2 Uygulama Hizmetleri

Sonra, servis sınıflarında iş mantığını uygulayın. İşte kullanıcıları yönetmek için bir servis örneği:

import { User } from '../models/userModel';

export class UserService {
  private users: User[] = [];

  addUser(user: User): void {
    this.users.push(user);
  }

  getUser(id: string): User | undefined {
    return this.users.find(user => user.id === id);
  }
}

3.3 API Rotalarını Ayarlama

Gelen istekleri işlemek için API rotalarını tanımlayın. İşte Express'i kullanan temel bir örnek:

import express from 'express';
import { UserService } from './services/userService';
import { User } from './models/userModel';

const app = express();
const userService = new UserService();

app.use(express.json());

app.post('/users', (req, res) => {
  const user: User = req.body;
  userService.addUser(user);
  res.status(201).send(user);
});

app.get('/users/:id', (req, res) => {
  const user = userService.getUser(req.params.id);
  if (user) {
    res.status(200).send(user);
  } else {
    res.status(404).send({ message: 'User not found' });
  }
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

4. Mikroservisleri test etme

Mikroservislerinizin güvenilirliğini sağlamak için test etmek çok önemlidir. Hizmetleriniz için birim ve bütünleşme testleri yazmak için jest veya mocha gibi test çerçevelerini kullanın.

4.1 Birim Testleri Yazma

jest kullanılarak UserService için basit bir birim testi örneği:

import { UserService } from '../src/services/userService';
import { User } from '../src/models/userModel';

test('should add and retrieve a user', () => {
  const userService = new UserService();
  const user: User = { id: '1', name: 'Alice', email: 'alice@example.com' };
  userService.addUser(user);
  expect(userService.getUser('1')).toEqual(user);
});

Çözüm

TypeScript'i bir mikro hizmet mimarisiyle kullanmak, güçlü yazım ve modülerlikten yararlanmanızı sağlayarak hizmetlerinizi daha sağlam ve sürdürülebilir hale getirir. TypeScript yapılandırması, kod organizasyonu ve test için en iyi uygulamaları izleyerek sorunsuz bir şekilde etkileşim kuran ölçeklenebilir ve güvenilir mikro hizmetler oluşturabilirsiniz.