Перейти к содержимому

17. Реальный проект: API

В этом финальном уроке мы рассмотрим построение полноценного production-ready API на tRPC. Мы создадим API с несколькими роутерами: аутентификация, пользователи, посты и комментарии — всё с правильной архитектурой, валидацией и обработкой ошибок.

Хорошо организованный tRPC-проект имеет чёткую структуру: server/routers/ содержит отдельные роутеры для каждой сущности, server/trpc.ts — инициализацию tRPC и типы процедур, server/context.ts — создание контекста запроса.

Разбивайте API на домены: auth (аутентификация), user (пользователи), post (посты), comment (комментарии). Каждый роутер инкапсулирует логику своего домена и экспортирует только необходимые типы.

Создайте protectedProcedure и adminProcedure один раз и используйте их в роутерах. Это гарантирует единообразную проверку аутентификации без дублирования кода.

Для вложенных ресурсов (комментарии к посту) используйте понятные имена процедур: comment.getByPost, comment.create. Это сохраняет API плоским и предотвращает глубокую вложенность.

В каждой процедуре явно обрабатывайте ошибки: проверяйте существование ресурса и выбрасывайте NOT_FOUND, проверяйте права доступа и выбрасывайте FORBIDDEN, оборачивайте операции с БД в try-catch.

Используйте Zod для всех входных данных; возвращайте минимально необходимый набор полей; документируйте процедуры через TypeScript JSDoc-комментарии; пишите тесты для каждой процедуры с mock-контекстом.