Fastify. Удобство для backend и frontend

В данном видео мы рассмотрим возможности и преимущества использования OpenAPI и JSONSchema в backend и frontend-разработке, уделяя особое внимание философии Documentation First.
Подход на основе JSONSchema может объединить проверку входных данных, сериализацию и документирование, предлагая значительные преимущества как для серверных, так и для клиентских рабочих процессов.
Несмотря на многословность JSON-схемы, она предоставляет комплексный, единый источник истины, который повышает надежность API, устраняет избыточный код, улучшает безопасность типов и автоматизирует генерацию документации.
Fastify даёт всё для удобного использования JSONSchema: Ajv-валидатор, fast-json-stringify и автоматическую генерацию OpenApi.
Продолжительность | 23:53 |
Дата записи урока | 31.05.2025 |
Актуальность в 2025 | 100% |
Сложность | Высокая |
Основная сила подхода, основанного на идее Documentation First и использовании JSONSchema, заключается в его способности одновременно служить валидатором, сериализатором и источником документации. Эта триада сокращает дублирование усилий и потенциальные несоответствия, которые возникают, когда эти задачи решаются отдельно.
Значительным риском при разработке API является непреднамеренное раскрытие конфиденциальных или внутренних полей (например, паролей, внутренних идентификаторов). С помощью JSONSchema мы можем определять общедоступные версии сущностей (например, «postPublic» или «categoryPublic»), которые исключают ненужные поля, гарантируя, что сериализация выводит именно то, что задумано. Например,
{
type: 'object',
properties: {
id: { type: 'integer', examples: [1] },
url: { type: 'string', examples: ['it-web'] },
title: { type: 'string', examples: ['Web-разработка'] }
},
additionalProperties: false,
required: ['id', 'url', 'title']
}
чётко описывает поля категории. Да, эта схема выглядит не слишком лаконично, зато на 100% соответствует OpenApi, уже готова красиво отображаться в SwaggerUI, а ещё может быть полностью или частично переиспользована для валидации данных, приходящих со стороны клиента.
Для сравнения, статическая типизация TypeScript предлагает проверки во время компиляции, но не существует в runtime. В видео показаны случаи, когда TypeScript молча допускает посторонние поля или возвраты избыточных данных из контроллера, создавая риски утечки данных или неожиданных ответов API.
Многие бэкенд-фреймворки требуют отдельных механизмов для описания проверки входных данных и сериализации ответа. Например, в NestJS это приводит к усложнению кодовой базы и применению большого количества декораторов. А если мы отказываемся от встроенной валидации в пользу, например, Zod, то зоопарк технологий становится ещё больше. Ведь потом из правил Zod придётся отдельно выводить описание для OpenApi. Кстати, для сложных типов, например, для discriminated union из видео, автоматический перевод Zod-описания в OpenApi получится весьма корявым. JSONSchema таких минусов не имеет.
Возможность автоматически генерировать TypeScript-типы для frontend из схем OpenAPI JSON является серьезным бонусом. Используя такие инструменты, как библиотеки openapi-typescript и openapi-fetch, фронтендеры могут получить строго типизированные клиенты API, которые увеличивают скорость разработки и уменьшают вероятность появления ошибок.
Всё это подробно демонстрирую в видео на полностью работающем примере с JSONSchema, Fastify и ORM Prisma.