Skip to content

Neden Silgi?

Karşılaşılan Zorluklar

Modern, tip güvenli backend ve mikroservisler geliştirmek; tekrar eden kodlar, manuel tip tanımları ve karmaşık araç kurulumları gerektirir. Geliştiriciler genellikle şu sorunlarla karşılaşır:

  • Servisler arası tutarlı tip güvenliği sağlamak
  • Mikroservislerde servis keşfi ve isimlendirmeyi yönetmek
  • Doğru hata yönetimi ve veri doğrulama uygulamak
  • Dağıtım ortamlarını yapılandırmak
  • Servisler arası tekrar kullanılabilir bileşenler oluşturmak
  • İç içe şemalar ve karmaşık veri yapıları ile çalışmak

Bu zorluklar, verimliliği azaltır, tutarsız uygulamalara ve çalışma zamanı hatalarına yol açar.

Silgi ile Çözüm

Silgi, servis odaklı mimariler için özel olarak tasarlanmış, kapsamlı ve TypeScript öncelikli bir framework ile bu sorunları ortadan kaldırır:

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 IDE otomatik tamamlama.
  • Giriş/çıkışlar otomatik olarak doğrulanır.

Modüler ve Sürdürülebilir Mimari

typescript
import { createSchema, createService, ErrorFactory } 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({
  kitap: {
    book: {
      get: {
        bookById: {
          input: GetBookInput,
          output: BookSchema,
        },
      },
      post: {
        createBook: {
          input: BookSchema.omit({ id: true }),
          output: BookSchema,
        }
      }
    },
  },
})

export const bookService = createService({
  kitap: {
    book: {
      get: {
        bookById: {
          handler: async (input, shared) => {
            const book = await shared.storage('db').getItem(`book:${input.bookId}`)
            if (!book) {
              throw ErrorFactory.notFound('Kitap bulunamadı')
            }
            return book
          },
        },
      },
      post: {
        createBook: {
          handler: async (input, shared) => {
            const newBook = { id: `book-${Date.now()}`, ...input }
            await shared.storage('db').setItem(`book:${newBook.id}`, newBook)
            return newBook
          }
        }
      }
    },
  },
})

Güçlü 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 type { ExtendShared } from 'silgi/types'
import { useDatabase } from '../utils/db'

export interface SharedDatabase extends ExtendShared {
  database: ReturnType<typeof useDatabase>
}

export const db = createShared({
  database: useDatabase,
})

Genişletilebilir Modül Sistemi

  • Tutarlı bir modül arayüzüyle özel işlevsellik ekleyin.
  • Modülleri tip güvenli seçeneklerle yapılandırın.
  • Projeler arasında paylaşın ve tekrar kullanın.
typescript
import { defineSilgiModule, addNPMPackage } from 'silgi/kit';

export interface ModuleOptions {
  authModule: {
    jwtSecret: string;
    tokenExpiry?: string;
  }
}

export default defineSilgiModule<ModuleOptions['authModule']>({
  meta: {
    name: 'auth-module',
    configKey: 'authModule',
  },
  defaults: {
    tokenExpiry: '1h',
  },
  async setup(options, silgi) {
    if (silgi.options.isPreparingModules) {
      return
    }

    const { resolve } = createResolver(import.meta.url)
    const runtimeDir = resolve('./runtime')
    silgi.options.plugins ||= []
    silgi.options.plugins.push({
      path: resolve(runtimeDir, './plugin.ts'),
    })

    silgi.hook('reload:scan', async () => {
      /// await graphqlLoadSync(silgi)
    })

    addNPMPackage([
      {
        name: 'graphql',
      },
    ])
  },
});

Presetlerle Framework Bağımsızlığı

  • Nitro, H3, Nuxt, Express, Fastify, Next.js ve daha fazlası ile uyumlu.
  • Bağımsız bir NPM paketi olarak paketleyin.
  • Dağıtım hedefinden bağımsız, tutarlı API.

Kolaylaştırılmış Geliştirme Deneyimi

  • 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
  • Kapsamlı test yardımcıları

Silgi'nin Alternatiflerle Karşılaştırılması

  • Express/Fastify/Koa: Silgi, üstün TypeScript entegrasyonu, otomatik tip üretimi ve daha yapılandırılmış bir servis tanımı sunar.
  • tRPC: Her ikisi de tip güvenliğine odaklansa da, Silgi modüller, paylaşılan yardımcılar ve dağıtım presetleriyle daha kapsamlı bir ekosistem sunar.
  • NestJS: Silgi, daha hafif ve esnek bir mimariye sahiptir; dekoratörler yerine fonksiyonel bileşimi tercih eder.
  • GraphQL Framework'leri: Silgi, GraphQL'in karmaşıklığı olmadan benzer tip güvenliği ve şema avantajları sunar; standart HTTP metodları ve JSON kullanır. Ayrıca Silgi, REST ve GraphQL'i otomatik olarak destekler.

Silgi ile 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

Silgi'nin tüm özelliklerini ve örneklerini Başlangıç Rehberi ve örnekler ile keşfedin.

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