.
├── api/ # Контракты API
│ └── openapi/ # Спецификации OpenAPI
│ ├── generate_dto.sh # Скрипт генерации DTO
│ ├── paths/ # Определения эндпоинтов
│ ├── schemas/ # Схемы данных
│ └── spec.yaml # Основная спецификация API
│
├── cmd/ # Точки входа
│ └── main.go # Главный вход сервиса
│
├── config/ # Управление конфигурацией
│ ├── config.go # Структура конфигурации
│ ├── config.yaml # Конфигурация
│ └── loader.go # Загрузчик конфигурации
│
├── internal/ # Внутренняя логика приложения
│ ├── app/ # Сборка приложения
│ │
│ ├── domain/ # Ядро бизнес-логики
│ │ ├── models/ # Доменные сущности
│ │ ├── ports/ # Определения интерфейсов
│ │ │ ├── http/ # Контракты HTTP (server & handlers)
│ │ │ ├── repository # Контракты хранилищ данных
│ │ │ └── service/ # Контракты сервисов
│ │ ├── rules/ # Бизнес-правила
│ │ └── service/ # Реализации доменных сервисов
│ │
│ ├── infrastructure/ # Реализации инфраструктуры
│ │ ├── http/ # HTTP реализация
│ │ │ ├── middleware # Промежуточные слои
│ │ │ ├── router/ # Адаптеры роутеров
│ │ │ └── server/ # Реализация сервера
│ │ └── repository/ # Реализация хранилищ данных
│ │
│ └── interfaces/ # Внешние интерфейсы
│ └── http/ # HTTP интерфейс
│ ├── dto/ # Объекты передачи данных
│ └── handlers/ # Обработчики запросов
│
└── pkg/ # Вспомогательные утилиты
└── testutils/ # Утилиты для тестирования
├── mocks/ # Мок-объекты
└── openapi/ # Утилиты для тестов OpenAPI
-
Domain слой:
- Содержит чистую бизнес-логику.
- Включает модели, правила и интерфейсы.
- Не зависит от внешних слоев.
-
Infrastructure слой:
- Реализует технические детали.
- Адаптеры для баз данных.
- Реализация внутренней инфрастуктуры.
- Зависит только от
domain.
-
Interfaces слой:
- Точки входа (HTTP handlers).
- Преобразует внешние запросы к доменным моделям.
- Зависит только от
domain.
-
App слой:
- Используется для сборки DI-контейнера.
- Зависит от
domain,infrastructure,interfaces.
Как сохранить гибкость API и не нарушить чистоту архитектуры?
./api/openapi
Документация API
Описание DTO
./internal/interfaces/http/dto
Только генерируемые DTO (by openapi)
Так как API прописывается в самом начале разработки, то DTO объекты будут определены однозначно. Используются они только в слое interface. Следовательно, все изменения будут ограничены реализацией handlers.
Попытка реализовать микросервис по заданным правилам начата 21.06.2025.