Ответ
В gRPC (Protocol Buffers) можно пометить поле как deprecated или зарезервированное, но явного запрета на использование нет. Однако можно добавить комментарий и валидацию на стороне сервера:
message Request {
string normal_field = 1;
string internal_only_field = 2 [deprecated = true]; // Клиенты не должны использовать это поле
}
На сервере:
func (s *Server) SomeMethod(ctx context.Context, req *pb.Request) (*pb.Response, error) {
if req.InternalOnlyField != "" {
return nil, status.Error(codes.InvalidArgument, "internal_only_field is for internal use only")
}
// ...
}
Также можно использовать резервирование номеров полей:
reserved 2; // internal_only_field
reserved "internal_only_field";
Это предотвратит случайное использование поля в новых версиях.