На протяжении всего курса, мы будем не только разбираться с концепцией 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
Для полноценной работы нашего приложения, нам понадобятся дополнительные пакеты и настройки. Все это будет делаться по мере продвижения по курсу.
Самостоятельная работа
- Выполните все шаги из урока на своем компьютере. Подготовьте приложение с помощью fastify-cli
- Проверьте работу приложения и запушьте изменения в подготовленный проект hexlet-fastify-api-example
В следующих уроках все изменения выполняйте в этом проекте.
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.