0Pricing
React Academy · Урок

Какую проблему решает tRPC

Разберитесь в расхождении типов между контрактами API интерфейса и сервера и узнайте, как tRPC устраняет его без генерации кода

«Какую проблему решает tRPC» — бесплатный урок React Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.

Проблема расхождения типов

При создании REST API на TypeScript сервер определяет структуру ответа. Клиенту приходится вручную создавать соответствующие типы TypeScript. Со временем эти типы расходятся по мере развития API, а компилятор не может обнаружить несоответствие, поскольку типы определены в разных пакетах.

Переименованное поле на сервере превращается в незаметную ошибку во время выполнения на клиенте.

Генерация кода GraphQL как одно из решений

GraphQL устраняет расхождение типов, генерируя типы TypeScript из схемы с помощью таких инструментов, как graphql-codegen. Этот подход хорошо работает, но усложняет проект: появляется отдельный язык запросов, GraphQL SDL, этап генерации кода в конвейере сборки и инструменты управления схемой.

Для команд, уже использующих GraphQL, генерация кода — правильное решение. Для команд, которым нужна типобезопасность без дополнительных сложностей GraphQL, tRPC предлагает альтернативу.

tRPC: типы через импорты TypeScript

Подход tRPC радикально прост: определите процедуры API на сервере как функции TypeScript, экспортируйте тип маршрутизатора и импортируйте этот тип на клиенте. Генерация кода не требуется. Отдельный язык схем также не нужен.

Сам компилятор TypeScript проверяет контракт между клиентом и сервером во время сборки.

Требование монорепозитория

tRPC требует, чтобы сервер и клиент совместно использовали типы через импорты TypeScript. Это естественно работает в монорепозитории, например Turborepo, Nx или рабочих пространствах pnpm, где сервер и клиент являются отдельными пакетами и могут импортировать друг друга.

Для полностью раздельных серверной и клиентской частей потребуется опубликовать типы маршрутизатора как общий пакет. Это добавляет этап публикации, но по-прежнему не требует генерации кода.

Как передаются типы в tRPC

На сервере определите маршрутизатор и экспортируйте его тип: export type AppRouter = typeof appRouter. На клиенте импортируйте этот тип и создайте типизированный клиент: createTRPCReact(). Клиент точно знает, какие процедуры существуют и каковы их типы входных и выходных данных.

Переименование процедуры на сервере немедленно вызывает ошибку TypeScript на клиенте.

Автодополнение и рефакторинг

Поскольку tRPC напрямую использует систему типов TypeScript, редактор предоставляет полное автодополнение имён процедур, структур входных данных и возвращаемых типов на стороне клиента. Переименование процедуры выполняется как рефакторинг переименования TypeScript, а не как ручной поиск и замена по всей кодовой базе.

На практике это улучшение опыта разработчика — наиболее высоко оцениваемая возможность tRPC.

Транспорт tRPC

По умолчанию tRPC использует HTTP в качестве транспорта. Каждый вызов процедуры является HTTP-запросом. tRPC также поддерживает WebSockets для подписок. Транспорт — это деталь реализации; программный интерфейс клиента одинаков независимо от транспорта.

Вы также можете предоставлять процедуры tRPC в виде стандартных конечных точек REST с помощью адаптера REST, чтобы обеспечить совместимость с клиентами, не использующими tRPC.

Экосистема tRPC

tRPC работает как промежуточное ПО в Express, Fastify и Hono. В Next.js он интегрируется через обработчики маршрутов API. Стартовый шаблон create-t3-app, то есть T3 Stack, объединяет tRPC, Prisma, NextAuth и Tailwind в полноcтековый шаблон Next.js.

T3 Stack — наиболее популярная отправная точка для tRPC, демонстрирующая готовые к промышленной эксплуатации подходы.

tRPC и OpenAPI + Zod

Другой типобезопасный подход к REST — определить схемы Zod, автоматически создать спецификацию OpenAPI и сгенерировать типы TypeScript на основе этой спецификации. Это создаёт контракт API, который могут использовать клиенты, написанные не на TypeScript.

tRPC проще, но работает только с TypeScript. OpenAPI и Zod усложняют решение, зато создают публичный контракт API. Выбирайте tRPC для внутреннего взаимодействия TypeScript с TypeScript, а OpenAPI — для публичных API.

Чего не делает tRPC

tRPC не заменяет REST, когда вам нужен публичный API для сторонних пользователей, мобильных клиентов, написанных не на TypeScript, или партнёров, которым нужен стабильный версионированный контракт. tRPC предназначен именно для монорепозиториев TypeScript со сквозной типобезопасностью.

Понимание этой области применения помогает не внедрять tRPC там, где лучше подходят REST или GraphQL.

Стартовый шаблон create-t3-app

Команда npm create t3-app@latest создаёт каркас проекта Next.js с предварительно настроенными tRPC, Prisma, NextAuth.js, Tailwind CSS и TypeScript. Сгенерированный код демонстрирует структуру маршрутизатора, создание контекста и настройку клиента.

Изучение этого каркаса — самый быстрый путь к пониманию того, как все компоненты tRPC объединяются в реальном приложении.

Механизм совместного использования типов tRPC

Как tRPC совместно использует типы между сервером и клиентом без генерации кода?

Итоги урока

tRPC устраняет расхождение типов между клиентом и сервером на TypeScript, напрямую импортируя тип TypeScript маршрутизатора и избавляя от необходимости генерировать код. Он работает в монорепозиториях и интегрируется с Next.js, Express, Fastify и Hono. T3 Stack (create-t3-app) — стандартный стартовый шаблон для промышленной разработки.

tRPC предназначен только для TypeScript и лучше всего подходит для внутренних полнофункциональных приложений, а не для публичных API.

Часто задаваемые вопросы

Урок «Какую проблему решает tRPC» бесплатный?

Да — полный текст урока «Какую проблему решает tRPC» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.

Чему я научусь в уроке «Какую проблему решает tRPC»?

Разберитесь в расхождении типов между контрактами API интерфейса и сервера и узнайте, как tRPC устраняет его без генерации кода Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать React Academy?

Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Какую проблему решает tRPC»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке React Academy?

Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Какую проблему решает tRPC
  2. Настройка tRPC с React и Next.js
  3. Запросы, мутации и подписки
  4. Интеграция tRPC с React Query и авторизацией
← Назад к React Academy