tRPC в TypeScript: упрощение разработки API

Создание API обычно подразумевает выбор между REST или GraphQL. Вы тратите время на настройку маршрутов, управление схемами и синхронизацию типов между фронтендом и бэкендом. Если вы используете TypeScript на обеих сторонах, этот процесс кажется громоздким. В итоге вы пишете одни и те же типы дважды.

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

Зачем использовать tRPC?

  • Отсутствие ручной синхронизации типов: вы пишете функцию на сервере, и клиент мгновенно узнает типы входных и выходных данных.
  • Никакой генерации кода: вам не нужно запускать дополнительные инструменты для создания типов.
  • Отсутствие расхождения схем: поскольку клиент использует типы сервера напрямую, ваш фронтенд всегда синхронизирован с бэкендом.
  • Ускорение разработки: это ощущается как вызов функции в локальном файле, а не как выполнение сетевого запроса.

Традиционные методы имеют свои недостатки. REST требует ручных вызовов fetch и дублирования типов. GraphQL предоставляет схему, но усложняет процесс за счет резолверов и генерации кода (codegen).

tRPC рассматривает ваш бэкенд как набор типобезопасных функций. Вы определяете процедуры в роутерах. Клиент импортирует тип вашего роутера и вызывает эти процедуры напрямую.

Пример рабочего процесса:

  1. Определите процедуру на сервере с валидацией (например, с помощью Zod).
  2. Экспортируйте тип роутера.
  3. Вызовите эту процедуру на клиенте с полным автодополнением и типобезопасностью.

Когда стоит использовать tRPC:

  • Ваш фронтенд и бэкенд используют TypeScript.
  • Вы контролируете обе стороны стека.
  • Вы создаете внутренние инструменты, админ-панели или full-stack приложения на Next.js.
  • Вы работаете в монорепозитории.

Когда стоит избегать tRPC:

  • Вы создаете публичный API для множества разных пользователей.
  • Ваши клиенты используют другие языки, такие как Python или Go.
  • Вам требуется сложное версионирование API.

tRPC не является заменой REST или GraphQL в любом сценарии. Это инструмент для скорости и безопасности, когда ваш стек унифицирован. Он устраняет сложности на границах API и позволяет вам сосредоточиться на написании логики.

Источник: https://dev.to/geekyants/trpc-in-typescript-simplify-api-development-without-boilerplate-3lm3