Teknoloji · Diller ve framework’ler

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ı.

TypeScriptOnunla neler geliştiriyoruz
01Tipli REST ve GraphQL API’leri
02Ön yüz için arka uç (BFF)
03Olay tüketicileri ve worker’lar
04Entegrasyon katmanları
05Ortak monorepo’lar
06Dahili araçlar ve CLI’lar
Genellikle birlikte
  1. TypeScript
  2. Node.js
  3. NestJS
  4. Fastify
  5. zod
  6. Prisma
Neden kullanıyoruz

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.

Onunla ne geliştiriyoruz

TypeScript ile yayına aldığımız altı şey.

Kendi ürünlerimizde de müşteri işlerinde de aynı desenler.

01

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.

02

Ö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.

03

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.

04

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.

05

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.

06

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.

Uygunluk

Ne zaman tercih edilmeli.

Doğru tercih

İş 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.

Başka yere bakın

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.

Uygulamada

Sözleşmesi kodda tanımlı bir rota.

src/routes/redeem.tsts
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);
});
Referans mimari

Node.js’in bir Odeontech ortamındaki yeri.

Edge
Next.jsCDN / WAFAPI ağ geçidi
Uygulama
NestJS / Fastify servisleriBFFWorker’lar
Mesajlaşma
KafkaRabbitMQOutbox
Veri
PostgreSQLRedisNesne depolama
Platform
KubernetesOpenTelemetryGitHub Actions
Standartlarımız

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ışında any yok 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.
Tipik eşleşmeler

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
Birlikte çalışır
TypeScriptNode.jsNestJSFastifyzodPrismaPostgreSQLRedisKafkaKubernetesOpenTelemetryPlaywright
SSS

Sık sorulan sorular

Ekip birkaç mühendisten büyükse ya da Java veya .NET’ten geliyorsa NestJS; modül ve bağımlılık enjeksiyonu kuralları büyüyen bir kod tabanını okunur tutar. Servis küçük, gecikmeye duyarlı ve daha az framework tercih eden kişilerin sahipliğindeyse Fastify. İkisini de kullanıyoruz ve bizim ekibimize değil, sizin ekibinize hangisinin uyduğunu söyleriz.
G/Ç ağırlıklı işler için evet. İyi yazılmış bir Node.js servisi, bir yük dengeleyici arkasında çalışır ve yatay olarak ölçeklenir. Yaygın arızalar çalışma zamanından kaynaklanmaz: olay döngüsünü bloklayan çağrılar, sınırsız eşzamanlılık ve eksik geri basınç denetimi — hepsi standartlarımızın canlıya çıkmadan önce ele aldığı konular.
Katı derleyici ayarları, sınırda şemalar, otomatik bağımlılık güncellemeleri ve bir tip değişikliğinin onu çağıran her yeri açığa çıkardığı bir monorepo. Tipleri hakkında yalan söyleyen kod, bir biçim tercihi değil hata olarak görülür.
Evet. Bir incelemeyle başlarız — tipler, testler, bağımlılık sağlığı, gözlemlenebilirlik — ve size yazılı bir değerlendirme veririz. Ardından sizin depolarınızda, sizin CI’nızda ve sizin kod inceleme sürecinizde çalışır; sıfırdan yazmayı önermek yerine çıtayı ilerledikçe yükseltiriz.
İkisini de takip ediyoruz. Canlı ortamdaki servislerde Node.js LTS’te kalıyoruz; çünkü operasyonel araçlar, güvenlik yaması düzeni ve barındırma desteği olgunlaşmış durumda. Bu değişebilir; değiştiğinde size söyleriz.
İlgili

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.

✓ Satış sunumu yok✓ AI-native bir mühendisten yanıt✓ Yazılı geri dönüş