0Pricing
TypeScript Academy · Ders

Ara Katman ve Bağlam

Prosedürlere kimlik doğrulama ve ortak bağlam ekleyin.

Ara Katman ve Bağlam, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, TypeScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. TypeScript Academy kursu toplamda 4 dersten oluşur.

Bağlam Nedir

Her tRPC isteği bir bağlam taşır: veritabanı istemcisi, istek ve mevcut kullanıcı gibi tüm prosedürlerin erişebildiği ortak veriler. Bu bağlamı, her istek için bir kez createContext işleviyle oluşturursunuz.

export async function createContext({ req }: { req: Request }) {
  const token = req.headers.get('authorization');
  const user = await getUserFromToken(token);
  return { user };
}

Bağlamın Türünü Belirleme

tRPC, bağlam türünü createContext işlevinden çıkarır ve her prosedüre aktarır. Örneği bu bağlam türüyle başlattığınızda çözümleyiciler ctx türünü doğru biçimde görür.

import { initTRPC } from '@trpc/server';

type Context = Awaited<ReturnType<typeof createContext>>;
const t = initTRPC.context<Context>().create();

Çözümleyicide ctx Okuma

Herhangi bir prosedürün içinde bağlama ctx adıyla, türü bütünüyle belirlenmiş olarak erişilebilir. Burada bir prosedür, mevcut kullanıcıyı bağlamdan okur.

const me = t.procedure.query(({ ctx }) => {
  // ctx.user is typed from createContext
  return ctx.user;
});

Ara Katman Nedir

Ara katman, bir prosedür çözümleyicisinden önce çalışır. İzinleri denetleyebilir, günlükleme yapabilir veya bağlamı değiştirebilir. Devam etmek için next() çağrısını yapar ya da isteği reddetmek için hata oluşturur.

const logger = t.middleware(async ({ path, next }) => {
  console.log('calling', path);
  return next();
});

Kimlik Doğrulama Ara Katmanı

Yaygın bir ara katman, kimlik doğrulamayı zorunlu kılar. Bağlamda kullanıcı yoksa bir UNAUTHORIZED hatası oluşturur; aksi durumda çözümleyiciye devam eder.

import { TRPCError } from '@trpc/server';

const isAuthed = t.middleware(({ ctx, next }) => {
  if (!ctx.user) {
    throw new TRPCError({ code: 'UNAUTHORIZED' });
  }
  return next();
});

next ile Bağlamı Daraltma

Ara katman, yeni bir ctx değerini next'e geçirerek bağlam türünü daha kesin hâle getirebilir. Kimlik doğrulama denetiminden sonra kullanıcının var olduğu garanti edilir; bu nedenle user türünü olası boş değerden boş olmayan değere daraltırız.

const isAuthed = t.middleware(({ ctx, next }) => {
  if (!ctx.user) throw new TRPCError({ code: 'UNAUTHORIZED' });
  return next({ ctx: { user: ctx.user } }); // user now non-null
});

Korumalı Prosedür Oluşturma

.use ile ara katmanı bağlayarak yeniden kullanılabilir bir korumalı prosedür oluşturun. Bundan oluşturulan her prosedür kimlik doğrulaması gerektirir ve boş olmayan bir kullanıcı görür.

export const protectedProcedure = t.procedure.use(isAuthed);

const secret = protectedProcedure.query(({ ctx }) => {
  return 'Hello ' + ctx.user.name; // user is guaranteed
});

Açık ve Korumalı

Artık iki yapı taşınız var: açık uç noktalar için publicProcedure ve kimliği doğrulanmış uç noktalar için protectedProcedure. Doğru temeli seçmek, erişimi hem tür düzeyinde hem de çalışma zamanında belgeler ve uygular.

const ping = publicProcedure.query(() => 'pong');
const account = protectedProcedure.query(({ ctx }) => ctx.user);

Türü Belirlenmiş ctx Aktarımı

Daraltılmış bağlam aktarılır: protectedProcedure, ctx.user değerinin boş olmadığını garanti ettiği için bunun üzerine kurulan her çözümleyici, yeniden denetim yapmadan boş olmayan türü görür. Ara katman bu değişmezi bir kez tanımlar.

// In any protectedProcedure resolver:
// ctx.user is User, not User | null

Ara Katmanları Birleştirme

Ara katmanlar .use zincirlenerek birleştirilir. Önce günlükleme, ardından kimlik doğrulama ve sonra rol denetimi uygulayabilirsiniz. Her biri sırayla çalışır ve sonraki katman için bağlamı daha da daraltabilir.

const adminProcedure = protectedProcedure.use(({ ctx, next }) => {
  if (ctx.user.role !== 'admin') {
    throw new TRPCError({ code: 'FORBIDDEN' });
  }
  return next();
});

Tüm Çerçeve

Bağlam istek başına verileri sağlar, ara katman bunları korur ve daha kesin hâle getirir, uzmanlaşmış prosedürler de bu güvenceleri kalıcı olarak içerir. Girdi şemaları ve türü belirlenmiş istemciyle birleştiğinde, hem çalışma zamanında hem de derleme zamanında uçtan uca güvenli bir API elde edersiniz.

// createContext -> ctx
// middleware -> auth + narrowing
// protectedProcedure -> guaranteed ctx.user
// typed client -> end-to-end safety

Kısa Değerlendirme

Bağlam ve ara katman hakkındaki anlayışınızı sınayın.

Özet

Bağlam ve ara katmanla bir tRPC API'sini güvence altına aldınız.

  • createContext, initTRPC.context aracılığıyla türü belirlenen, istek başına ortak verileri oluşturur.
  • Ara katman, bağlamı korumak ve daha kesin hâle getirmek için çözümleyicilerden önce çalışır.
  • ctx değerini next'e geçirmek, türünü daraltır.
  • protectedProcedure, kimlik doğrulamayı içerir; böylece çözümleyiciler boş olmayan bir kullanıcı alır.

Uçtan uca tür güvenliği kursunu tamamladınız.

Sıkça Sorulan Sorular

“Ara Katman ve Bağlam” dersi ücretsiz mi?

Evet — “Ara Katman ve Bağlam” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve TypeScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. TypeScript Academy kursu toplamda 4 dersten oluşur.

“Ara Katman ve Bağlam” dersinde ne öğreneceğim?

Prosedürlere kimlik doğrulama ve ortak bağlam ekleyin. TypeScript Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

TypeScript Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te TypeScript Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Ara Katman ve Bağlam” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu TypeScript Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her TypeScript Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. tRPC Mimarisi
  2. Yönlendiricileri ve Prosedürleri Tanımlama
  3. İstemci-Sunucu Tür Çıkarımı
  4. Ara Katman ve Bağlam
← TypeScript Academy Sayfasına Dön