Skip to content

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.

Released under the MIT License. (dev). Documentation design is a copy of vite.dev docs.