Ответ
Файлы с описанием контрактов Protocol Buffers (.proto) являются ключевой частью архитектуры, основанной на gRPC, и их хранение подчиняется строгим правилам.
Основные подходы к хранению:
-
В репозитории сервиса: Самый простой подход.
.protoфайлы хранятся в выделенной директории, напримерproto/илиapi/, внутри репозитория самого сервиса. Это хорошо работает для простых проектов или когда контракт не используется другими командами.my-service/ ├── api/ │ └── my_service_v1.proto ├── internal/ ├── go.mod └── main.go -
В отдельном репозитории: «Золотой стандарт» для микросервисной архитектуры. Создается отдельный Git-репозиторий, который служит "единым источником правды" для API-контрактов всех сервисов. Другие проекты подключают его как зависимость (например, через Git submodules или просто клонируя на этапе CI/CD).
Важный аспект — сгенерированный код:
С помощью компилятора protoc и плагинов (protoc-gen-go, protoc-gen-go-grpc) на основе .proto файлов генерируется Go-код (*.pb.go).
Лучшая практика — не хранить сгенерированный код в системе контроля версий (Git). Его следует генерировать автоматически:
- Локально разработчиком с помощью
go generate. - На этапе сборки в CI/CD пайплайне.
Это гарантирует, что код всегда соответствует актуальной версии .proto файла.