tRPC у TypeScript: спрощення розробки API

Створення API зазвичай означає вибір між REST або GraphQL. Ви витрачаєте час на налаштування маршрутів, керування схемами та синхронізацію типів між фронтендом і бекендом. Якщо ви використовуєте TypeScript з обох сторін, цей процес здається важким. У підсумку ви пишете одні й ті самі типи двічі.

tRPC змінює цей робочий процес. Він усуває потребу в окремому API-контракті. Замість цього він використовує TypeScript для автоматичного обміну типами між вашим сервером і клієнтом.

Чому варто використовувати tRPC?

  • Без ручної синхронізації типів: ви пишете функцію на сервері, і клієнт миттєво дізнається типи вхідних і вихідних даних.
  • Без генерації коду: вам не потрібно запускати додаткові інструменти для створення типів.
  • Без розбіжностей у схемах: оскільки клієнт використовує типи сервера безпосередньо, ваш фронтенд залишається синхронізованим із бекендом.
  • Швидша розробка: це відчувається як виклик функції у локальному файлі, а не як виконання мережевого запиту.

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

tRPC розглядає ваш бекенд як набір типізованих функцій. Ви визначаєте процедури в роутерах (routers). Клієнт імпортує тип вашого роутера і викликає ці процедури безпосередньо.

Приклад робочого процесу:

  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