Asosiy kontentga o‘tish
Innovialabs

tRPC: frontend va backend o‘rtasida REST’siz tipxavfsiz API

Chuqur3 daq

Qisqacha

tRPC TypeScript klientiga server funksiyalarini to‘g‘ridan-to‘g‘ri chaqirish imkonini beradi, kirish va chiqish tiplarini sxema va kod generatsiyasisiz server kodidan chiqaradi; u bitta jamoa TypeScript monorepoda ikkala tomonga egalik qilganda yaxshi, ommaviy va ko‘p tilli API’lar uchun esa mos emas.

tRPC qanday ishlaydi

tRPC (TypeScript Remote Procedure Call) — klient server funksiyalarini go‘yo lokal funksiyalardek chaqiradigan API qurish uchun kutubxona. Serverda siz protseduralarni yozasiz, ularni routerga birlashtirasiz va faqat router tipini eksport qilasiz. Klient shu tipni import qiladi va har bir chaqiruv uchun to‘liq avtoto‘ldirish va tip tekshiruvini oladi.

OpenAPI spetsifikatsiyasi ham, GraphQL sxemasi ham, kod generatsiyasi bosqichi ham yo‘q. Tiplar TypeScript tip chiqarishi orqali uzatiladi: serverda maydonni o‘zgartirdingiz — unga tayanadigan har bir klient chaqiruvi darhol kompilyatsiya xatosini beradi. Ichkarida bular JSON bilan oddiy HTTP so‘rovlar, shuning uchun tRPC Node.js, edge runtime’lar va Next.js kabi freymvorklarda ishlaydi.

Validatsiyali router va protseduralar

Protsedura query (ma’lumotni o‘qish) yoki mutation (ma’lumotni o‘zgartirish) bo‘ladi. Kirish ma’lumotlari ishlash vaqtida Zod kabi sxema kutubxonasi bilan tekshiriladi va o‘sha sxema TypeScript tipini ham beradi.

// server/trpc.ts
import { initTRPC } from "@trpc/server";
import { z } from "zod";
import { db } from "./db"; // ma’lumotlar bazasi klientingiz

const t = initTRPC.create();

export const appRouter = t.router({
  getProduct: t.procedure
    .input(z.object({ id: z.string() }))
    .query(({ input }) => db.product.findUnique({ where: { id: input.id } })),

  createReview: t.procedure
    .input(z.object({ productId: z.string(), text: z.string().min(10) }))
    .mutation(({ input }) => db.review.create({ data: input })),
});

export type AppRouter = typeof appRouter;

Klientda AppRouter asosida tiplangan klient yaratiladi:

import type { AppRouter } from "../server/trpc";
// AppRouter bilan yaratilgan klient barcha protseduralarni biladi:
const product = await trpc.getProduct.query({ id: "42" }); // tiplangan natija

Amalda ishlatiladigan asosiy qismlar:

  • Context — so‘rov ma’lumotlari: joriy foydalanuvchi, bazaga ulanish.
  • Middleware — qayta ishlatiladigan mantiq, masalan avtorizatsiyasiz chaqiruvlarni rad etadigan protectedProcedure.
  • Ichma-ich routerlar — bitta ilova routeriga birlashtirilgan user, product, order.
  • React Query bilan integratsiya — React ilovalarida keshlash, yuklanish holatlari va invalidatsiya.

Klientni aniq sozlash adapter va asosiy versiyaga bog‘liq, shuning uchun o‘z stekingiz bo‘yicha rasmiy hujjatlarga qarang.

tRPC, REST va GraphQL

tRPCRESTGraphQL
KontraktKoddan chiqarilgan TypeScript tiplariURL va HTTP metodlari, ixtiyoriy OpenAPITip tizimiga ega sxema
Klient tillariAmalda faqat TypeScriptIstalganIstalgan
Kod generatsiyasiKerak emasIxtiyoriy (OpenAPI’dan)Odatda tiplangan klientlar uchun ishlatiladi
HTTP keshlashquery uchun mumkin, lekin kamroq tabiiyNativ va tushunarliMurakkabroq, odatda klientda
Ma’lumot olishning moslashuvchanligiProtsedurada qat’iyEndpoint’da qat’iyKlient maydonlarni tanlaydi
Eng mos holatFull-stack TypeScript ilovalarOmmaviy va integratsiya API’lariTurli ehtiyojli ko‘plab klientlar

tRPC umuman REST yoki GraphQL o‘rnini bosmaydi — ikkala tomon bitta jamoa tomonidan TypeScript’da yozilganda u ortiqcha qatlamni olib tashlaydi.

tRPC qachon noto‘g‘ri tanlov

  • Hamkorlar va uchinchi tomon dasturchilari uchun ommaviy API’lar. Ularga barqaror, hujjatlashtirilgan va tilga bog‘liq bo‘lmagan kontraktlar kerak.
  • Boshqa tillardagi klientlar: nativ iOS (Swift), Android (Kotlin), Python servislari, 1C.
  • Klient paketlarni nashr qilmasdan server tiplarini import qila olmaydigan alohida repozitoriylar.
  • Uzoq yashaydigan versiyalangan API’lar — tRPC kontraktni erkin o‘zgartirishga undaydi, bu esa hali ishlatilayotgan eski ilova versiyalarini, masalan yangilanmagan mobil ilovalarni buzadi.
  • API javoblarini CDN/HTTP keshlashga kuchli tayanish.

Ko‘p uchraydigan gibrid: o‘z veb-ilovangiz uchun tRPC va tashqi integratsiyalar uchun kichik REST yoki webhook qatlami.

Ko‘p uchraydigan xatolar

  • «TypeScript allaqachon tekshiradi» deb kirish validatsiyasini o‘tkazib yuborish. Ishlash vaqtida tiplar yo‘q; validatsiya serverni har qanday klientdan himoya qiladi.
  • Bazadagi xom modellarni qaytarib, ichki maydonlarni oshkor qilish.
  • Barcha protseduralarni bitta ulkan router fayliga yig‘ish.
  • Klientga faqat router tipi o‘rniga server kodini berish.

Ko‘p beriladigan savollar

Qat’iy aytganda, yo‘q, lekin bu eng qulay variant. Klientga router tipiga kirish kerak, bu esa server va klient bitta repozitoriy yoki umumiy workspace’da bo‘lganda osonroq.

Bunda yordam beramiz

O‘zingiz shug‘ullanmasdan natija olishni istasangiz — biz har kuni shu bilan shug‘ullanamiz.

Loyihani muhokama qilish

Yana o‘qing

G‘oya yoki vazifangiz bormi? Bizga aytib bering

Ish kuni davomida javob beramiz va yechim taklif qilamiz. Konsultatsiya bepul.