Ответ
Файлы с описанием контрактов 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
файла.