Зарегистрируйтесь, чтобы продолжить обучение

Подготовка проекта JS: REST API (Fastify)

На протяжении всего курса, мы будем не только разбираться с концепцией REST API, но и создавать это самое API в качестве упражнений, самостоятельной работы и примеров в уроках. Для упрощения этого процесса, мы подготовили репозиторий, где можно найти готовое API по мотивам курса.

В этом уроке разберем, как такой репозиторий создать и настроить с нуля. Для простоты, весь код пишется на JavaScript, но при желании его можно перевести в TypeScript.

Начиная с этого урока и дальше, все разбираемые примеры кода, желательно повторять в качестве закрепления материала. Поехали.

Настройка Fastify

Создайте репозиторий на Github с названием hexlet-fastify-api-example. Клонируйте его к себе на компьютер и перейдите в директорию репозитория. Выполните внутри команды, которые установят и настроят Fastify:

# cd hexlet-fastify-api-example 

# Ставим генератор проекта
npm install fastify-cli
# Ставим полезные пакеты для удобства позже
npm install node-jq lodash

# Генерируем новый Fastify проект
npx fastify generate . --integrate --esm

# Примерный вывод
generated .gitignore
generated app.js
generated README.md
generated package.json
generated routes/root.js
generated routes/README.md
generated plugins/README.md
generated plugins/sensible.js
generated plugins/support.js
generated test/helper.js
generated routes/example/index.js
generated test/plugins/support.test.js
generated test/routes/example.test.js
generated test/routes/root.test.js
--> reading package.json in .
edited package.json, saving
saved package.json
--> project js-fastify-rest-api-example generated successfully
run 'npm install' to install the dependencies
run 'npm start' to start the application
run 'npm run dev' to start the application with pino-pretty pretty logging (not suitable for production)
run 'npm test' to execute the unit tests

Генератор подготовил необходимую структуру директорий, добавил немного примеров и даже тестов для них.

  • routes: содержит обработчики маршрутов, именно здесь мы будем создавать код нашего API сервиса.
  • plugins: здесь находится конфигурация плагинов и мидлвар Fastify.
  • test: директория с тестами.
  • app: входной файл, который запускается при старте приложения.

Проверим работу проекта. Убедимся что работают тесты, запускается сервер и отдает правильный ответ.

Тесты: npm run test

npm run test
> js-fastify-rest-api-example@1.0.0 test
> node --test test/**/*.test.js

✔ support works standalone (6.464083ms)
✔ example is loaded (75.188625ms)
✔ default root route (75.44475ms)

Если видим галочки, значит все прошло успешно. Можно запускать сервер.

Сервер: npm run dev

# Запуск в режиме разработки
npm run dev

> js-fastify-rest-api-example@1.0.0 dev
> fastify start -w -l info -P app.js

[13:07:06.679] INFO (33075): Server listening at http://[::1]:3000
[13:07:06.679] INFO (33075): Server listening at http://127.0.0.1:3000

# Сюда же будут выводиться логи запросов, которые помогают в отладке

По умолчанию сервер стартует на порту 3000. Для проверки его работоспособности, выполним в другом терминале (вкладке) запрос к серверу:

curl localhost:3000
{"root":true}

Вывод соответствует тому, как реализован обработчик:

export default async function (fastify, opts) {
  fastify.get('/', async function (request, reply) {
    return { root: false }
  })
}

В режиме разработки сервер автоматически следит за изменениями файлов и перезапускается. Поэтому его не нужно останавливать и запускать заново. Добавьте для примера обработчик адреса /about:

fastify.get('/about', async function (request, reply) {
  return 'Hexlet project'
})

И проверьте его работу:

curl localhost:3000/about
Hexlet project

Для полноценной работы нашего приложения, нам понадобятся дополнительные пакеты и настройки. Все это будет делаться по мере продвижения по курсу.


Самостоятельная работа

  1. Выполните все шаги из урока на своем компьютере. Подготовьте приложение с помощью fastify-cli
  2. Проверьте работу приложения и запушьте изменения в подготовленный проект hexlet-fastify-api-example

В следующих уроках все изменения выполняйте в этом проекте.

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff