Определение Небольшое введение в gRPC 5 (Remote Procedure Calls) — это система удаленного вызова процедур (RPC) с открытым исходным кодом, первоначально разработанная в Google в 2015 году. В качестве транспорта используется HTTP/2, в качестве языка описания интерфейса — Protocol Buffers
Файл с расширением .proto Пример контракта 7 1. Описывается имя пакета 2. Может быть описан сервис с методами 3. Описываются типизированные модели запросов и ответов 4. Protocol Buffer Compiler
Проблема 10 • Тратим много времени на описание gRPC клиентов (рутинная работа) • Нет единого стиля, подхода работы с gRPC • Регулярные изменения контрактов
Как решать проблему? 16 • Посмотреть на решения, используемые в других командах • При условии, если что-то подойдет, внедрить к нам • Или написать свое, которое могла бы использовать любая команда Ozon
Какие данные нужны для генерации клиента? Данные 22 1. Сервисы, методы, сообщения (grpcio-tools файлы) 2. Знать путь до файла, для составления импортов
• Принимает путь до контракта • Принимает версию (ветвь в git) • Скачивает контракт со всеми зависимостями • Все раскладывает в правильной структуре, в соответствии с импортами в контракте Платформа 23 Mimir Инструмент получения контрактов
Запрос по рефлексии на gRPC сервер Получение контрактов 24 gRPC вызов на сервер по контракту reflection.proto, который позволяет понять, какие вообще сервисы, RPC-вызовы и сообщения есть у сервиса Рефлексия —
grpcio-tools Генерация python-кода из контрактов 25 С помощью компилятора получаем python-код из полученных контрактов Получаем правильную структуру сгенерированных файлов
27 Jinja — это быстрый, выразительный и расширяемый шаблонизатор. Специальные заполнители в шаблоне позволяют писать код, аналогичный синтаксису Python. Затем шаблону передаются данные для визуализации окончательного документа Передача данных в шаблонизатор