Календарь
Расписание
август 2025
сентябрь 2025
октябрь 2025
ноябрь 2025
 -  -  -  - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30  -  -  -  -  -
 -  - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31  -  -
 -  -  -  -  - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

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

Fastify. Удобство для backend и frontend
RUTUBE
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%
Сложность Высокая

Понравился урок? Поделись с друзьями!

Подписывайтесь на youtube, чтобы не пропустить свежие видео!

Дмитрий Лаврик
Дмитрий Лаврик
Конспект урока

Основная сила подхода, основанного на идее 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.