Skip to content

Latest commit

 

History

60 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

js-fastify-rest-api-example

REST API на Fastify, собранный «по-взрослому»: схема API описана отдельно от кода, база через ORM, валидация по схеме.

Зачем это нужно

Пример того, как выглядит API-проект, когда он перерастает один файл с маршрутами. Отличия от учебной заглушки видны сразу:

  • Контракт первичен. API описан на TypeSpec в main.tsp, из него генерируется OpenAPI, а из OpenAPI — типы для кода. Документация не расходится с реализацией, потому что порождена из одного источника.
  • Одна спека проверяет код дважды. Из OpenAPI генерируются типы обработчиков и zod-схемы (hey-api): первое проверяет tsc статически, второе — валидаторы в рантайме. Сами маршруты по этой же спеке регистрирует fastify-openapi-glue, поэтому таблица маршрутов и проверка запросов тоже не пишутся руками. make generate-check в CI не даёт сгенерированному разойтись со спекой.
  • База через Drizzle: схема в db/schema.ts, миграции генерируются по ней.
  • Валидация входа отдельным слоем в validators/, а не внутри обработчика.

Запуск

make install
make dev
make test

Полезное:

make routes             # список маршрутов
make migration-generate # миграция по изменённой схеме
make generate-types     # OpenAPI и типы из TypeSpec
make generate-check     # проверить, что сгенерированное закоммичено
make mock               # поднять мок-сервер по OpenAPI

Hexlet Ltd. logo

This repository is created and maintained by the team and the community of Hexlet, an educational project. Read more about Hexlet.

See most active contributors on hexlet-friends.

About

No description, website, or topics provided.

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages