SlideShare a Scribd company logo
www.xedotnet.org
Andrea Dottor
@dottor
Alla scoperta di gRPC
Codice: https://github.com/andreadottor/XE.Dottor.gRPC
SOAP
• PRO
• WSDL (permette la
generazione di
proxy)
• Standard W3C
• CONTRO
• Serializzazione XML
• Formato messaggi
troppo complesso
• Non facilmente
utilizzabile da
browser
WCF
• PRO
• Altamente
configurabile
• CONTRO
• Altamente
configurabile
• Non sempre
interoperabile
http API
• PRO
• Interoperabile
• Utilizzabile
facilmente dal
browser
• Aderente al
protocollo HTTP
• CONTRO
• Non è possibile far
generare un proxy *
• Lo sviluppatore deve
documentare DTO e
chiamate
• Non è uno Standard
Da dove arriviamo
SOAP
• PRO
• WSDL (permette la
generazione di
proxy)
• Standard W3C
• CONTRO
• Serializzazione XML
• Formato messaggi
troppo complesso
• Non facilmente
utilizzabile da
browser
WCF
• PRO
• Altamente
configurabile
• CONTRO
• Altamente
configurabile
• Non sempre
interoperabile
http API
• PRO
• Interoperabile
• Utilizzabile
facilmente dal
browser
• Aderente al
protocollo HTTP
• CONTRO
• Non è possibile far
generare un proxy *
• Lo sviluppatore deve
documentare DTO e
chiamate
• Non è uno Standard
Da dove arriviamo
SOAP
• PRO
• WSDL (permette la
generazione di
proxy)
• Standard W3C
• CONTRO
• Serializzazione XML
• Formato messaggi
troppo complesso
• Non facilmente
utilizzabile da
browser
WCF
• PRO
• Altamente
configurabile
• CONTRO
• Altamente
configurabile
• Non sempre
interoperabile
http API
• PRO
• Interoperabile
• Utilizzabile
facilmente dal
browser
• Aderente al
protocollo HTTP
• CONTRO
• Non è possibile far
generare un proxy *
• Lo sviluppatore deve
documentare DTO e
chiamate
• Non è uno Standard
Da dove arriviamo
Possiamo ancora migliorare?
…un po' di storia
In distributed computing a remote procedure call (RPC)
is when a computer program causes a procedure
(subroutine) to execute in another address space
(commonly on another computer on a shared network),
which is coded as if it were a normal (local)
procedure call, without the programmer explicitly
coding the details for the remote interaction.
That is, the programmer writes essentially the same
code whether the subroutine is local to the executing
program, or remote
[fonte: https://en.wikipedia.org/wiki/Remote_procedure_call]
RPC
RPC non è una cosa nuova!
• Response–request protocols
date to early distributed
computing in the late 1960s,
theoretical proposals of remote
procedure calls as the model of
network operations date to the
1970s, and practical
implementations date to the
early 1980s. Bruce Jay Nelson is
generally credited with coining
the term "remote procedure call"
in 1981
[fonte: https://en.wikipedia.org/wiki/Remote_procedure_call]
RPC
A high performance, open-source universal RPC framework
gRPC is a modern open source high performance RPC
framework that can run in any environment. It can efficiently
connect services in and across data centers with pluggable
support for load balancing, tracing, health checking and
authentication. It is also applicable in last mile of distributed
computing to connect devices, mobile applications and
browsers to backend services.
https://grpc.io/
Cos'è gRPC
gRPC è l'evoluzione di Stubby, una tecnologia sviluppata
da Google per far comunicare i suoi microservizi (anche tra
data-center differenti)
• "For the past 15 years, Google has solved these problems
internally with Stubby, an RPC framework that consists of a
core RPC layer that can handle internet-scale of tens of
billions of requests per second (yes, billions!). Now, this
technology is available for anyone as part of the open-
source project called gRPC. It’s intended to provide the
same scalability, performance and functionality that we
enjoy at Google to the community at large."
[fonte: https://medium.com/@nakabonne/why-was-grpc-born-7e65bbca9633]
Progetto ora gestito da Cloud Native Computing Foundation
Un po' di storia di gRPC
high performance
Perché?
Uso di HTTP/2 per la connessione
Vantaggi:
• binario (invece che testuale)
• utilizzo di una singola connessione tra client e server e
abilitazione del multiplexing per il download parallelo delle
risorse
• compressione degli header HTTP
• stessa semantica HTML di HTTP 1.1
[Test performance HTTP/1.1 vs HTTP/2: http://www.http2demo.io ]
HTTP/2 transport
Uso di Protocol Buffers per la definizione dei servizi e come
formato di serializzazione dei dati
• "Protocol buffers are a language-neutral, platform-
neutral extensible mechanism for serializing structured
data"
Sviluppato da Google https://developers.google.com/protocol-buffers/
Specifiche del linguaggio: https://developers.google.com/protocol-buffers/docs/proto
PRO:
• Serializzazione dei dati in formato binario
• Da 3 a 10 volte più piccolo di un XML
• Da 20 a 100 volte più veloce di un serializzatore o parser XML
Protocol Buffers
Protocol Buffers - proto file
Permette di definire:
• metodi esposti dai
servizi gRPC
• struttura dei
messaggi utilizzati
nei servizi
• Specifying Field Rules
• singular -> valore di default quando non viene
specificato nulla
• repeated
• Scalar Value Types:
• double, float, int32, int64, *int64, uint32, uint64,
sint32, sint64, fixed32, fixed64, sfixed32, sfixed64, bool,
string, bytes
• In proto3 non sono ammessi campi opzionali
• I null nei Value Types vanno gestiti manualmente
es: Google.Protobuf.WellKnownTypes
Protocol Buffers - Language Guide
any environment
Perché?
Language Platform Compiler
C/C++ Linux/Mac
GCC 4.8+
Clang 3.3+
C/C++ Windows 7+ Visual Studio 2015+
C# Linux/Mac .NET Core, Mono 4+
C# Windows 7+ .NET Core, .NET 4.5+
Dart Windows/Linux/Mac Dart 2.0+
Go Windows/Linux/Mac Go 1.6+
Java Windows/Linux/Mac JDK 8 recommended. Gingerbread+ for Android
Node.js Windows/Linux/Mac Node v4+
Objective-C Mac OS X 10.11+/iOS 7.0+ Xcode 7.2+
PHP (Beta) Linux/Mac PHP 5.5+ and PHP 7.0+
Python Windows/Linux/Mac Python 2.7 and Python 3.4+
Ruby Windows/Linux/Mac Ruby 2.3+
Code Generation
• Il package NuGet Grpc.Tools contiene il plugin protoc e
protobuf in C# utile a generare il codice (server e client).
A partire dalla versione 1.17 il package si integra con
MSBuild e permette di generare automaticamente il codice
C# a partire dai file .proto.
• La build build rigenera I seguenti files nella cartella
Greeter/obj/Debug/TARGET_FRAMEWORK:
• Greet.cs contiene tutto il codice di Procol Buffer utile a
popolare, serializzare e tutte le classi di request e response
• GreetGrpc.cs contiene il codice generato del client e/o
server, ed include:
• una classe astratta Greeter.GreeterBase da cui ereditare
per implementare il servizio Greeter
• una classe Greeter.GreeterClient utile per chiamare I
metodi esposti dal servizio remoto Greeter
C# Tooling support for .proto files
• Installare il package nuget Grpc.AspNetCore
• Abilitare gRPC con AddGrpc
• Aggiungere ogni servizio gRPC alla pipeline di routing con MapGrpcService
gRPC services with ASP.NET Core
DEMO
gRPC - Simple Service
• Unary: Quando il client invia una singola richiesta ed il
server risponde, come fosse una normale chiamata ad
una funzione
• Server streaming: Il client invia una richiesta al
server e ottiene uno stream per leggere in sequenza i
messaggi ritornati. Il client continua la lettura fino a
che non ci son più messaggi.
• Client streaming: Il client invia una sequenza di
messaggi al server utilizzando uno stream. Quando il
client completa l'invio, attende che il server ritorni una
risposta.
• BiDi streaming: Sia il server che il client inviano e
leggono i messaggi utilizzando due stream
indipendenti. L'ordine dei messaggi in ogni stream
viene mantenuto.
gRPC Service Definitions
DEMO
gRPC - Complex Service
• Con ASP.NET Core sono suppertati i seguenti metodi di
autenticazione:
• Azure Active Directory
• Client Certificate
• IdentityServer
• JWT Token
• OAuth 2.0
• OpenID Connect
• WS-Federation
• Decorare il servizio con l'attributo [Authorize]
• Valido sia a livello di classe che di singolo metodo
Authentication and authorization
gRPC HTTP API
Strong Typing Serialization
Streaming Request-Response
HTTP/2 HTTP/1.1
Protobuf JSON
"gRPC largely follows HTTP semantics over HTTP/2 but we
explicitly allow for full-duplex streaming. We diverge from
typical REST conventions as we use static paths for
performance reasons during call dispatch as parsing call
parameters from paths, query parameters and payload body
adds latency and complexity. We have also formalized a set
of errors that we believe are more directly applicable to API
use cases than the HTTP status codes."
gRPC vs HTTP APIs (REST)
In .NET core non sarà possible realizzare servizi
Windows Communication Foundation (WCF),
e non verrà fatto il porting nemmeno in .NET 5
• https://devblogs.microsoft.com/dotnet/supporting-the-
community-with-wf-and-wcf-oss-projects/
In .NET Core è stato portato solamente la possibilità di
consumare servizi WCF
• https://github.com/dotnet/wcf
gRPC vs WCF
I servizi gRPC non possono essere sfruttati completamente da browser **
gRPC ad oggi non verrà utilizzato da SignalR
Esistono scenari per cui SingalR è da preferire
• Broadcast real-time communication – gRPC supports real-time
communication via streaming, but the concept of broadcasting a
message out to registered connections doesn't exist. For example in a
chat room scenario where new chat messages should be sent to all
clients in the chat room, each gRPC call is required to individually
stream new chat messages to the client. SignalR is a useful framework
for this scenario. SignalR has the concept of persistent connections and
built-in support for broadcasting messages.
gRPC vs SignalR
gRPC-Web è una libreria JavaScript che permette l'interazione
con servizi gRPC
https://github.com/grpc/grpc-web
Richiede l'uso di un proxy che adatti le chiamate al servizio
https://www.envoyproxy.io/
gRPC-Web
Lightweight microservices where efficiency is critical.
Polyglot systems where multiple languages are required
for development.
Point-to-point real-time services that need to handle
streaming requests or responses.
Mobile clients which are communicating to a cloud server.
Quali sono i casi d'uso ideali?
Numeri?
Building Scalable Microservices using Kubernetes, gRPC, and Containers
https://www.youtube.com/watch?v=UOIJNygDNlE
Square
• gRPC — cross-platform open source RPC over HTTP/2
https://medium.com/square-corner-blog/grpc-cross-platform-open-source-rpc-over-http-2-
56c03b5a0173
Netflix
• Increasing Developer Productivity and Defeating the Thundering Herd with gRPC
https://www.cncf.io/netflix-case-study/
Spotify
• The Story of Why We Migrate to gRPC and How We Go About It
https://www.youtube.com/watch?v=fMq3IpPE3TU
Twilio
• Intro to gRPC: A Modern Toolkit for Microservice Communication
https://www.youtube.com/watch?v=RoXT_Rkg8LA
WePay
• Migrating APIs from REST to gRPC at WePay
https://wecode.wepay.com/posts/migrating-apis-from-rest-to-grpc-at-wepay
Docker
• Containerd: a daemon to control runC
https://blog.docker.com/2015/12/containerd-daemon-to-control-runc/
Cisco
• Getting Started With gRPC in Cisco IOS XR
https://github.com/CiscoDevNet/grpc-getting-started
…
Alcune aziende che hanno migrato i loro servizi
• gRPC and why it can save you development time
https://medium.com/red-crane/grpc-and-why-it-can-save-you-
development-time-436168fd0cbc
• ASP.NET Community Standup - June 4th, 2019 - gRPC!
https://www.youtube.com/watch?v=Pa6qtu1wIs8
• Calling gRPC Services With Server-side Blazor
https://chrissainty.com/calling-grpc-services-with-server-side-blazor/
• gRPC for ASP.NET Core 3.0
https://mustak.im/grpc-for-asp-net-core-3-0/
• From ’00s to ’20s: migrating from RESTful to gRPC
https://medium.com/@giefferre/from-00s-to-20s-migrating-from-
restful-to-grpc-5a5aa0cf27ba
• Envoy and gRPC-Web: a fresh new alternative to REST
https://blog.envoyproxy.io/envoy-and-grpc-web-a-fresh-new-
alternative-to-rest-6504ce7eb880
links
www.dottor.net
andrea@dottor.net
@dottor
Andrea Dottor
Microsoft MVP Developer Technologies
Contatti
Podcast ".NET in Pillole"
• Spotify:
https://open.spotify.com/show/7jyoG6BBmzvScNOqSpVvQQ
• Spreaker:
https://www.spreaker.com/show/net-in-pillole
• Apple podcast:
https://podcasts.apple.com/it/podcast/net-in-pillole/id1478648398
• Google podcast:
https://podcasts.google.com/?feed=aHR0cHM6Ly93d3cuc3ByZWFrZXIuY29tL3Nob3c
vMzY4NTM0NC9lcGlzb2Rlcy9mZWVk
• YouTube:
https://www.youtube.com/user/andreadottor/

More Related Content

What's hot

Openstack framework Iaas
Openstack framework IaasOpenstack framework Iaas
Openstack framework Iaas
Noureddine BOUYAHIAOUI
 
SR-IOV+KVM on Debian/Stable
SR-IOV+KVM on Debian/StableSR-IOV+KVM on Debian/Stable
SR-IOV+KVM on Debian/Stable
juet-y
 
Docker Introduction
Docker IntroductionDocker Introduction
Docker Introduction
Robert Reiz
 
Présentation Docker
Présentation DockerPrésentation Docker
Présentation Docker
Colin LEVERGER
 
Ceph Introduction 2017
Ceph Introduction 2017  Ceph Introduction 2017
Ceph Introduction 2017
Karan Singh
 
Room 3 - 1 - Nguyễn Xuân Trường Lâm - Zero touch on-premise storage infrastru...
Room 3 - 1 - Nguyễn Xuân Trường Lâm - Zero touch on-premise storage infrastru...Room 3 - 1 - Nguyễn Xuân Trường Lâm - Zero touch on-premise storage infrastru...
Room 3 - 1 - Nguyễn Xuân Trường Lâm - Zero touch on-premise storage infrastru...
Vietnam Open Infrastructure User Group
 
StarlingX - A Platform for the Distributed Edge | Ildiko Vancsa
StarlingX - A Platform for the Distributed Edge | Ildiko VancsaStarlingX - A Platform for the Distributed Edge | Ildiko Vancsa
StarlingX - A Platform for the Distributed Edge | Ildiko Vancsa
Vietnam Open Infrastructure User Group
 
MySQL Monitoring using Prometheus & Grafana
MySQL Monitoring using Prometheus & GrafanaMySQL Monitoring using Prometheus & Grafana
MySQL Monitoring using Prometheus & Grafana
YoungHeon (Roy) Kim
 
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
Akihiro Suda
 
Getting started with kubernetes
Getting started with kubernetesGetting started with kubernetes
Getting started with kubernetes
Janakiram MSV
 
BGP Dynamic Routing and Neutron
BGP Dynamic Routing and NeutronBGP Dynamic Routing and Neutron
BGP Dynamic Routing and Neutron
rktidwell
 
SR-IOV: The Key Enabling Technology for Fully Virtualized HPC Clusters
SR-IOV: The Key Enabling Technology for Fully Virtualized HPC ClustersSR-IOV: The Key Enabling Technology for Fully Virtualized HPC Clusters
SR-IOV: The Key Enabling Technology for Fully Virtualized HPC Clusters
Glenn K. Lockwood
 
QEMU Disk IO Which performs Better: Native or threads?
QEMU Disk IO Which performs Better: Native or threads?QEMU Disk IO Which performs Better: Native or threads?
QEMU Disk IO Which performs Better: Native or threads?
Pradeep Kumar
 
Using eBPF for High-Performance Networking in Cilium
Using eBPF for High-Performance Networking in CiliumUsing eBPF for High-Performance Networking in Cilium
Using eBPF for High-Performance Networking in Cilium
ScyllaDB
 
Présentation docker et kubernetes
Présentation docker et kubernetesPrésentation docker et kubernetes
Présentation docker et kubernetes
Kiwi Backup
 
Midi technique - présentation docker
Midi technique - présentation dockerMidi technique - présentation docker
Midi technique - présentation docker
Olivier Eeckhoutte
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to Docker
Luong Vo
 
Gitlab CI/CD
Gitlab CI/CDGitlab CI/CD
Gitlab CI/CD
JEMLI Fathi
 
Tutorial ceph-2
Tutorial ceph-2Tutorial ceph-2
Tutorial ceph-2
Tommy Lee
 

What's hot (20)

Openstack framework Iaas
Openstack framework IaasOpenstack framework Iaas
Openstack framework Iaas
 
SR-IOV+KVM on Debian/Stable
SR-IOV+KVM on Debian/StableSR-IOV+KVM on Debian/Stable
SR-IOV+KVM on Debian/Stable
 
Docker Introduction
Docker IntroductionDocker Introduction
Docker Introduction
 
Présentation Docker
Présentation DockerPrésentation Docker
Présentation Docker
 
Ceph Introduction 2017
Ceph Introduction 2017  Ceph Introduction 2017
Ceph Introduction 2017
 
Room 3 - 1 - Nguyễn Xuân Trường Lâm - Zero touch on-premise storage infrastru...
Room 3 - 1 - Nguyễn Xuân Trường Lâm - Zero touch on-premise storage infrastru...Room 3 - 1 - Nguyễn Xuân Trường Lâm - Zero touch on-premise storage infrastru...
Room 3 - 1 - Nguyễn Xuân Trường Lâm - Zero touch on-premise storage infrastru...
 
Block Storage For VMs With Ceph
Block Storage For VMs With CephBlock Storage For VMs With Ceph
Block Storage For VMs With Ceph
 
StarlingX - A Platform for the Distributed Edge | Ildiko Vancsa
StarlingX - A Platform for the Distributed Edge | Ildiko VancsaStarlingX - A Platform for the Distributed Edge | Ildiko Vancsa
StarlingX - A Platform for the Distributed Edge | Ildiko Vancsa
 
MySQL Monitoring using Prometheus & Grafana
MySQL Monitoring using Prometheus & GrafanaMySQL Monitoring using Prometheus & Grafana
MySQL Monitoring using Prometheus & Grafana
 
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
 
Getting started with kubernetes
Getting started with kubernetesGetting started with kubernetes
Getting started with kubernetes
 
BGP Dynamic Routing and Neutron
BGP Dynamic Routing and NeutronBGP Dynamic Routing and Neutron
BGP Dynamic Routing and Neutron
 
SR-IOV: The Key Enabling Technology for Fully Virtualized HPC Clusters
SR-IOV: The Key Enabling Technology for Fully Virtualized HPC ClustersSR-IOV: The Key Enabling Technology for Fully Virtualized HPC Clusters
SR-IOV: The Key Enabling Technology for Fully Virtualized HPC Clusters
 
QEMU Disk IO Which performs Better: Native or threads?
QEMU Disk IO Which performs Better: Native or threads?QEMU Disk IO Which performs Better: Native or threads?
QEMU Disk IO Which performs Better: Native or threads?
 
Using eBPF for High-Performance Networking in Cilium
Using eBPF for High-Performance Networking in CiliumUsing eBPF for High-Performance Networking in Cilium
Using eBPF for High-Performance Networking in Cilium
 
Présentation docker et kubernetes
Présentation docker et kubernetesPrésentation docker et kubernetes
Présentation docker et kubernetes
 
Midi technique - présentation docker
Midi technique - présentation dockerMidi technique - présentation docker
Midi technique - présentation docker
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to Docker
 
Gitlab CI/CD
Gitlab CI/CDGitlab CI/CD
Gitlab CI/CD
 
Tutorial ceph-2
Tutorial ceph-2Tutorial ceph-2
Tutorial ceph-2
 

Similar to Alla scoperta di gRPC

SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROID
Luca Masini
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Whymca
 
Azure IoTHub - Roboval 2018
Azure IoTHub - Roboval 2018Azure IoTHub - Roboval 2018
Azure IoTHub - Roboval 2018
Andrea Tosato
 
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFSLa nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
Morlini Gabriele
 
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
Imola Informatica
 
Nat come esporre servizi https senza esporre l'applicazione
Nat come esporre servizi https senza esporre l'applicazioneNat come esporre servizi https senza esporre l'applicazione
Nat come esporre servizi https senza esporre l'applicazione
Giuliano Latini
 
SignalR, il WebSocket che tanto ci mancava
SignalR, il WebSocket che tanto ci mancavaSignalR, il WebSocket che tanto ci mancava
SignalR, il WebSocket che tanto ci mancava
Andrea Tosato
 
Lezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web ServiceLezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web Service
Andrea Della Corte
 
Kubernetes as HA time series server, a proposal
Kubernetes as HA time series server, a proposalKubernetes as HA time series server, a proposal
Kubernetes as HA time series server, a proposal
Giuliano Latini
 
Introduzione a Internet (1/2) - 18/19
Introduzione a Internet (1/2) - 18/19Introduzione a Internet (1/2) - 18/19
Introduzione a Internet (1/2) - 18/19
Giuseppe Vizzari
 
Open Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studioOpen Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studio
Par-Tec S.p.A.
 
Kubernetes Core Concepts
Kubernetes Core ConceptsKubernetes Core Concepts
Kubernetes Core Concepts
Francesco Dammacco
 
Del furia signalr-to-the-max
Del furia   signalr-to-the-maxDel furia   signalr-to-the-max
Del furia signalr-to-the-maxDotNetCampus
 
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
DotNetCampus
 
Signal r to the-max
Signal r to the-maxSignal r to the-max
Signal r to the-maxDotNetCampus
 
Laravel & Passport
Laravel & PassportLaravel & Passport
Laravel & Passport
Gabriele Cavigiolo
 
Architetture web - Linguaggi e standard - Web server, application server, dat...
Architetture web - Linguaggi e standard - Web server, application server, dat...Architetture web - Linguaggi e standard - Web server, application server, dat...
Architetture web - Linguaggi e standard - Web server, application server, dat...
Fulvio Corno
 
Le Applicazioni di Internet Web, FTP, Posta e App pr il Mobile
Le Applicazioni di Internet Web, FTP, Posta e App pr il MobileLe Applicazioni di Internet Web, FTP, Posta e App pr il Mobile
Le Applicazioni di Internet Web, FTP, Posta e App pr il Mobile
I.S.I.S. "Antonio Serra" - Napoli
 
IoT: protocolli, dispositivi, architetture
IoT: protocolli, dispositivi, architettureIoT: protocolli, dispositivi, architetture
IoT: protocolli, dispositivi, architetture
Stefano Valle
 
Web in real time con signalR
Web in real time con signalRWeb in real time con signalR
Web in real time con signalR
Nicolò Carandini
 

Similar to Alla scoperta di gRPC (20)

SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROID
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini
 
Azure IoTHub - Roboval 2018
Azure IoTHub - Roboval 2018Azure IoTHub - Roboval 2018
Azure IoTHub - Roboval 2018
 
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFSLa nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
 
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
 
Nat come esporre servizi https senza esporre l'applicazione
Nat come esporre servizi https senza esporre l'applicazioneNat come esporre servizi https senza esporre l'applicazione
Nat come esporre servizi https senza esporre l'applicazione
 
SignalR, il WebSocket che tanto ci mancava
SignalR, il WebSocket che tanto ci mancavaSignalR, il WebSocket che tanto ci mancava
SignalR, il WebSocket che tanto ci mancava
 
Lezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web ServiceLezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web Service
 
Kubernetes as HA time series server, a proposal
Kubernetes as HA time series server, a proposalKubernetes as HA time series server, a proposal
Kubernetes as HA time series server, a proposal
 
Introduzione a Internet (1/2) - 18/19
Introduzione a Internet (1/2) - 18/19Introduzione a Internet (1/2) - 18/19
Introduzione a Internet (1/2) - 18/19
 
Open Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studioOpen Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studio
 
Kubernetes Core Concepts
Kubernetes Core ConceptsKubernetes Core Concepts
Kubernetes Core Concepts
 
Del furia signalr-to-the-max
Del furia   signalr-to-the-maxDel furia   signalr-to-the-max
Del furia signalr-to-the-max
 
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
SIGNALR TO-THE-MAX: VERSO IL WEB ED OLTRE!
 
Signal r to the-max
Signal r to the-maxSignal r to the-max
Signal r to the-max
 
Laravel & Passport
Laravel & PassportLaravel & Passport
Laravel & Passport
 
Architetture web - Linguaggi e standard - Web server, application server, dat...
Architetture web - Linguaggi e standard - Web server, application server, dat...Architetture web - Linguaggi e standard - Web server, application server, dat...
Architetture web - Linguaggi e standard - Web server, application server, dat...
 
Le Applicazioni di Internet Web, FTP, Posta e App pr il Mobile
Le Applicazioni di Internet Web, FTP, Posta e App pr il MobileLe Applicazioni di Internet Web, FTP, Posta e App pr il Mobile
Le Applicazioni di Internet Web, FTP, Posta e App pr il Mobile
 
IoT: protocolli, dispositivi, architetture
IoT: protocolli, dispositivi, architettureIoT: protocolli, dispositivi, architetture
IoT: protocolli, dispositivi, architetture
 
Web in real time con signalR
Web in real time con signalRWeb in real time con signalR
Web in real time con signalR
 

More from Andrea Dottor

Blazor ♥️ JavaScript
Blazor ♥️ JavaScriptBlazor ♥️ JavaScript
Blazor ♥️ JavaScript
Andrea Dottor
 
Blazor, lo sapevi che...
Blazor, lo sapevi che...Blazor, lo sapevi che...
Blazor, lo sapevi che...
Andrea Dottor
 
Dal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developersDal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developers
Andrea Dottor
 
Blazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web FormBlazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web Form
Andrea Dottor
 
Come sta la nostra applicazione? Un viaggio alla scoperta degli Health Check ...
Come sta la nostra applicazione? Un viaggio alla scoperta degli Health Check ...Come sta la nostra applicazione? Un viaggio alla scoperta degli Health Check ...
Come sta la nostra applicazione? Un viaggio alla scoperta degli Health Check ...
Andrea Dottor
 
Blazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiBlazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi reali
Andrea Dottor
 
What's New in ASP.NET Core 3
What's New in ASP.NET Core 3What's New in ASP.NET Core 3
What's New in ASP.NET Core 3
Andrea Dottor
 
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Andrea Dottor
 
Real case: migrate from Web Forms to ASP.NET Core gradually
Real case: migrate from Web Forms to ASP.NET Core graduallyReal case: migrate from Web Forms to ASP.NET Core gradually
Real case: migrate from Web Forms to ASP.NET Core gradually
Andrea Dottor
 
ASP.NET Core - Razor Pages
ASP.NET Core - Razor PagesASP.NET Core - Razor Pages
ASP.NET Core - Razor Pages
Andrea Dottor
 
ASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivati
Andrea Dottor
 
Dependency injection questa sconosciuta
Dependency injection questa sconosciutaDependency injection questa sconosciuta
Dependency injection questa sconosciuta
Andrea Dottor
 
Customize ASP.NET Core scaffolding
Customize ASP.NET Core scaffoldingCustomize ASP.NET Core scaffolding
Customize ASP.NET Core scaffolding
Andrea Dottor
 
ASP.NET, ottimizziamo con la cache
ASP.NET, ottimizziamo con la cacheASP.NET, ottimizziamo con la cache
ASP.NET, ottimizziamo con la cache
Andrea Dottor
 
Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0
Andrea Dottor
 
Creare API pubbliche, come evitare gli errori comuni
 Creare API pubbliche, come evitare gli errori comuni Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuni
Andrea Dottor
 
Deploy & Run on Azure App Service
Deploy & Run on Azure App ServiceDeploy & Run on Azure App Service
Deploy & Run on Azure App Service
Andrea Dottor
 
ASP.NET Core
ASP.NET CoreASP.NET Core
ASP.NET Core
Andrea Dottor
 
L'evoluzione del web
L'evoluzione del webL'evoluzione del web
L'evoluzione del web
Andrea Dottor
 
Introduzione ad ASP.NET Core
Introduzione ad ASP.NET CoreIntroduzione ad ASP.NET Core
Introduzione ad ASP.NET Core
Andrea Dottor
 

More from Andrea Dottor (20)

Blazor ♥️ JavaScript
Blazor ♥️ JavaScriptBlazor ♥️ JavaScript
Blazor ♥️ JavaScript
 
Blazor, lo sapevi che...
Blazor, lo sapevi che...Blazor, lo sapevi che...
Blazor, lo sapevi che...
 
Dal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developersDal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developers
 
Blazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web FormBlazor per uno sviluppatore Web Form
Blazor per uno sviluppatore Web Form
 
Come sta la nostra applicazione? Un viaggio alla scoperta degli Health Check ...
Come sta la nostra applicazione? Un viaggio alla scoperta degli Health Check ...Come sta la nostra applicazione? Un viaggio alla scoperta degli Health Check ...
Come sta la nostra applicazione? Un viaggio alla scoperta degli Health Check ...
 
Blazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiBlazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi reali
 
What's New in ASP.NET Core 3
What's New in ASP.NET Core 3What's New in ASP.NET Core 3
What's New in ASP.NET Core 3
 
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
 
Real case: migrate from Web Forms to ASP.NET Core gradually
Real case: migrate from Web Forms to ASP.NET Core graduallyReal case: migrate from Web Forms to ASP.NET Core gradually
Real case: migrate from Web Forms to ASP.NET Core gradually
 
ASP.NET Core - Razor Pages
ASP.NET Core - Razor PagesASP.NET Core - Razor Pages
ASP.NET Core - Razor Pages
 
ASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivati
 
Dependency injection questa sconosciuta
Dependency injection questa sconosciutaDependency injection questa sconosciuta
Dependency injection questa sconosciuta
 
Customize ASP.NET Core scaffolding
Customize ASP.NET Core scaffoldingCustomize ASP.NET Core scaffolding
Customize ASP.NET Core scaffolding
 
ASP.NET, ottimizziamo con la cache
ASP.NET, ottimizziamo con la cacheASP.NET, ottimizziamo con la cache
ASP.NET, ottimizziamo con la cache
 
Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0
 
Creare API pubbliche, come evitare gli errori comuni
 Creare API pubbliche, come evitare gli errori comuni Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuni
 
Deploy & Run on Azure App Service
Deploy & Run on Azure App ServiceDeploy & Run on Azure App Service
Deploy & Run on Azure App Service
 
ASP.NET Core
ASP.NET CoreASP.NET Core
ASP.NET Core
 
L'evoluzione del web
L'evoluzione del webL'evoluzione del web
L'evoluzione del web
 
Introduzione ad ASP.NET Core
Introduzione ad ASP.NET CoreIntroduzione ad ASP.NET Core
Introduzione ad ASP.NET Core
 

Alla scoperta di gRPC

  • 1. www.xedotnet.org Andrea Dottor @dottor Alla scoperta di gRPC Codice: https://github.com/andreadottor/XE.Dottor.gRPC
  • 2. SOAP • PRO • WSDL (permette la generazione di proxy) • Standard W3C • CONTRO • Serializzazione XML • Formato messaggi troppo complesso • Non facilmente utilizzabile da browser WCF • PRO • Altamente configurabile • CONTRO • Altamente configurabile • Non sempre interoperabile http API • PRO • Interoperabile • Utilizzabile facilmente dal browser • Aderente al protocollo HTTP • CONTRO • Non è possibile far generare un proxy * • Lo sviluppatore deve documentare DTO e chiamate • Non è uno Standard Da dove arriviamo
  • 3. SOAP • PRO • WSDL (permette la generazione di proxy) • Standard W3C • CONTRO • Serializzazione XML • Formato messaggi troppo complesso • Non facilmente utilizzabile da browser WCF • PRO • Altamente configurabile • CONTRO • Altamente configurabile • Non sempre interoperabile http API • PRO • Interoperabile • Utilizzabile facilmente dal browser • Aderente al protocollo HTTP • CONTRO • Non è possibile far generare un proxy * • Lo sviluppatore deve documentare DTO e chiamate • Non è uno Standard Da dove arriviamo
  • 4. SOAP • PRO • WSDL (permette la generazione di proxy) • Standard W3C • CONTRO • Serializzazione XML • Formato messaggi troppo complesso • Non facilmente utilizzabile da browser WCF • PRO • Altamente configurabile • CONTRO • Altamente configurabile • Non sempre interoperabile http API • PRO • Interoperabile • Utilizzabile facilmente dal browser • Aderente al protocollo HTTP • CONTRO • Non è possibile far generare un proxy * • Lo sviluppatore deve documentare DTO e chiamate • Non è uno Standard Da dove arriviamo
  • 6. In distributed computing a remote procedure call (RPC) is when a computer program causes a procedure (subroutine) to execute in another address space (commonly on another computer on a shared network), which is coded as if it were a normal (local) procedure call, without the programmer explicitly coding the details for the remote interaction. That is, the programmer writes essentially the same code whether the subroutine is local to the executing program, or remote [fonte: https://en.wikipedia.org/wiki/Remote_procedure_call] RPC
  • 7. RPC non è una cosa nuova! • Response–request protocols date to early distributed computing in the late 1960s, theoretical proposals of remote procedure calls as the model of network operations date to the 1970s, and practical implementations date to the early 1980s. Bruce Jay Nelson is generally credited with coining the term "remote procedure call" in 1981 [fonte: https://en.wikipedia.org/wiki/Remote_procedure_call] RPC
  • 8.
  • 9. A high performance, open-source universal RPC framework gRPC is a modern open source high performance RPC framework that can run in any environment. It can efficiently connect services in and across data centers with pluggable support for load balancing, tracing, health checking and authentication. It is also applicable in last mile of distributed computing to connect devices, mobile applications and browsers to backend services. https://grpc.io/ Cos'è gRPC
  • 10. gRPC è l'evoluzione di Stubby, una tecnologia sviluppata da Google per far comunicare i suoi microservizi (anche tra data-center differenti) • "For the past 15 years, Google has solved these problems internally with Stubby, an RPC framework that consists of a core RPC layer that can handle internet-scale of tens of billions of requests per second (yes, billions!). Now, this technology is available for anyone as part of the open- source project called gRPC. It’s intended to provide the same scalability, performance and functionality that we enjoy at Google to the community at large." [fonte: https://medium.com/@nakabonne/why-was-grpc-born-7e65bbca9633] Progetto ora gestito da Cloud Native Computing Foundation Un po' di storia di gRPC
  • 12. Uso di HTTP/2 per la connessione Vantaggi: • binario (invece che testuale) • utilizzo di una singola connessione tra client e server e abilitazione del multiplexing per il download parallelo delle risorse • compressione degli header HTTP • stessa semantica HTML di HTTP 1.1 [Test performance HTTP/1.1 vs HTTP/2: http://www.http2demo.io ] HTTP/2 transport
  • 13. Uso di Protocol Buffers per la definizione dei servizi e come formato di serializzazione dei dati • "Protocol buffers are a language-neutral, platform- neutral extensible mechanism for serializing structured data" Sviluppato da Google https://developers.google.com/protocol-buffers/ Specifiche del linguaggio: https://developers.google.com/protocol-buffers/docs/proto PRO: • Serializzazione dei dati in formato binario • Da 3 a 10 volte più piccolo di un XML • Da 20 a 100 volte più veloce di un serializzatore o parser XML Protocol Buffers
  • 14. Protocol Buffers - proto file Permette di definire: • metodi esposti dai servizi gRPC • struttura dei messaggi utilizzati nei servizi
  • 15. • Specifying Field Rules • singular -> valore di default quando non viene specificato nulla • repeated • Scalar Value Types: • double, float, int32, int64, *int64, uint32, uint64, sint32, sint64, fixed32, fixed64, sfixed32, sfixed64, bool, string, bytes • In proto3 non sono ammessi campi opzionali • I null nei Value Types vanno gestiti manualmente es: Google.Protobuf.WellKnownTypes Protocol Buffers - Language Guide
  • 17. Language Platform Compiler C/C++ Linux/Mac GCC 4.8+ Clang 3.3+ C/C++ Windows 7+ Visual Studio 2015+ C# Linux/Mac .NET Core, Mono 4+ C# Windows 7+ .NET Core, .NET 4.5+ Dart Windows/Linux/Mac Dart 2.0+ Go Windows/Linux/Mac Go 1.6+ Java Windows/Linux/Mac JDK 8 recommended. Gingerbread+ for Android Node.js Windows/Linux/Mac Node v4+ Objective-C Mac OS X 10.11+/iOS 7.0+ Xcode 7.2+ PHP (Beta) Linux/Mac PHP 5.5+ and PHP 7.0+ Python Windows/Linux/Mac Python 2.7 and Python 3.4+ Ruby Windows/Linux/Mac Ruby 2.3+ Code Generation
  • 18. • Il package NuGet Grpc.Tools contiene il plugin protoc e protobuf in C# utile a generare il codice (server e client). A partire dalla versione 1.17 il package si integra con MSBuild e permette di generare automaticamente il codice C# a partire dai file .proto. • La build build rigenera I seguenti files nella cartella Greeter/obj/Debug/TARGET_FRAMEWORK: • Greet.cs contiene tutto il codice di Procol Buffer utile a popolare, serializzare e tutte le classi di request e response • GreetGrpc.cs contiene il codice generato del client e/o server, ed include: • una classe astratta Greeter.GreeterBase da cui ereditare per implementare il servizio Greeter • una classe Greeter.GreeterClient utile per chiamare I metodi esposti dal servizio remoto Greeter C# Tooling support for .proto files
  • 19. • Installare il package nuget Grpc.AspNetCore • Abilitare gRPC con AddGrpc • Aggiungere ogni servizio gRPC alla pipeline di routing con MapGrpcService gRPC services with ASP.NET Core
  • 21. • Unary: Quando il client invia una singola richiesta ed il server risponde, come fosse una normale chiamata ad una funzione • Server streaming: Il client invia una richiesta al server e ottiene uno stream per leggere in sequenza i messaggi ritornati. Il client continua la lettura fino a che non ci son più messaggi. • Client streaming: Il client invia una sequenza di messaggi al server utilizzando uno stream. Quando il client completa l'invio, attende che il server ritorni una risposta. • BiDi streaming: Sia il server che il client inviano e leggono i messaggi utilizzando due stream indipendenti. L'ordine dei messaggi in ogni stream viene mantenuto. gRPC Service Definitions
  • 23. • Con ASP.NET Core sono suppertati i seguenti metodi di autenticazione: • Azure Active Directory • Client Certificate • IdentityServer • JWT Token • OAuth 2.0 • OpenID Connect • WS-Federation • Decorare il servizio con l'attributo [Authorize] • Valido sia a livello di classe che di singolo metodo Authentication and authorization
  • 24. gRPC HTTP API Strong Typing Serialization Streaming Request-Response HTTP/2 HTTP/1.1 Protobuf JSON "gRPC largely follows HTTP semantics over HTTP/2 but we explicitly allow for full-duplex streaming. We diverge from typical REST conventions as we use static paths for performance reasons during call dispatch as parsing call parameters from paths, query parameters and payload body adds latency and complexity. We have also formalized a set of errors that we believe are more directly applicable to API use cases than the HTTP status codes." gRPC vs HTTP APIs (REST)
  • 25. In .NET core non sarà possible realizzare servizi Windows Communication Foundation (WCF), e non verrà fatto il porting nemmeno in .NET 5 • https://devblogs.microsoft.com/dotnet/supporting-the- community-with-wf-and-wcf-oss-projects/ In .NET Core è stato portato solamente la possibilità di consumare servizi WCF • https://github.com/dotnet/wcf gRPC vs WCF
  • 26. I servizi gRPC non possono essere sfruttati completamente da browser ** gRPC ad oggi non verrà utilizzato da SignalR Esistono scenari per cui SingalR è da preferire • Broadcast real-time communication – gRPC supports real-time communication via streaming, but the concept of broadcasting a message out to registered connections doesn't exist. For example in a chat room scenario where new chat messages should be sent to all clients in the chat room, each gRPC call is required to individually stream new chat messages to the client. SignalR is a useful framework for this scenario. SignalR has the concept of persistent connections and built-in support for broadcasting messages. gRPC vs SignalR
  • 27. gRPC-Web è una libreria JavaScript che permette l'interazione con servizi gRPC https://github.com/grpc/grpc-web Richiede l'uso di un proxy che adatti le chiamate al servizio https://www.envoyproxy.io/ gRPC-Web
  • 28. Lightweight microservices where efficiency is critical. Polyglot systems where multiple languages are required for development. Point-to-point real-time services that need to handle streaming requests or responses. Mobile clients which are communicating to a cloud server. Quali sono i casi d'uso ideali?
  • 29. Numeri? Building Scalable Microservices using Kubernetes, gRPC, and Containers https://www.youtube.com/watch?v=UOIJNygDNlE
  • 30. Square • gRPC — cross-platform open source RPC over HTTP/2 https://medium.com/square-corner-blog/grpc-cross-platform-open-source-rpc-over-http-2- 56c03b5a0173 Netflix • Increasing Developer Productivity and Defeating the Thundering Herd with gRPC https://www.cncf.io/netflix-case-study/ Spotify • The Story of Why We Migrate to gRPC and How We Go About It https://www.youtube.com/watch?v=fMq3IpPE3TU Twilio • Intro to gRPC: A Modern Toolkit for Microservice Communication https://www.youtube.com/watch?v=RoXT_Rkg8LA WePay • Migrating APIs from REST to gRPC at WePay https://wecode.wepay.com/posts/migrating-apis-from-rest-to-grpc-at-wepay Docker • Containerd: a daemon to control runC https://blog.docker.com/2015/12/containerd-daemon-to-control-runc/ Cisco • Getting Started With gRPC in Cisco IOS XR https://github.com/CiscoDevNet/grpc-getting-started … Alcune aziende che hanno migrato i loro servizi
  • 31. • gRPC and why it can save you development time https://medium.com/red-crane/grpc-and-why-it-can-save-you- development-time-436168fd0cbc • ASP.NET Community Standup - June 4th, 2019 - gRPC! https://www.youtube.com/watch?v=Pa6qtu1wIs8 • Calling gRPC Services With Server-side Blazor https://chrissainty.com/calling-grpc-services-with-server-side-blazor/ • gRPC for ASP.NET Core 3.0 https://mustak.im/grpc-for-asp-net-core-3-0/ • From ’00s to ’20s: migrating from RESTful to gRPC https://medium.com/@giefferre/from-00s-to-20s-migrating-from- restful-to-grpc-5a5aa0cf27ba • Envoy and gRPC-Web: a fresh new alternative to REST https://blog.envoyproxy.io/envoy-and-grpc-web-a-fresh-new- alternative-to-rest-6504ce7eb880 links
  • 33. Podcast ".NET in Pillole" • Spotify: https://open.spotify.com/show/7jyoG6BBmzvScNOqSpVvQQ • Spreaker: https://www.spreaker.com/show/net-in-pillole • Apple podcast: https://podcasts.apple.com/it/podcast/net-in-pillole/id1478648398 • Google podcast: https://podcasts.google.com/?feed=aHR0cHM6Ly93d3cuc3ByZWFrZXIuY29tL3Nob3c vMzY4NTM0NC9lcGlzb2Rlcy9mZWVk • YouTube: https://www.youtube.com/user/andreadottor/