Ответ
В 'Чистой архитектуре' 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).