Ответ
В 'Чистой архитектуре' API описывается и реализуется в слое Адаптеров Интерфейсов (Interface Adapters). Это внешний слой, который преобразует данные из формата, удобного для внешнего мира (например, HTTP JSON), в формат, удобный для ядра вашего приложения (Use Cases), и обратно.
Где это находится в проекте:
Обычно это директории internal/delivery
, internal/controller
или internal/interfaces
.
/my-project
├── cmd/app/main.go // Точка входа
└── internal/
├── domain/ // Сущности и основная бизнес-логика
├── usecase/ // Сценарии использования (прикладная бизнес-логика)
└── delivery/ // Слой адаптеров (API)
├── http/ // Адаптеры для HTTP
│ ├── handler.go // Обработчики HTTP-запросов (хендлеры)
│ └── router.go // Регистрация роутов
└── grpc/ // Адаптеры для gRPC
└── service.go // Реализация gRPC-сервисов
В каком виде описывается API:
- HTTP-хендлеры: Функции, которые принимают
http.Request
, вызывают соответствующийusecase
и возвращаютhttp.Response
. - gRPC-сервисы: Реализации сервисов, сгенерированных из
.proto
файлов. - Спецификации OpenAPI/Swagger: Файлы в формате
YAML
илиJSON
, которые формально описывают эндпоинты, запросы и ответы. Часто размещаются рядом с HTTP-хендлерами.
Ключевой принцип: Этот слой не должен содержать бизнес-логики. Его единственная задача — адаптация данных и вызов следующего слоя (Use Cases). Это защищает бизнес-логику от изменений в способе доставки (например, при переходе с REST на gRPC).