SlideShare a Scribd company logo
1 of 92
gRPC-Web:
It’s All About Communication
DEVOXX UKRAINE
NOVEMBER 2, 2019
Alex BORYSOV
Yevgen GOLUBENKO
@aiborisov
@HalloGene_
Images contained in this presentation
are the property of Netflix Inc. and
cannot be reused
Yevgen
GOLUBENKO
Anomali
@HalloGene_
@aiborisov
@HalloGene_
Alex
BORYSOV
Netflix
@aiborisov
@aiborisov
@HalloGene_
YOU?
@aiborisov
@HalloGene_
YOU?
@aiborisov
@HalloGene_
@aiborisov
@HalloGene_
gRPC BEFORE gRPC-WEB
@aiborisov
@HalloGene_
FRONTEND
THINGS
DEMO
@aiborisov
@HalloGene_
DEMOGORGON
@aiborisov
@HalloGene_
@aiborisov
@HalloGene_
DEMO ARCHITECTURE
API
GATEWAY
@aiborisov
@HalloGene_
DEMO ARCHITECTURE
FIXTURES
API
GATEWAY
@aiborisov
@HalloGene_
DEMO ARCHITECTURE
FIXTURES
TOPSCORES
API
GATEWAY
@aiborisov
@HalloGene_
DEMO ARCHITECTURE
FIXTURES
TOPSCORES
UPDATE SCORE
API
GATEWAY
@aiborisov
@HalloGene_
DEMO ARCHITECTURE
FIXTURES
TOPSCORES
UPDATE SCORE
API
GATEWAY
const method = 'POST';
const headers =
{ 'Content-Type': 'application/json' };
const playerId = 'Traktorist';
const score = 300;
const data = { playerId, score };
const body = JSON.stringify(data);
fetch('http://nativegoo.se/setScore',
{method, headers, body})
.then(response => response.json());
@aiborisov
@HalloGene_
HANDMADE JSON?
“DOCS ARE UP TO DATE”
THEY SAID
@aiborisov
@HalloGene_
HOW ABOUT IDL?
@aiborisov
@HalloGene_
@aiborisov
@HalloGene_
API FIRST
GATEWAY
@aiborisov
@HalloGene_
GATEWAY
GATEWAY.PROTO
API FIRST
@aiborisov
@HalloGene_
GATEWAY
gRPC
Stub
gRPC
Service
GATEWAY.PROTO
API FIRST
@aiborisov
@HalloGene_
GATEWAY
gRPC
Stub
gRPC
Service
GATEWAY.PROTO
API FIRST
@aiborisov
@HalloGene_
GATEWAY
gRPC
Stub
gRPC
Service
GATEWAY.PROTO
API FIRST
@aiborisov
@HalloGene_
API CODE REVIEW
@aiborisov
@HalloGene_
API CODE REVIEW
@aiborisov
@HalloGene_
API DEFINITIONS
syntax = "proto3";
service FixtureService {
// Return next line of geese and clouds
rpc GetFixture (GetFixtureRequest) returns (FixtureResponse);
}
service LeaderboardService {
// Returns current top scores
rpc GetTopScores (TopScoresRequest) returns (TopScoresResponse);
// Updates a single player's score
rpc UpdateScore (UpdateScoreRequest) returns (UpdateScoreResponse);
}
@aiborisov
@HalloGene_
API DEFINITIONS
syntax = "proto3";
service FixtureService {
// Return next line of geese and clouds
rpc GetFixture (GetFixtureRequest) returns (FixtureResponse);
}
service LeaderboardService {
// Returns current top scores
rpc GetTopScores (TopScoresRequest) returns (TopScoresResponse);
// Updates a single player's score
rpc UpdateScore (UpdateScoreRequest) returns (UpdateScoreResponse);
}
@aiborisov
@HalloGene_
API DEFINITIONS
syntax = "proto3";
service FixtureService {
// Return next line of geese and clouds
rpc GetFixture (GetFixtureRequest) returns (FixtureResponse);
}
service LeaderboardService {
// Returns current top scores
rpc GetTopScores (TopScoresRequest) returns (TopScoresResponse);
// Updates a single player's score
rpc UpdateScore (UpdateScoreRequest) returns (UpdateScoreResponse);
}
APIs code reviews
Language-neutral contract
@aiborisov
@HalloGene_
PROTO API FIRST
APIs code reviews
Language-neutral contract
APIs DON’T LIE
@aiborisov
@HalloGene_
PROTO API FIRST
@aiborisov
@HalloGene_
GATEWAY
gRPC
Stub
gRPC
Service
GATEWAY.PROTO
gRPC CODE GEN
@aiborisov
@HalloGene_
● Java
● Go
● C/C++
● C#
● Node.js
● PHP
● Ruby
● Python
● Dart
● Objective-C
gRPC SPEAKS YOUR
LANGUAGE
@aiborisov
@HalloGene_
● Linux
● MacOS
● Windows
● Android
● iOS
● Web
gRPC CODE GEN
@aiborisov
@HalloGene_
● Linux
● MacOS
● Windows
● Android
● iOS
● Web
gRPC CODE GEN
@aiborisov
@HalloGene_
gRPC INTEROP
Java
Service
Python
Service
GoLang
Service
C++
Service
gRPC
Service
gRPC
Stub
gRPC
Stub
gRPC
Stub
gRPC
Service
gRPC
Service
gRPC
Service
gRPC
Stub
gRPC-
Web
Stub
@aiborisov
@HalloGene_
gRPC-WEB CODE GEN
$ protoc -I=$DIR gateway.proto 
--js_out=import_style=commonjs:$OUT_DIR 
--grpc-web_out=import_style=commonjs,
mode=grpcwebtext:$OUT_DIR
@aiborisov
@HalloGene_
gRPC-WEB CODE GEN
$ protoc -I=$DIR gateway.proto 
--js_out=import_style=commonjs:$OUT_DIR 
--grpc-web_out=import_style=commonjs,
mode=grpcwebtext:$OUT_DIR
@aiborisov
@HalloGene_
gRPC-WEB CODE GEN
$ protoc -I=$DIR gateway.proto 
--js_out=import_style=commonjs:$OUT_DIR 
--grpc-web_out=import_style=commonjs,
mode=grpcwebtext:$OUT_DIR
@aiborisov
@HalloGene_
gRPC-WEB CODE GEN
$ protoc -I=$DIR gateway.proto 
--js_out=import_style=commonjs:$OUT_DIR 
--grpc-web_out=import_style=commonjs,
mode=grpcwebtext:$OUT_DIR
Supported import styles:
closure, commonjs, commonjs+dts, typescript
@aiborisov
@HalloGene_
@aiborisov
@HalloGene_
@aiborisov
@HalloGene_
https://github.com/grpc/grpc/blob/
master/doc/PROTOCOL-HTTP2.md
Requests / Responses
HTTP/2 Transport Mapping
Connection Management
Security
Error Handling
gRPC over HTTP/2
@aiborisov
@HalloGene_
GATEWAY
gRPC
Web
Stub
gRPC
Service
GATEWAY.PROTO
gRPC-Web
HTTP/2
@aiborisov
@HalloGene_
GATEWAY
gRPC
Web
Stub
gRPC
Service
GATEWAY.PROTO
gRPC-Web
HTTP/2HTTP/1*
@aiborisov
@HalloGene_
WE NEED A GATE!
@aiborisov
@HalloGene_
gRPC-Web Spec
https://github.com/grpc/grpc/blob/
master/doc/PROTOCOL-WEB.md
Support any HTTP/*
Support web-specific features
Can became optional with WHATWG
Streams Standard (future)
WE NEED A GATE!
@aiborisov
@HalloGene_
GATEWAY
gRPC
Web
Stub
gRPC
Service
GATEWAY.PROTO
gRPC-Web
HTTP/2HTTP/1*
PROXY
@aiborisov
@HalloGene_
GATEWAY
gRPC
Web
Stub
gRPC
Service
GATEWAY.PROTO
gRPC-Web
HTTP/2HTTP/1*
PROXY
@aiborisov
@HalloGene_
ENVOY CONFIG (envoy.yaml)
static_resources:
listeners:
filter_chains:
- filters:
- name: envoy.http_connection_manager
config:
route_config:
virtual_hosts:
- name: local_service
cors:
allow_origin:
- "*"
allow_methods: GET, PUT, DELETE, POST, OPTIONS
allow_headers: … , x-grpc-web, grpc-timeout,
x-accept-response-streaming
expose_headers: grpc-status,grpc-message,custom-header-1
http_filters:
- name: envoy.grpc_web
- name: envoy.cors
- name: envoy.router
@aiborisov
@HalloGene_
ENVOY CONFIG (envoy.yaml)
cors:
allow_origin:
- "*"
allow_methods: GET, PUT, DELETE, POST, OPTIONS
allow_headers: … , x-grpc-web, grpc-timeout,
x-accept-response-streaming
expose_headers: grpc-status,grpc-message,custom-header-1
http_filters:
- name: envoy.grpc_web
- name: envoy.cors
- name: envoy.router
@aiborisov
@HalloGene_
ENVOY CONFIG (envoy.yaml)
cors:
allow_origin:
- "*"
allow_methods: GET, PUT, DELETE, POST, OPTIONS
allow_headers: … , x-grpc-web, grpc-timeout,
x-accept-response-streaming
expose_headers: grpc-status,grpc-message,custom-header-1
http_filters:
- name: envoy.grpc_web
- name: envoy.cors
- name: envoy.router
@aiborisov
@HalloGene_
ENVOY CONFIG (envoy.yaml)
cors:
allow_origin:
- "*"
allow_methods: GET, PUT, DELETE, POST, OPTIONS
allow_headers: … , x-grpc-web, grpc-timeout,
x-accept-response-streaming
expose_headers: grpc-status,grpc-message,custom-header-1
http_filters:
- name: envoy.grpc_web
- name: envoy.cors
- name: envoy.router
@aiborisov
@HalloGene_
ENVOY PROXY
Fault
Tolerance
Service
Discovery
Load
Balancing
Health
Checking
gRPC
Service
gRPC
Stub
@aiborisov
@HalloGene_
gRPC over HTTP/*
gRPC
Service
gRPC
Stub
gRPC-
Web
Stub
HTTP/2
HTTP/2
HTTP/2
HTTP/1.1
DEMOGORGON
@aiborisov
@HalloGene_
TOOLS
@aiborisov
@HalloGene_
TOOLS: CLI
@aiborisov
@HalloGene_
grpc_cli
grpcurl
polyglot
grpcc
gcall
Evans
TOOLS: CLI
@aiborisov
@HalloGene_
grpc_cli
grpcurl
polyglot
grpcc
gcall
Evans
TOOLS: GRPCURL
@aiborisov
@HalloGene_
$ brew install grpcurl
$grpcurl $GATEWAY:8080 
gateway.LeaderboardService/
GetTopScores
TOOLS: GUI
@aiborisov
@HalloGene_
gRPCox
gRPC-Swagger
BloomRPC
grpcui
letmegrpc
MuninRPC
CLI tools
GUI tools
Testing tools and more
@aiborisov
@HalloGene_
gRPC ECOSYSTEM
API CHANGES
@aiborisov
@HalloGene_
message FixtureLine {
repeated GooseLocator geese = 1;
repeated CloudLocator clouds = 2;
}
API CHANGES
@aiborisov
@HalloGene_
message FixtureLine {
repeated GooseLocator geese = 1;
repeated CloudLocator clouds = 2;
}
message GooseLocator {
int32 goose_position = 1;
}
API CHANGES
@aiborisov
@HalloGene_
message FixtureLine {
repeated GooseLocator geese = 1;
repeated CloudLocator clouds = 2;
}
message GooseLocator {
int32 goose_position = 1;
+ GooseType goose_type = 2;
}
API CHANGES: SAFELY ADD/REMOVE FIELDS
@aiborisov
@HalloGene_
UNCOVER THE TRUTH
@aiborisov
@HalloGene_
@aiborisov
@HalloGene_
UNCOVER THE TRUTH: SERVER REFLECTION API
syntax = "proto3";
service ServerReflection {
rpc ListApis (ListApisRequest) returns (ListApisResponse);
rpc GetMethod (GetMethodRequest)
returns (GetMethodResponse);
}
@aiborisov
@HalloGene_
UNCOVER THE TRUTH: SERVER REFLECTION API
val grpcServer = ServerBuilder.forPort(SERVER_PORT)
.addService(fixtureService)
.addService(leaderboardService)
.addService(ProtoReflectionService.newInstance())
.build();
@aiborisov
@HalloGene_
UNCOVER THE TRUTH: SERVER REFLECTION API
val grpcServer = ServerBuilder.forPort(SERVER_PORT)
.addService(fixtureService)
.addService(leaderboardService)
.addService(ProtoReflectionService.newInstance())
.build();
@aiborisov
@HalloGene_
UNCOVER THE TRUTH: SERVER REFLECTION API
$ grpcurl -plaintext $GATEWAY:8080 list
game.FixtureService
game.LeaderboardService
grpc.reflection.v1alpha.ServerReflection
@aiborisov
@HalloGene_
UNCOVER THE TRUTH: SERVER REFLECTION API
$ grpcurl -plaintext $GATEWAY:8080 describe 
game.FixtureService
game.FixtureService is a service:
service FixtureService {
rpc GetFixture ( .game.GetFixtureRequest )
returns ( .game.FixtureResponse );
}
@aiborisov
@HalloGene_
UNCOVER THE TRUTH: SERVER REFLECTION API
$ grpcurl -plaintext $GATEWAY:8080 describe 
game.FixtureResponse
game.FixtureResponse is a message:
message FixtureResponse {
repeated .game.FixtureLine lines = 1;
}
@aiborisov
@HalloGene_
gRPC TIMEOUT
generatePlayerId = () => {
const request = new GeneratePlayerIdRequest();
const metadata = {};
return playerIdServicePromiseClient.generatePlayerId(request, metadata);
}
@aiborisov
@HalloGene_
gRPC DEADLINE
generatePlayerId = () => {
const request = new GeneratePlayerIdRequest();
const deadline = (new Date()).getTime() + timeoutInMillis;
const metadata = { deadline };
return playerIdServicePromiseClient.generatePlayerId(request, metadata);
}
gRPC
Service
@aiborisov
@HalloGene_
gRPC DEADLINE
gRPC-
Web
Stub
deadline
500ms
gRPC
Service
gRPC
Service
@aiborisov
@HalloGene_
gRPC DEADLINE
gRPC-
Web
Stub
deadline
500ms
gRPC
Service
gRPC
Service
@aiborisov
@HalloGene_
gRPC DEADLINE
gRPC-
Web
Stub
deadline
500ms
200ms
spent
gRPC
Service
gRPC
Service
@aiborisov
@HalloGene_
gRPC DEADLINE
gRPC-
Web
Stub
deadline
500ms
deadline
300ms
200ms
spent
gRPC
Service
gRPC
Service
@aiborisov
@HalloGene_
gRPC DEADLINE
gRPC-
Web
Stub
deadline
500ms
deadline
300ms
200ms
spent
gRPC
Service
deadline
300ms
gRPC
Service
@aiborisov
@HalloGene_
gRPC DEADLINE
gRPC-
Web
Stub
deadline
500ms
timeout ?
gRPC
Service
Canonical gRPC Status Codes
Deadline Support
Deadline Propagation
@aiborisov
@HalloGene_
gRPC ERROR CODES
@aiborisov
@HalloGene_
API
@aiborisov
@HalloGene_
One request, one response
Requests can be redundant
Polling interval?
API: UNARY
@aiborisov
@HalloGene_
One request, multiple responses
Real-time updates
gRPC-Web: supports
server-side streaming
API: STREAMING
@aiborisov
@HalloGene_
gRPC-WEB STREAMING
syntax = "proto3";
service LeaderboardService {
// Returns current top scores
rpc GetTopScores (TopScoresRequest) returns (TopScoresResponse);
// Updates a single player's score
rpc UpdateScore (UpdateScoreRequest) returns (UpdateScoreResponse);
}
@aiborisov
@HalloGene_
gRPC-WEB STREAMING
syntax = "proto3";
service LeaderboardService {
// Returns current top scores
rpc GetTopScores (TopScoresRequest) returns (TopScoresResponse);
// Subscribes to top scores updates
rpc StreamTopScores (TopScoresRequest) returns (stream TopScoresResponse);
// Updates a single player's score
rpc UpdateScore (UpdateScoreRequest) returns (UpdateScoreResponse);
}
DEMO: UA.GRPCWEB.COM
@aiborisov
@HalloGene_
@aiborisov
@HalloGene_
gRPC: grpc.io
https://github.com
/grpc/grpc-web
/grpc-ecosystem/awesome-grpc
/break-me-if-you-can/services/ui
http://slides-ua.grpcweb.com
http://jobs.grpcweb.com
LEARN MORE
@aiborisov
@HalloGene_
gRPC-WEB
THINGS
Canonical proto APIs
No more handcrafted JSONs
Canonical status codes
Server streaming
Well-defined domain methods
SPECIAL THANKS: MYKYTA PROTSENKO
@aiborisov
@HalloGene_
SPECIAL THANKS: THE STRANGER THINGS CREW
@aiborisov
@HalloGene_
SPECIAL THANKS: YOU
@aiborisov
@HalloGene_

More Related Content

What's hot

"gRPC vs REST: let the battle begin!" GeeCON Krakow 2018 edition
"gRPC vs REST: let the battle begin!" GeeCON Krakow 2018 edition"gRPC vs REST: let the battle begin!" GeeCON Krakow 2018 edition
"gRPC vs REST: let the battle begin!" GeeCON Krakow 2018 editionAlex Borysov
 
"Enabling Googley microservices with gRPC" Riga DevDays 2018 edition
"Enabling Googley microservices with gRPC" Riga DevDays 2018 edition"Enabling Googley microservices with gRPC" Riga DevDays 2018 edition
"Enabling Googley microservices with gRPC" Riga DevDays 2018 editionAlex Borysov
 
"Enabling Googley microservices with gRPC" VoxxedDays Minsk edition
"Enabling Googley microservices with gRPC" VoxxedDays Minsk edition"Enabling Googley microservices with gRPC" VoxxedDays Minsk edition
"Enabling Googley microservices with gRPC" VoxxedDays Minsk editionAlex Borysov
 
gRPC vs REST: let the battle begin!
gRPC vs REST: let the battle begin!gRPC vs REST: let the battle begin!
gRPC vs REST: let the battle begin!Alex Borysov
 
Devoxx Ukraine 2018 "Break me if you can: practical guide to building fault-t...
Devoxx Ukraine 2018 "Break me if you can: practical guide to building fault-t...Devoxx Ukraine 2018 "Break me if you can: practical guide to building fault-t...
Devoxx Ukraine 2018 "Break me if you can: practical guide to building fault-t...Alex Borysov
 
Cloud Expo Europe 2022 "Break me if you can: practical guide to building faul...
Cloud Expo Europe 2022 "Break me if you can: practical guide to building faul...Cloud Expo Europe 2022 "Break me if you can: practical guide to building faul...
Cloud Expo Europe 2022 "Break me if you can: practical guide to building faul...Alex Borysov
 
REST API vs gRPC, which one should you use in breaking a monolith [Dev conf 2...
REST API vs gRPC, which one should you use in breaking a monolith [Dev conf 2...REST API vs gRPC, which one should you use in breaking a monolith [Dev conf 2...
REST API vs gRPC, which one should you use in breaking a monolith [Dev conf 2...Vladimir Dejanovic
 
REST API vs gRPC, which one should you use in breaking a monolith [Kdg.net 2018]
REST API vs gRPC, which one should you use in breaking a monolith [Kdg.net 2018]REST API vs gRPC, which one should you use in breaking a monolith [Kdg.net 2018]
REST API vs gRPC, which one should you use in breaking a monolith [Kdg.net 2018]Vladimir Dejanovic
 
common mistakes when using libcurl
common mistakes when using libcurlcommon mistakes when using libcurl
common mistakes when using libcurlDaniel Stenberg
 
HTTP/3 is next generation HTTP
HTTP/3 is next generation HTTPHTTP/3 is next generation HTTP
HTTP/3 is next generation HTTPDaniel Stenberg
 
Docker Docker - Docker Security - Docker
Docker Docker - Docker Security - DockerDocker Docker - Docker Security - Docker
Docker Docker - Docker Security - DockerBoyd Hemphill
 
A Modest Introduction to Swift
A Modest Introduction to SwiftA Modest Introduction to Swift
A Modest Introduction to SwiftJohn Anderson
 
WordPress RESTful API & Amazon API Gateway - WordCamp Kansai 2016
WordPress RESTful API & Amazon API Gateway - WordCamp Kansai 2016WordPress RESTful API & Amazon API Gateway - WordCamp Kansai 2016
WordPress RESTful API & Amazon API Gateway - WordCamp Kansai 2016崇之 清水
 
Ankara jug mayıs 2013 sunumu
Ankara jug mayıs 2013 sunumuAnkara jug mayıs 2013 sunumu
Ankara jug mayıs 2013 sunumuAnkara JUG
 
How to use vim in Android Studio, Useful customization IdeaVim
How to use vim in Android Studio, Useful customization IdeaVimHow to use vim in Android Studio, Useful customization IdeaVim
How to use vim in Android Studio, Useful customization IdeaVimYongjun Kim
 

What's hot (20)

"gRPC vs REST: let the battle begin!" GeeCON Krakow 2018 edition
"gRPC vs REST: let the battle begin!" GeeCON Krakow 2018 edition"gRPC vs REST: let the battle begin!" GeeCON Krakow 2018 edition
"gRPC vs REST: let the battle begin!" GeeCON Krakow 2018 edition
 
"Enabling Googley microservices with gRPC" Riga DevDays 2018 edition
"Enabling Googley microservices with gRPC" Riga DevDays 2018 edition"Enabling Googley microservices with gRPC" Riga DevDays 2018 edition
"Enabling Googley microservices with gRPC" Riga DevDays 2018 edition
 
"Enabling Googley microservices with gRPC" VoxxedDays Minsk edition
"Enabling Googley microservices with gRPC" VoxxedDays Minsk edition"Enabling Googley microservices with gRPC" VoxxedDays Minsk edition
"Enabling Googley microservices with gRPC" VoxxedDays Minsk edition
 
gRPC vs REST: let the battle begin!
gRPC vs REST: let the battle begin!gRPC vs REST: let the battle begin!
gRPC vs REST: let the battle begin!
 
Devoxx Ukraine 2018 "Break me if you can: practical guide to building fault-t...
Devoxx Ukraine 2018 "Break me if you can: practical guide to building fault-t...Devoxx Ukraine 2018 "Break me if you can: practical guide to building fault-t...
Devoxx Ukraine 2018 "Break me if you can: practical guide to building fault-t...
 
Cloud Expo Europe 2022 "Break me if you can: practical guide to building faul...
Cloud Expo Europe 2022 "Break me if you can: practical guide to building faul...Cloud Expo Europe 2022 "Break me if you can: practical guide to building faul...
Cloud Expo Europe 2022 "Break me if you can: practical guide to building faul...
 
REST API vs gRPC, which one should you use in breaking a monolith [Dev conf 2...
REST API vs gRPC, which one should you use in breaking a monolith [Dev conf 2...REST API vs gRPC, which one should you use in breaking a monolith [Dev conf 2...
REST API vs gRPC, which one should you use in breaking a monolith [Dev conf 2...
 
Curl with rust
Curl with rustCurl with rust
Curl with rust
 
JavaLand gRPC vs REST API
JavaLand gRPC vs REST APIJavaLand gRPC vs REST API
JavaLand gRPC vs REST API
 
REST API vs gRPC, which one should you use in breaking a monolith [Kdg.net 2018]
REST API vs gRPC, which one should you use in breaking a monolith [Kdg.net 2018]REST API vs gRPC, which one should you use in breaking a monolith [Kdg.net 2018]
REST API vs gRPC, which one should you use in breaking a monolith [Kdg.net 2018]
 
common mistakes when using libcurl
common mistakes when using libcurlcommon mistakes when using libcurl
common mistakes when using libcurl
 
HTTP/3 is next generation HTTP
HTTP/3 is next generation HTTPHTTP/3 is next generation HTTP
HTTP/3 is next generation HTTP
 
Docker Docker - Docker Security - Docker
Docker Docker - Docker Security - DockerDocker Docker - Docker Security - Docker
Docker Docker - Docker Security - Docker
 
A Modest Introduction to Swift
A Modest Introduction to SwiftA Modest Introduction to Swift
A Modest Introduction to Swift
 
WordPress RESTful API & Amazon API Gateway - WordCamp Kansai 2016
WordPress RESTful API & Amazon API Gateway - WordCamp Kansai 2016WordPress RESTful API & Amazon API Gateway - WordCamp Kansai 2016
WordPress RESTful API & Amazon API Gateway - WordCamp Kansai 2016
 
Ankara jug mayıs 2013 sunumu
Ankara jug mayıs 2013 sunumuAnkara jug mayıs 2013 sunumu
Ankara jug mayıs 2013 sunumu
 
HTTP/3 in curl
HTTP/3 in curlHTTP/3 in curl
HTTP/3 in curl
 
curl better
curl bettercurl better
curl better
 
How to use vim in Android Studio, Useful customization IdeaVim
How to use vim in Android Studio, Useful customization IdeaVimHow to use vim in Android Studio, Useful customization IdeaVim
How to use vim in Android Studio, Useful customization IdeaVim
 
HTTP/3 for everyone
HTTP/3 for everyoneHTTP/3 for everyone
HTTP/3 for everyone
 

Similar to "gRPC-Web: It’s All About Communication": Devoxx Ukraine 2019

DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Gr8Conf 2017
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Gr8Conf 2017DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Gr8Conf 2017
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Gr8Conf 2017Baruch Sadogursky
 
Let's contribute, HTML5Rocks/ko!
Let's contribute, HTML5Rocks/ko!Let's contribute, HTML5Rocks/ko!
Let's contribute, HTML5Rocks/ko!Chang W. Doh
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...Baruch Sadogursky
 
Librerías Opensoure de Square
Librerías Opensoure de Square Librerías Opensoure de Square
Librerías Opensoure de Square betabeers
 
Kernel load-balancing for Docker containers using IPVS
Kernel load-balancing for Docker containers using IPVSKernel load-balancing for Docker containers using IPVS
Kernel load-balancing for Docker containers using IPVSDocker, Inc.
 
Functional IoT: Hardware and Platform
Functional IoT: Hardware and PlatformFunctional IoT: Hardware and Platform
Functional IoT: Hardware and PlatformKiwamu Okabe
 
A little respect for MVC part 1 par Gegoire Lhotellier
A little respect for MVC part 1 par Gegoire LhotellierA little respect for MVC part 1 par Gegoire Lhotellier
A little respect for MVC part 1 par Gegoire LhotellierCocoaHeads France
 
Feedback en continu grâce au TDD et au AsCode
Feedback en continu grâce au TDD et au AsCodeFeedback en continu grâce au TDD et au AsCode
Feedback en continu grâce au TDD et au AsCodeHaja R
 
Take a Groovy REST
Take a Groovy RESTTake a Groovy REST
Take a Groovy RESTRestlet
 
gRPC 프레임워크를 만들며 알아보는 파이썬 - 파이콘2020
gRPC 프레임워크를 만들며 알아보는 파이썬  - 파이콘2020gRPC 프레임워크를 만들며 알아보는 파이썬  - 파이콘2020
gRPC 프레임워크를 만들며 알아보는 파이썬 - 파이콘2020재현 신
 
Emacs verilog-mode is coming to Debian, again
Emacs verilog-mode is coming to Debian, againEmacs verilog-mode is coming to Debian, again
Emacs verilog-mode is coming to Debian, againKiwamu Okabe
 
REST in Peace. Long live gRPC! @ Codineers
REST in Peace. Long live gRPC! @ CodineersREST in Peace. Long live gRPC! @ Codineers
REST in Peace. Long live gRPC! @ CodineersQAware GmbH
 
Aplicações realtime com gRPC
Aplicações realtime com gRPCAplicações realtime com gRPC
Aplicações realtime com gRPCLeandro Lugaresi
 
Mind your lang (for role=drinks at CSUN 2017)
Mind your lang (for role=drinks at CSUN 2017)Mind your lang (for role=drinks at CSUN 2017)
Mind your lang (for role=drinks at CSUN 2017)Adrian Roselli
 
Develop Android app using Golang
Develop Android app using GolangDevelop Android app using Golang
Develop Android app using GolangSeongJae Park
 
You got database in my cloud!
You got database  in my cloud!You got database  in my cloud!
You got database in my cloud!Liz Frost
 
Getting developers hooked on your API - Nicolas Garnier - Codemotion Amsterda...
Getting developers hooked on your API - Nicolas Garnier - Codemotion Amsterda...Getting developers hooked on your API - Nicolas Garnier - Codemotion Amsterda...
Getting developers hooked on your API - Nicolas Garnier - Codemotion Amsterda...Codemotion
 
Technical Product Owner or How to build technical backing for services
Technical Product Owner or How to build technical backing for servicesTechnical Product Owner or How to build technical backing for services
Technical Product Owner or How to build technical backing for servicesKrzysztof Debski
 

Similar to "gRPC-Web: It’s All About Communication": Devoxx Ukraine 2019 (20)

DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Gr8Conf 2017
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Gr8Conf 2017DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Gr8Conf 2017
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Gr8Conf 2017
 
Let's contribute, HTML5Rocks/ko!
Let's contribute, HTML5Rocks/ko!Let's contribute, HTML5Rocks/ko!
Let's contribute, HTML5Rocks/ko!
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
 
Librerías Opensoure de Square
Librerías Opensoure de Square Librerías Opensoure de Square
Librerías Opensoure de Square
 
Kernel load-balancing for Docker containers using IPVS
Kernel load-balancing for Docker containers using IPVSKernel load-balancing for Docker containers using IPVS
Kernel load-balancing for Docker containers using IPVS
 
Functional IoT: Hardware and Platform
Functional IoT: Hardware and PlatformFunctional IoT: Hardware and Platform
Functional IoT: Hardware and Platform
 
A little respect for MVC part 1 par Gegoire Lhotellier
A little respect for MVC part 1 par Gegoire LhotellierA little respect for MVC part 1 par Gegoire Lhotellier
A little respect for MVC part 1 par Gegoire Lhotellier
 
Graalvm with Groovy and Kotlin - Madrid GUG 2019
Graalvm with Groovy and Kotlin - Madrid GUG 2019Graalvm with Groovy and Kotlin - Madrid GUG 2019
Graalvm with Groovy and Kotlin - Madrid GUG 2019
 
Feedback en continu grâce au TDD et au AsCode
Feedback en continu grâce au TDD et au AsCodeFeedback en continu grâce au TDD et au AsCode
Feedback en continu grâce au TDD et au AsCode
 
Take a Groovy REST
Take a Groovy RESTTake a Groovy REST
Take a Groovy REST
 
gRPC 프레임워크를 만들며 알아보는 파이썬 - 파이콘2020
gRPC 프레임워크를 만들며 알아보는 파이썬  - 파이콘2020gRPC 프레임워크를 만들며 알아보는 파이썬  - 파이콘2020
gRPC 프레임워크를 만들며 알아보는 파이썬 - 파이콘2020
 
Emacs verilog-mode is coming to Debian, again
Emacs verilog-mode is coming to Debian, againEmacs verilog-mode is coming to Debian, again
Emacs verilog-mode is coming to Debian, again
 
REST in Peace. Long live gRPC! @ Codineers
REST in Peace. Long live gRPC! @ CodineersREST in Peace. Long live gRPC! @ Codineers
REST in Peace. Long live gRPC! @ Codineers
 
Angboard
AngboardAngboard
Angboard
 
Aplicações realtime com gRPC
Aplicações realtime com gRPCAplicações realtime com gRPC
Aplicações realtime com gRPC
 
Mind your lang (for role=drinks at CSUN 2017)
Mind your lang (for role=drinks at CSUN 2017)Mind your lang (for role=drinks at CSUN 2017)
Mind your lang (for role=drinks at CSUN 2017)
 
Develop Android app using Golang
Develop Android app using GolangDevelop Android app using Golang
Develop Android app using Golang
 
You got database in my cloud!
You got database  in my cloud!You got database  in my cloud!
You got database in my cloud!
 
Getting developers hooked on your API - Nicolas Garnier - Codemotion Amsterda...
Getting developers hooked on your API - Nicolas Garnier - Codemotion Amsterda...Getting developers hooked on your API - Nicolas Garnier - Codemotion Amsterda...
Getting developers hooked on your API - Nicolas Garnier - Codemotion Amsterda...
 
Technical Product Owner or How to build technical backing for services
Technical Product Owner or How to build technical backing for servicesTechnical Product Owner or How to build technical backing for services
Technical Product Owner or How to build technical backing for services
 

More from Alex Borysov

CloudExpo Frankfurt 2023 "Break me if you can: practical guide to building fa...
CloudExpo Frankfurt 2023 "Break me if you can: practical guide to building fa...CloudExpo Frankfurt 2023 "Break me if you can: practical guide to building fa...
CloudExpo Frankfurt 2023 "Break me if you can: practical guide to building fa...Alex Borysov
 
Devoxx Belgium 2022 gRPC Cornerstone: HTTP/2… or HTTP/3?
Devoxx Belgium 2022 gRPC Cornerstone: HTTP/2… or HTTP/3?Devoxx Belgium 2022 gRPC Cornerstone: HTTP/2… or HTTP/3?
Devoxx Belgium 2022 gRPC Cornerstone: HTTP/2… or HTTP/3?Alex Borysov
 
"Enabling Googley microservices with gRPC" at JDK.IO 2017
"Enabling Googley microservices with gRPC" at JDK.IO 2017"Enabling Googley microservices with gRPC" at JDK.IO 2017
"Enabling Googley microservices with gRPC" at JDK.IO 2017Alex Borysov
 
"Enabling Googley microservices with gRPC" at JEEConf 2017
"Enabling Googley microservices with gRPC" at JEEConf 2017"Enabling Googley microservices with gRPC" at JEEConf 2017
"Enabling Googley microservices with gRPC" at JEEConf 2017Alex Borysov
 
"Enabling Googley microservices with gRPC." at Devoxx France 2017
"Enabling Googley microservices with gRPC." at Devoxx France 2017"Enabling Googley microservices with gRPC." at Devoxx France 2017
"Enabling Googley microservices with gRPC." at Devoxx France 2017Alex Borysov
 
Enabling Googley microservices with HTTP/2 and gRPC.
Enabling Googley microservices with HTTP/2 and gRPC.Enabling Googley microservices with HTTP/2 and gRPC.
Enabling Googley microservices with HTTP/2 and gRPC.Alex Borysov
 

More from Alex Borysov (6)

CloudExpo Frankfurt 2023 "Break me if you can: practical guide to building fa...
CloudExpo Frankfurt 2023 "Break me if you can: practical guide to building fa...CloudExpo Frankfurt 2023 "Break me if you can: practical guide to building fa...
CloudExpo Frankfurt 2023 "Break me if you can: practical guide to building fa...
 
Devoxx Belgium 2022 gRPC Cornerstone: HTTP/2… or HTTP/3?
Devoxx Belgium 2022 gRPC Cornerstone: HTTP/2… or HTTP/3?Devoxx Belgium 2022 gRPC Cornerstone: HTTP/2… or HTTP/3?
Devoxx Belgium 2022 gRPC Cornerstone: HTTP/2… or HTTP/3?
 
"Enabling Googley microservices with gRPC" at JDK.IO 2017
"Enabling Googley microservices with gRPC" at JDK.IO 2017"Enabling Googley microservices with gRPC" at JDK.IO 2017
"Enabling Googley microservices with gRPC" at JDK.IO 2017
 
"Enabling Googley microservices with gRPC" at JEEConf 2017
"Enabling Googley microservices with gRPC" at JEEConf 2017"Enabling Googley microservices with gRPC" at JEEConf 2017
"Enabling Googley microservices with gRPC" at JEEConf 2017
 
"Enabling Googley microservices with gRPC." at Devoxx France 2017
"Enabling Googley microservices with gRPC." at Devoxx France 2017"Enabling Googley microservices with gRPC." at Devoxx France 2017
"Enabling Googley microservices with gRPC." at Devoxx France 2017
 
Enabling Googley microservices with HTTP/2 and gRPC.
Enabling Googley microservices with HTTP/2 and gRPC.Enabling Googley microservices with HTTP/2 and gRPC.
Enabling Googley microservices with HTTP/2 and gRPC.
 

Recently uploaded

Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)jennyeacort
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Developmentvyaparkranti
 
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfInnovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfYashikaSharma391629
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfStefano Stabellini
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...confluent
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationBradBedford3
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 

Recently uploaded (20)

Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Development
 
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfInnovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdf
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 

"gRPC-Web: It’s All About Communication": Devoxx Ukraine 2019