День 1219. #ЧтоНовенького
Транскодинг JSON в gRPC для .NET
gRPC — это современный способ связи между приложениями. gRPC использует HTTP/2, потоковую передачу, двоичную сериализацию и контракты сообщений для создания высокопроизводительных сервисов реального времени. .NET поддерживает создание приложений gRPC.
Однако, как и при выборе большинства технологий, при выборе gRPC по сравнению с альтернативой, такой как REST + JSON, есть компромиссы. К сильным сторонам gRPC относятся производительность и продуктивность разработчиков. Между тем, REST+JSON можно использовать везде, а его удобочитаемые сообщения JSON легко отлаживать.
Транскодинг JSON в gRPC — это расширение для ASP.NET Core, которое создаёт RESTful API для служб gRPC. После настройки транскодинг JSON позволяет вызывать методы gRPC со знакомыми HTTP концепциями:
- HTTP-глаголы
- Привязка параметров URL
- Запросы/ответы в JSON
Начало работы
1. Создайте службу gRPC. Вот здесь руководство.
2. Добавьте на сервер ссылку на пакет Microsoft.AspNetCore.Grpc.JsonTranscoding и зарегистрируйте его в коде запуска. Например:
services.AddGrpc().AddJsonTranscoding();
3. Добавьте аннотации файла .proto для привязки и маршрутов HTTP. Для этого сохраните себе файлы annotations.proto и http.proto в папку google/api вашего проекта и добавьте в ваш файл .proto строку
syntax = "proto3";
import "google/api/annotations.proto";
package greet;
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {
option (google.api.http) = {
get: "/v1/greeter/{name}"
};
}
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
Транскодинг JSON или gRPC-Web
Оба варианта позволяют вызывать службы gRPC из браузера. Различаются способы достижения этого:
- gRPC-Web позволяет браузерным приложениям вызывать службы gRPC из браузера с помощью клиента gRPC-Web и Protobuf. Он требует, чтобы приложение создавало клиент gRPC, и имеет преимущество в отправке небольших и быстрых сообщений Protobuf.
- Транскодинг JSON позволяет приложениям вызывать службы gRPC как RESTful API с JSON. Приложению не нужно создавать клиент gRPC или знать что-либо о gRPC.
Реализация
Транскодинг JSON не является новой концепцией. grpc-gateway — это еще одна технология для создания RESTful JSON API из служб gRPC. Он использует те же аннотации .proto для сопоставления концепций HTTP со службами gRPC. Однако grpc-gateway использует генерацию кода для создания обратного прокси-сервера, который переводит вызовы RESTful в gRPC+Protobuf и отправляет их через HTTP/2 в службу gRPC. Преимущество этого подхода заключается в том, что служба gRPC не знает о RESTful API. Любой сервер gRPC может использовать grpc-gateway.
Транскодинг JSON выполняется внутри приложения ASP.NET Core. Он десериализует JSON в сообщения Protobuf, а затем напрямую вызывает службу gRPC. Это даёт преимущества для разработчиков приложений .NET:
- И службы gRPC, и сопоставленный RESTful JSON API выполняются из одного приложения ASP.NET Core.
- Транскодинг JSON десериализует сообщения JSON в Protobuf и напрямую вызывает службу gRPC. Выполнение этого в процессе даёт значительные преимущества в производительности по сравнению с новым gRPC-вызовом на другой сервер.
Что дальше
Транскодинг JSON в gRPC доступен в .NET 7 Превью 4. Это первый выпуск. Будущие версии .NET 7 будут сосредоточены на повышении производительности и поддержке OpenAPI.
Подробная информация доступна в документации. Также можно посмотреть пример приложения или видео с демонстрацией функционала.
Источник: devblogs.microsoft.com/dotnet/…r-dotnet