0Pricing
gRPC & High Performance APIs · Урок

Генерация кода gRPC

Пошагово разберите процесс компиляции определений Protobuf в заготовки для различных языков программирования.

«Генерация кода gRPC» — бесплатный урок gRPC & High Performance APIs на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения gRPC & High Performance APIs, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс gRPC & High Performance APIs содержит 4 уроков всего.

Intro to Code Generation

С возвращением! На прошлом уроке мы научились определять наши структуры данных и сервисы с помощью Protocol Buffers (Protobuf).

Теперь возникает вопрос: как использовать эти определения в нашем любимом языке программирования? Вот тут-то на помощь и приходит генерация кода!

Это процесс автоматического создания исходного кода на основе схемы, который избавляет вас от написания повторяющегося шаблонного кода.

Why gRPC Needs Stubs

gRPC в значительной степени опирается на сгенерированный код, который часто называют заглушками (stubs) или прокси (proxies). Эти заглушки выступают в роли связующего звена между логикой вашего приложения и базовыми механизмами взаимодействия gRPC.

  • Клиентские заглушки: предоставляют методы, которые дублируют сервис, определенный в вашем файле .proto. Когда вы вызываете метод клиентской заглушки, он упаковывает данные, отправляет их по сети и распаковывает полученный ответ.
  • Серверные заглушки: определяют интерфейс, которому должна соответствовать реализация вашего сервера. Они отвечают за получение запросов, передачу их в ваш код и отправку ответов обратно.

Meet the Protobuf Compiler

Магия, стоящая за созданием этих заглушек, заключается в компиляторе Protobuf, более известном как protoc.

protoc — это инструмент командной строки, который считывает ваши .proto-файлы и генерирует исходный код на различных языках программирования на основе указанных вами плагинов.

Это важнейший компонент любого проекта gRPC, поскольку он обеспечивает строгую типизацию и согласованные интерфейсы взаимодействия между различными сервисами и языками.

Basic `protoc` Command

Общий синтаксис использования protoc выглядит примерно так:

protoc --<ЯЗЫК>_out=. --grpc_out=. my_service.proto
  • --<ЯЗЫК>_out=.: этот флаг указывает protoc генерировать классы сообщений Protobuf для конкретного языка (например, --java_out, --python_out) и определяет, куда их поместить (. означает текущую директорию).
  • --grpc_out=.: этот флаг, часто используемый со специальным плагином gRPC, генерирует интерфейс службы gRPC и классы заглушек (stub).
  • my_service.proto: путь к вашему файлу определения Protobuf.

Installing `protoc` (Conceptual)

Перед тем как генерировать код, необходимо установить protoc. Процесс установки зависит от вашей операционной системы:

  • Загрузка бинарных файлов: Вы можете скачать предварительно скомпилированные бинарные файлы с официальной страницы релизов Protobuf на GitHub.
  • Менеджеры пакетов: В Linux можно использовать apt-get install protobuf-compiler. В macOS — brew install protobuf.
  • Сборка из исходного кода: Продвинутые пользователи могут скомпилировать его из исходного кода.

Убедитесь, что protoc добавлен в переменную PATH вашей системы.

Protobuf for Our Example

Давайте воспользуемся простым файлом greet.proto, чтобы продемонстрировать генерацию кода. Этот файл определяет сервис Greeter и соответствующие ему сообщения:

syntax = "proto3";

package greeter;

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

Это входные данные для нашего компилятора protoc.

Generating Java Stubs

Для генерации Java-кода для нашего файла greet.proto обычно используется следующая команда:

protoc \
  --plugin=protoc-gen-grpc-java=/path/to/grpc-java-plugin \
  --java_out=. \
  --grpc_out=. \
  greet.proto

Здесь флаг --plugin явно указывает protoc, где найти плагин gRPC для Java, который необходим для генерации интерфейсов сервисов gRPC.

Exploring Generated Files

После запуска protoc вы обнаружите новые файлы Java в указанном выходном каталоге. Для нашего примера greet.proto вы обычно увидите следующее:

  • GreeterGrpc.java: содержит абстрактный сервис GreeterImplBase и классы клиентских заглушек (например, GreeterBlockingStub, GreeterFutureStub).
  • Greet.java: класс-контейнер, содержащий сгенерированные классы сообщений Protobuf, такие как HelloRequest и HelloReply, а также их построители (builders) и методы доступа (accessors).

Эти файлы обрабатывают все детали сериализации, десериализации и сетевого взаимодействия.

The Role of Plugins

Важно понимать, что сам по себе protoc генерирует только базовые классы сообщений Protobuf.

Для создания специфичных для gRPC сервисных интерфейсов и заглушек (stubs) используются плагины. Например, для Java вам потребуется плагин protoc-gen-grpc-java.

Для каждого языка, поддерживаемого gRPC (Python, Go, C++, Node.js и т. д.), существует свой специфический плагин, который интегрируется с protoc для создания необходимого кода gRPC.

Quick Check: Code Generation

Какие из следующих утверждений о генерации кода gRPC верны?

Recap & Next Steps

Отличная работа! Вы изучили фундаментальный процесс генерации кода gRPC:

  • Мы поняли, почему заглушки (stubs) необходимы для взаимодействия по gRPC.
  • Мы познакомились с компилятором protoc — инструментом, который выполняет генерацию кода.
  • Мы узнали, как плагины расширяют возможности protoc для генерации gRPC-кода на разных языках программирования.
  • Мы разобрали пример генерации кода на Java из определения .proto.

Далее мы будем использовать этот сгенерированный код для реализации простого унарного gRPC-сервиса и клиента!

Часто задаваемые вопросы

Урок «Генерация кода gRPC» бесплатный?

Да — полный текст урока «Генерация кода gRPC» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс gRPC & High Performance APIs, подпишись на CoddyKit PRO. Курс gRPC & High Performance APIs содержит 4 уроков всего.

Чему я научусь в уроке «Генерация кода gRPC»?

Пошагово разберите процесс компиляции определений Protobuf в заготовки для различных языков программирования. Ты практикуешь gRPC & High Performance APIs с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать gRPC & High Performance APIs?

Предыдущий опыт не требуется. gRPC & High Performance APIs на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Генерация кода gRPC»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке gRPC & High Performance APIs?

Да. Каждый урок gRPC & High Performance APIs включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Определение схемы Protobuf
  2. Генерация кода gRPC
  3. Простой однонаправленный сервис gRPC
  4. Потоковые RPC: серверные, клиентские и двунаправленные
← Назад к gRPC & High Performance APIs