Neden Silgi?
Karşılaşılan Zorluklar
Modern, tip güvenli backend ve mikroservis geliştirmek; tekrar eden kodlar, manuel tip tanımları ve karmaşık araç kurulumları gerektirir. Sıkça karşılaşılan problemler:
- Servisler arası tutarlı tip güvenliği sağlamak
- Servis keşfi ve isimlendirme yönetimi
- Doğru hata yönetimi ve veri doğrulama
- Dağıtım ortamı yapılandırmaları
- Tekrar kullanılabilir yardımcılar oluşturmak
- İç içe şemalar ve karmaşık veri yapıları
- Framework geçişlerinde yaşanan zorluklar
Bu sorunlar, verimliliği düşürür ve çalışma zamanı hatalarına yol açar.
Silgi ile Çözüm
Silgi, servis odaklı mimariler için TypeScript tabanlı, kapsamlı bir framework sunar:
Uçtan Uca Tip Güvenliği
- Şemalarınızı bir kez tanımlayın, otomatik tip üretimi elde edin.
- Tip hatalarını geliştirme sırasında yakalayın.
- Tüm servisler, girişler ve çıkışlar için otomatik tamamlama.
Temiz ve Modüler Servis Tanımı
typescript
import { createSchema, createService } from 'silgi'
import { z } from 'zod'
const BookSchema = z.object({
id: z.string(),
title: z.string(),
author: z.string(),
})
const GetBookInput = z.object({
bookId: z.string(),
})
export const bookSchema = createSchema({
book: {
get: {
bookById: {
input: GetBookInput,
output: BookSchema,
},
},
post: {
createBook: {
input: BookSchema.omit({ id: true }),
output: BookSchema,
}
}
},
})
export const bookService = createService(bookSchema, {
book: {
get: {
async bookById({ input, shared }) {
const book = await shared.storage('db').getItem(`book:${input.bookId}`)
if (!book) {
throw ErrorFactory.notFound('Book not found')
}
return book
},
},
post: {
async createBook({ input, shared }) {
const newBook = { id: `book-${Date.now()}`, ...input }
await shared.storage('db').setItem(`book:${newBook.id}`, newBook)
return newBook
}
}
},
})
Orta Katman (Middleware) Desteği
Global veya route'a özel middleware tanımlayın:
Route'a Özel Middleware
typescript
import { createMiddleware } from 'silgi'
export const pathMiddleware = createMiddleware({
path: '/api/library/books/**',
method: ['GET', 'POST'],
setup: {
rules: {
rateLimit: {
interval: '1m',
tokensPerInterval: 10,
},
},
handler: async (event, silgi) => {
console.log('Middleware çalıştı')
},
},
})
Global Middleware
typescript
import { createMiddleware } from 'silgi'
export const globalMiddleware = createMiddleware({
global: 'globalkey1',
// method: ['GET', 'POST'] ekleyebilirsiniz.
setup: {
rules: {
rateLimit: {
interval: '1m',
tokensPerInterval: 10,
},
},
handler: async (event, silgi) => {
console.log('Global middleware çalıştı')
},
},
})
Paylaşılan Yardımcılar
Tekrar kullanılabilir mantığı bir kez tanımlayın, tüm servislerde kullanın:
typescript
import { createShared } from 'silgi'
import { useDatabase } from '../utils/db'
export const shared = createShared({
db: useDatabase,
})
Modül Sistemi
- Tutarlı arayüzle özel işlevsellik ekleyin.
- Tip güvenli seçeneklerle yapılandırın.
- Projeler arasında paylaşın.
typescript
import { defineSilgiModule } from 'silgi/kit'
export default defineSilgiModule({
meta: { name: 'auth-module', configKey: 'auth' },
defaults: { tokenExpiry: '1h' },
async setup(options, silgi) {
// Modül kurulum mantığı
},
})
Presetlerle Framework Bağımsızlığı
- Nitro, H3, Nuxt, Express, Fastify, Next.js ve daha fazlası ile uyumlu.
- Bağımsız NPM paketi olarak paketleyin.
Kolaylaştırılmış Geliştirme
- Otomatik tip ve kod üretimi
- Yerleşik CLI ile hızlı geliştirme
- Sıcak modül değiştirme
- ErrorFactory ile yapılandırılmış hata yönetimi
Alternatiflerle Karşılaştırma
- Express/Fastify/Koa: Silgi, üstün TypeScript entegrasyonu ve otomatik tip üretimi sunar.
- tRPC: Silgi, modüller, yardımcılar ve presetlerle daha kapsamlı bir ekosistem sağlar.
- NestJS: Silgi, daha hafif ve fonksiyonel bir mimari sunar.
- GraphQL Framework'leri: Silgi, REST ve GraphQL'i otomatik destekler, standart HTTP ve JSON kullanır.
Hızlı Başlangıç
Dakikalar içinde tip güvenli servisler oluşturun:
bash
pnpm create silgi@latest my-service
cd my-service
pnpm install
pnpm silgi prepare
pnpm dev
Daha fazla bilgi ve örnek için Başlangıç Rehberi ve örnekler sayfalarını inceleyin.