1 of 46

для преподавателя

  1. добавить описание преподавателя (= его можно сделать подробнее) - слайд 6
  2. добавила слайды под выводы и рефлексию в конце
  3. прописать основные тезисы - слайд 35
  4. добавить тему и дату следующего вебинара - слайд 38

2 of 46

C# ASP.NET Core разработчик

otus.ru

3 of 46

Проверить, идет ли запись

Меня хорошо видно

&& слышно?

4 of 46

Преподаватель

Родион Мостовой

Преподаватель ASP.NET Core

Об опыте:

10 лет разработки, из них 5 лет с использованием ASP.NET Core

Руководил разработкой в сервисе доставки продуктов “Доставка от Гудвина”

GitHub: https://github.com/rodion-m

Telegram: @rodion_m_tg

5 of 46

Активно участвуем и включаем камеры

Задаем вопрос голосом или в чат

Off-topic обсуждаем в Telegram

Вопросы в чате вижу, могу ответить не сразу

5

Правила вебинара

6 of 46

Пишем свой API: gRPC

7 of 46

М2: Разворачивание приложения в облаке

М4: Микросервисная архитектура

М6: Работа с API

М1: Введение в ASP.NET Core и WebApi

М3: Прокачиваем проект

М5: Frontend-технологии

М7: Проектная работа

1.7 Юнит тестирование

1.6 Middleware

1.5 Entity Framework Core

1.4 DI контейнеры

1.3 Конфигурирование � приложения

1.2 Знакомимся с ASP.NET Core

1.1 Вводное занятие в курс

3.8 Ретро и планирование

3.7 Тестирование

3.6 Кеширование

3.5 Способы валидации данных

3.4 Логгирование

3.3 Identity Server 4

3.2 Разграничение прав доступа

3.1 Модель авториз./ аутентиф.

5.8 Ретро и планирование

5.7 Как подружить � React.JS с Asp.net Core

5.6 React хуки и библиотеки

5.5 React Router & Redux

5.4 React

5.3 Введение в React

5.2 Современный фронтенд

5.1 Blazor

7.2 Защита проектных работ

7.1 Консультация по проектам, дз

2.1 Способы размещения � приложения, Kestrel, IIS

2.2 Введение в docker, обзор � docker compose

2.3 Kubernetes

2.4 Разворачивание ASP.NET � Core приложения в облаке

2.5 CI/CD

2.6 Ретро и планирование

4.1 Монолиты и микросервисы

4.2 Работа с данными

4.3 Как превратить монолит в � микросервисы

4.4 Работа с данными: Архитектура

4.5 Работа с данными: рел. БД

4.6 Брокеры сообщений и � работа с RabbitMQ

4.7 Создание шаблона

4.8 Ретро и планирование

6.1 Пишем свой API: OData

6.2 Пишем свой API: GraphQL

6.3 Пишем свой API: gRPC

6.4 Пишем свой API: � SignalR Core

6.5 Как защититься от � хакерских атак

6.6 Рефакторинг старого � кода

8 of 46

Цели вебинара

После занятия вы сможете:

1.

Определить что такое технология gRPC

2.

Определить особенности gRPC

и его применение в ASP.NET Core приложениях

3.

Создавать API сервисы на базе gRPC

9 of 46

План полета

Что такое gRPC

Сравнение с REST и WCF

Protocol Buffers

Особенности gRPC

и работа с браузером

Рефлексия

10 of 46

Какая главная особенность у контроллеров?

Неожиданный вопрос

11 of 46

Какая главная особенность у контроллеров?

Они должны быть тонкими (содержать минимум кода).

А почему?

Неожиданный вопрос

12 of 46

Какая главная особенность у контроллеров?

Они должны быть тонкими (содержать минимум кода).

А почему?

Полезный бонус: Ответ узнаем на этом занятии.

Неожиданный вопрос

13 of 46

Различные архитектурные стили API

14 of 46

Четыре основных стиля API

в порядке их появления

15 of 46

gRPC

16 of 46

gRPC

gRPC - RPC фреймворк, не зависящий от платформ и языка использования

17 of 46

Что такое gRPC

  • Google Remote Procedure Calls
  • Высоконагруженный фреймворк для удаленного вызова процедур с открытым исходным кодом
  • Использует подход Contract-first и protobuf для описания интерфейса
  • Multiplatform
  • Применяется прежде всего в микросервисной архитектуре

18 of 46

gRPC в .NET

gRPC for C# (Grpc.Core)

https://github.com/grpc/grpc/tree/master/src/csharp

  • Обёртка вокруг unmanaged библиотеки
  • Максимальная функциональность / минимальные удобства
    • Все настройки на строках
    • Прелести unmanaged кода
  • Используем местами не в production (эмуляторы/моки/тесты)

gRPC for .NET

https://github.com/grpc/grpc-dotnet

  • Managed
  • Интегрируется в ASP.NET Core
  • Настройки строго типизированы

19 of 46

Примеры проектов на gRPC для .NET

Множество готовых примеров доступно по ссылке, в т. ч. примеры со стримингом

https://github.com/grpc/grpc-dotnet/tree/master/examples

20 of 46

LIVE

21 of 46

gRPC

Преимущества gRPC:

  • Работает поверх HTTP/2
  • Двухсторонний стриминг данных
  • Плагинная система авторизации
  • Трассировка
  • Балансировщик нагрузки
  • Отличный тулинг для поддержания разных ЯП

22 of 46

Кроссплатформенность и кодогенерация

  • Клиент и сервер в части сериализации/десериализации и транспорта генерируются
  • Поддержка C#, Go, Java, Python, Kotlin, PHP, Ruby
  • Никаких проблем с регистром букв, опечатками, форматом (дат, чисел и т.д.)
  • Код обоих сервисов синхронизирован с контрактом – гарантируется компилятором

23 of 46

Зачем нам нужен gRPC

  • RPC-фреймворк WCF не попал в Net Core
  • REST имеет ряд особенностей и недостатков

24 of 46

gRPC vs WCF

gRPC

  • Официальная поддержка MS
  • Contract-first (proto-файлы)
  • Кроссплатформенность

WCF

  • Устаревающая технология
  • Code-first (интерфейс сервиса -> wsdl)
  • Слабая возможность межплатформенного взаимодействия

25 of 46

gRPC vs REST

gRPC

  • Фреймворк удаленного вызова процедур
  • Protocol Buffers (Автогенерация клиента и сервера)
  • HTTP 2 (Streaming)
  • Ограниченные возможности по работе напрямую с браузером
  • Ограниченный набор инструментов тестирования

REST

  • Управление ресурсами
  • OpenAPI (Swagger)
  • Работа в формате запрос-ответ
  • Хорошее взаимодействие с браузером
  • Большой набор инструментов, включая отладку из браузера

26 of 46

gRPC vs REST

А что не так с REST?

  • Контракты расползаются даже со Swagger (потому что не Contract First)
  • Много бойлерплейт кода (сериализация, обработка ошибок, Dto)
  • Перформанс – не очень
  • По сети летает жирный JSON или XML

27 of 46

gRPC vs REST

Что предлагает gRPC?

  • Contract First – контракты лежат в репозитории (можно Code First, если весь бэк на .NET)
  • Различные платформы и языки хорошо дружат
  • Строгая типизация
  • Автогенерация клиента и сервера
    • Контракты не разваливаются, меньше кода поддерживать
    • Встроенная "из коробки", эффективный бинарный формат
  • Лаконичная обработка ошибок
  • Удобный стриминг в оба конца (в т.ч. дуплекс)

28 of 46

Что нам дает HTTP/2

Основные цели разработки HTTP/2:

  • Возможность выбирать протокол, например, HTTP/1.1, HTTP/2 или другой
  • Высокая совместимость с HTTP/1.1 — методы, коды статусов, поля хедеров
  • Улучшение скорости загрузки благодаря сжатию хедеров запросов, бинарному протоколу, отправке данных по инициативе сервера, блокировке пакетов и запросу многократной передачи данных

29 of 46

Отличие между протоколами HTTP 1.1 и HTTP/2

30 of 46

Protocol Buffers (protobuf)

Protocol Buffers — протокол сериализации (передачи) структурированных данных, предложенный Google как эффективная бинарная альтернатива текстовому формату XML

31 of 46

Protocol Buffers (protobuf)

Отладка protobuf: https://www.protobufpal.com/

32 of 46

Protobuf контракты

  • Строгая типизация
  • Строго определённая последовательность полей
  • Поддержка nullable
  • Поддержка коллекций, enum-ов
  • Поддержка дефолтных значений
  • Вложенные типы
  • До 10 раз компактнее, до 100 раз быстрее JSON © Google
    • По сути: кратно компактнее, в разы быстрее

33 of 46

Пример protobuf-контракты

Доки: https://developers.google.com/protocol-buffers/docs/proto3

34 of 46

gRPC в .NET

gRPC for C# (Grpc.Core)

https://github.com/grpc/grpc/tree/master/src/csharp

  • Обёртка вокруг unmanaged библиотеки
  • Максимальная функциональность / минимальные удобства
    • Все настройки на строках
    • Прелести unmanaged кода
  • Используем местами не в production (эмуляторы/моки/тесты)

gRPC for .NET

https://github.com/grpc/grpc-dotnet

  • Managed
  • Интегрируется в ASP.NET Core
  • Настройки строго типизированы

35 of 46

gRPC for .NET

  • Транспорт по HTTP2 – внутри gRPC-клиента сидит System.Net.Http.HttpClient, поэтому многие настройки в привычных полях и классах
    • Авторизация
    • Keep Alive
    • Таймауты
  • Многие серверные gRPC настройки настраиваются в Kestrel стандартным способом

36 of 46

Виды вызовов

Виды вызывод gRPC:

  • Unary call
  • Streaming
    • Клиентский
    • Cерверный
    • Дуплекс

37 of 46

Примеры проектов на gRPC

Множество готовых примеров доступно по ссылке, в т. ч. примеры со стримингом

https://github.com/grpc/grpc-dotnet/tree/master/examples

38 of 46

Инструментарий

BloomRPC / Insomnia / Postman

  • Как Postman/Fiddler для gRPC сервисов
  • Учитывая специфику фреймворка – достаточно загрузить .proto файл и указать эндпоинт, чтобы отправить запрос

39 of 46

Инструментарий

https://learn.microsoft.com/en-us/aspnet/core/grpc/json-transcoding?view=aspnetcore-7.0

https://learn.microsoft.com/en-us/aspnet/core/grpc/json-transcoding-openapi?view=aspnetcore-7.0

40 of 46

Список материалов для изучения

41 of 46

Выводы и рефлексия

42 of 46

Тезисы

1.

2.

3.

43 of 46

Цели вебинара

Проверка достижения целей

1.

Определили что такое технология gRPC

2.

Определили особенности gRPC

и его применение в ASP.NET Core приложениях

3.

Рассмотрели как создавать API сервисы на базе gRPC

44 of 46

Рефлексия

По какому вопросу захотелось глубже изучить информацию?

Понимаете ли вы, как применять на практике то, что узнали на вебинаре. Если да, то как?

45 of 46

Заполните, пожалуйста, опрос

46 of 46

Спасибо за внимание!

Приходите на следующие вебинары