Tarayıcıdan arka uca tek bir dil, uçtan uca tip güvenli.
Tipli servisler geliştiren TypeScript ve Node.js mühendisleri — Odeontech’in kendi ürünlerinin arkasındaki teknoloji yığınında API katmanları, olay tüketicileri ve ön yüz için arka uç katmanları.
- TypeScript
- Node.js
- NestJS
- Fastify
- zod
- Prisma
TypeScript, Odeontech’te varsayılan dildir.
Kendi işlettiğimiz platformların API katmanlarını ve web ön yüzlerini o çalıştırır; bir müşteri ürünü için yıllarca sağlam kalması gereken bir servis, worker ya da arayüz gerektiğinde ilk başvurduğumuz dil odur. Bunun nedeni moda değil. Tüm yüzeyde tek bir dil; tek tip kümesi, tek test koşucusu, tek kod inceleme kültürü — ve uç noktayı yazan mühendisle onu çağıran mühendis arasında ortak bir sözleşme demektir.
Node.js, yerini G/Ç ağırlıklı işlerde hak eder: HTTP API’leri, ağ geçitleri, olay tüketicileri, webhook’lar, gerçek zamanlı kanallar. Olay döngüsü çok sayıda eşzamanlı bağlantı için tasarlanmıştır ve ekosistem, bir kurumsal ortamın önünüze çıkardığı hemen her entegrasyonu kapsar.
Nerede durduğu konusunda da aynı ölçüde netiz. CPU ağırlıklı toplu işler, uzun süren sayısal görevler ve gecikme toleransı düşük alım-satım yolları Java, Go ya da Python’a gider — ve bunu, bir çalışma zamanını tasarlanmadığı işe zorlamak yerine mimari incelemede söyleriz.
TypeScript ile yayına aldığımız altı şey.
Kendi ürünlerimizde de müşteri işlerinde de aynı desenler.
Tipli REST ve GraphQL API’leri
Şemaları bir kez — zod ya da OpenAPI ile — tanımlanan; sınırda, testlerde ve üretilen istemcide zorunlu kılınan NestJS veya Fastify servisleri. Sözleşme koddur, bir wiki sayfası değil.
Ön yüz için arka uç (BFF)
Legacy ve üçüncü taraf sistemlerin önünde duran; web ve mobil için veri yükünü şekillendiren, kimlik doğrulama ile önbelleklemeyi üstlenen ve ortamın pürüzlü kenarlarını ürün ekibinden gizleyen ince bir BFF.
Olay tüketicileri ve worker’lar
Idempotent işleyicileri, dead-letter kuyrukları ve geri basınç denetimi olan Kafka ve RabbitMQ tüketicileri. İlk denemede kolayca hata yapılan kısımlar — yeniden denemeler, kısmi yazmalar, sıralama — ilk devreye almadan önce gözden geçirilir.
Entegrasyon katmanları
SAP, Salesforce, ödeme sağlayıcıları ve taşıyıcı API’leri için adaptörler; devre kesicileri ve yapılandırılmış hata eşlemesi olan tipli istemcilerle sarmalanır, böylece alt sistemlerdeki arızalar görünür ve sınırlı kalır.
Ortak monorepo’lar
Ön yüz, API ve ortak paketleri tek yerde toplayan pnpm veya Turborepo çalışma alanları; böylece alan modelindeki bir tip değişikliği derlemeyi bozar — canlı ortamı değil.
Dahili araçlar ve CLI’lar
Yönetim konsolları, geçiş betikleri, geriye dönük veri doldurmaları ve operasyonel araçlar; ürünle aynı dilde yazılır, aynı standartta incelenir ve aynı ekip tarafından sahiplenilir.
Ne zaman tercih edilmeli.
İş G/Ç ağırlıklıysa — API’ler, entegrasyonlar, orkestrasyon, gerçek zamanlı özellikler — ve ön yüzü de aynı ekip sahipleniyorsa Node.js üzerinde TypeScript’i seçin. Bir ürün kararından çalışan bir servise giden doğrudan bir yoldur; ekosistem kimlik doğrulama, kuyruklar, gözlemlenebilirlik ve test için hepsini kendiniz yazmadan iyi desteklenen bir çözüm sunar. Sık sürüm çıkaran ve teknoloji yığınının tamamında tek bir işe alım profili isteyen ürün ekiplerine uygundur.
CPU ağırlıklı hesaplama, yoğun sayısal veri hatları ya da bellek ve iş parçacıkları üzerinde ince denetim gerektiren yükler için tercih etmeyin. Kurumunuz JVM ya da .NET üzerinde standartlaşmışsa ve buna uygun operasyonel araçlara sahipse, bir Node.js adası fazla bir şey katmadan maliyet ekler. Sürekli CPU yükü altında katı gecikme gereksinimi varsa Go ya da Java size daha iyi hizmet eder — hangisi olduğunu size söyleriz.
Sözleşmesi kodda tanımlı bir rota.
const Redeem = z.object({
memberId: z.string().uuid(),
points: z.number().int().positive(),
idempotencyKey: z.string().min(16),
});
app.post('/redeem', { schema: { body: Redeem } }, async (req, reply) => {
// handler receives a typed body — no manual parsing, no any
const result = await ledger.redeem(req.body, { traceId: req.id });
return reply.code(result.duplicate ? 200 : 201).send(result);
});Node.js’in bir Odeontech ortamındaki yeri.
Teslim ettiğimiz TypeScript kod tabanları neye benzer.
- Strict mod, kaçış yolu yok.
strict: true, tanımlı bir adaptör sınırının dışındaanyyok ve uyarmak yerine derlemeyi başarısız kılan lint kuralları. - Sınırda şemalar. Gelen her veri yükü zod ya da JSON Schema ile doğrulanır; giden her sözleşme aynı kaynaktan üretilir ve tüketicilere yayımlanır.
- Riski yansıtan testler. Alan mantığı için birim testleri, her entegrasyon için sözleşme testleri ve arızanın müşteriye görünür olacağı yerlerde Playwright ya da k6.
- İlk commit’ten itibaren gözlemlenebilirlik. OpenTelemetry izleri, istek kimliği taşıyan yapılandırılmış JSON logları ve servis trafik almadan önce SLO’ları tanımlı bir pano.
- Varsayılan olarak idempotent. Paraya, puana ya da stoğa dokunan işleyiciler bir idempotency anahtarı alır ve yeniden denemeyi mükerrer kayıt yazmadan atlatır.
- Bağımlılık hijyeni. Lock dosyaları depoda, Renovate ya da Dependabot açık ve CI’da SCA taraması — tedarik zinciri güvenlik incelemesinin bir parçasıdır.
- Performans varsayılmaz, ölçülür. Olay döngüsü gecikmesi, heap ve p95 gecikmesi panodadır; sıcak bir yolu değiştiren sürümlerden önce yük testleri koşulur.
- Twelve-factor devreye alma. Yapılandırma ortamdan, sırlar bir kasadan gelir; konteynerler bir kez derlenir ve ortamlar arasında değiştirilmeden ilerletilir.
Genellikle yanında teslim edilenler.
- Kimlik doğrulama, girdi doğrulama, izleme ve sağlık kontrolleri hazır bağlanmış bir NestJS veya Fastify servis şablonu
- OpenAPI ya da GraphQL şeması, üretilmiş tipli istemciler ve her tüketici için sözleşme testleri
- Web, mobil ve API arasında ortak alan tipleri barındıran bir monorepo düzeni
- Tip denetimi, lint, testler, SCA taraması ve konteyner derlemesi ayrı kapılar olan bir CI hattı
- Servis için runbook’lar ve panolar — nöbetçi mühendis kodu okumadan önce izi okuyabilir
Sık sorulan sorular
Komşu teknolojiler ve onları kullanan hizmetler.
Canlı sistemler için TypeScript mühendislerine mi ihtiyacınız var?
İşin şeklini — yeni bir servis, bir BFF, bir entegrasyon katmanı — ve ihtiyaç duyduğunuz kıdemi bize anlatın. Size isimleriyle bir ekip önerir ya da uzmanlarımızı sizin ekibinize yerleştiririz.