Что такое Fastify
Fastify — веб-фреймворк для Node.js, на котором пишут серверы и JSON API. Он берёт на себя разбор запросов, маршруты, проверку данных и отправку ответов, а вам остаётся код вашего приложения. Курс написан для Fastify 5 и Node.js 22 или новее с ES-модулями (import и export).
Что понадобится
Нужен Node.js 22 или новее и npm, который устанавливается вместе с ним. Проверьте версии в терминале:
node -v
npm -vЕсли первая команда показывает версию ниже 22, установите свежую LTS-версию с сайта nodejs.org.
Почему Fastify быстрый
Скорость Fastify складывается из нескольких решений:
| Решение | Что даёт |
|---|---|
| Быстрый поиск маршрута | Адрес сравнивается не со всеми маршрутами по очереди, а по дереву |
| Схемы ответа | JSON собирается по заранее известной структуре, а не через общий JSON.stringify |
| Логгер Pino | Запись логов почти не тормозит сервер |
| Плагины | Код загружается один раз при старте, а не при каждом запросе |
Для небольшого блога разница в скорости незаметна. Важнее, что те же решения делают код аккуратнее: схемы проверяют входящие данные, а плагины разделяют приложение на независимые части.
Fastify и Express
Если вы знакомы с Express, многое покажется знакомым: маршруты тоже объявляются через app.get() и app.post(). Главные отличия:
- обработчик может просто вернуть объект — Fastify сам отправит его как JSON;
- асинхронные обработчики (
async) поддерживаются без дополнительных обёрток; - проверка данных по схеме встроена во фреймворк;
- вместо middleware используются плагины и хуки.
Сквозной пример
Через весь курс строится JSON API для блога: статьи и комментарии к ним. Клиент — браузер, мобильное приложение или другой сервер — отправляет запросы, а API отвечает данными в формате JSON:
GET /posts список статей
GET /posts/:id одна статья
POST /posts новая статья
GET /posts/:id/comments комментарии к статьеСначала статьи хранятся в массиве, позже — в базе SQLite.
Частая ошибка
Многие примеры в интернете написаны для Fastify 3 или 4 и для CommonJS (require). Часть из них в Fastify 5 не работает: например, сокращённые схемы без type: 'object' больше не принимаются. Проверяйте версию в примерах и в package.json.