SlideShare a Scribd company logo
1 of 127
Download to read offline
@kgd_net @VladimirD_42
REST API vs gRPC
Which One Should You Use
in Breaking a Monolith
Vladimir Dejanović
26 September 2018
@VladimirD_42
Vladimir Dejanović
Let’s Meet
@VladimirD_42
vladimir@itshark.xyz
http://itshark.xyz
@kgd_net
@VladimirD_42
Vladimir Dejanović
Let’s Meet
http://itshark.xyz
@kgd_net
@VladimirD_42
Vladimir Dejanović
Let’s Meet
@kgd_net
@VladimirD_42
Vladimir Dejanović
Let’s Meet
and Others...
@kgd_net
@VladimirD_42@kgd_net
Agenda
@VladimirD_42@kgd_net
Agenda
REST
@VladimirD_42@kgd_net
Agenda
gRPC
REST
@VladimirD_42@kgd_net
Agenda
gRPC
REST vs gRPC in breaking Monolith
REST
@VladimirD_42@kgd_net
Agenda
gRPC
Questions
REST vs gRPC in breaking Monolith
REST
@VladimirD_42@kgd_net
What is REST?
@VladimirD_42@kgd_net
REST
@VladimirD_42@kgd_net
REST
http://www.ics.uci.edu/~fielding/pubs/di
ssertation/rest_arch_style.htm
@VladimirD_42@kgd_net
REST
Client-Server Architecture
@VladimirD_42@kgd_net
REST
Statelessness
Client-Server Architecture
@VladimirD_42@kgd_net
REST
Cacheability
Statelessness
Client-Server Architecture
@VladimirD_42@kgd_net
REST
Cacheability
Layered System
Statelessness
Client-Server Architecture
@VladimirD_42@kgd_net
REST
Cacheability
Code on Demand (Optional)
Layered System
Statelessness
Client-Server Architecture
@VladimirD_42@kgd_net
REST
Cacheability
Code on Demand (Optional)
Layered System
Statelessness
Uniform Interface
Client-Server Architecture
@VladimirD_42@kgd_net
REST in Real Life
@VladimirD_42@kgd_net
REST in Real Life
@VladimirD_42@kgd_net
REST in Real Life
@VladimirD_42@kgd_net
REST in Real Life
@VladimirD_42@kgd_net
REST in Real Life
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
@RepositoryRestResource(collectionResourceRel = "people",
path = "people")
public interface PersonRepository
extends MongoRepository<Person, String> {
List<Person> findByLastName(@Param("name") String name);
}
@VladimirD_42@kgd_net
REST in Real Life
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
@RepositoryRestResource(collectionResourceRel = "people",
path = "people")
public interface PersonRepository
extends MongoRepository<Person, String> {
List<Person> findByLastName(@Param("name") String name);
}
@VladimirD_42@kgd_net
@VladimirD_42@kgd_net
What is gRPC?
@VladimirD_42@kgd_net
gRPC
gRPC Remote Procedure Call
@VladimirD_42@kgd_net
Remote Procedure Call
@VladimirD_42@kgd_net
Remote Procedure Call
RMI
@VladimirD_42@kgd_net
Remote Procedure Call
RMI
CORBA
@VladimirD_42@kgd_net
https://grpc.io/img/landing-2.svg
@VladimirD_42@kgd_net
https://grpc.io/img/landing-2.svg
@VladimirD_42@kgd_net
https://grpc.io/img/landing-2.svg
@VladimirD_42@kgd_net
https://grpc.io/img/landing-2.svg
@VladimirD_42@kgd_net
https://grpc.io/img/landing-2.svg
@VladimirD_42@kgd_net
gRPC
C++
@VladimirD_42@kgd_net
gRPC
C++ Java
@VladimirD_42@kgd_net
gRPC
C++ Java Python
@VladimirD_42@kgd_net
gRPC
C++ Java Python
Go
@VladimirD_42@kgd_net
gRPC
C++ Java Python
Go Ruby
@VladimirD_42@kgd_net
gRPC
C++ Java Python
Go Ruby C#
@VladimirD_42@kgd_net
gRPC
C++ Java Python
Go
Node.js
Ruby C#
@VladimirD_42@kgd_net
gRPC
C++ Java Python
Go
Node.js
Ruby C#
Android Java
@VladimirD_42@kgd_net
gRPC
C++ Java Python
Go
Node.js
Ruby C#
Objective-CAndroid Java
@VladimirD_42@kgd_net
gRPC
C++ Java Python
Go
Node.js
Ruby C#
Objective-CAndroid Java
PHP
@VladimirD_42@kgd_net
gRPC
C++ Java Python
Go
Node.js
Ruby C#
Objective-CAndroid Java
PHP Dart
@VladimirD_42@kgd_net
gRPC
C++ Java Python
Go
Node.js
Ruby C#
Objective-CAndroid Java
PHP Dart
@VladimirD_42@kgd_net
REST vs gRPC
in breaking Monolith
@VladimirD_42@kgd_net
@VladimirD_42@kgd_net
@VladimirD_42@kgd_net
@VladimirD_42@kgd_net
ref:http://assets.bonappetit.com/photos/57d32e45bd794aa9132639a4/master/w_625,c_limit/lernert-sander-cubes-crop2.jpg
@VladimirD_42@kgd_net
REST vs gRPC
@VladimirD_42@kgd_net
REST vs gRPC
@VladimirD_42@kgd_net
REST vs gRPC
@VladimirD_42@kgd_net
REST vs gRPC
Both support multiple Languages
@VladimirD_42@kgd_net
REST vs gRPC
Both support multiple Languages
REST support much more
@VladimirD_42@kgd_net
@VladimirD_42@kgd_net
@VladimirD_42@kgd_net
REST vs gRPC
https://grpc.io/
@VladimirD_42@kgd_net
REST vs gRPC
https://grpc.io/
https://github.com/grpc/grpc-java
@VladimirD_42@kgd_net
gRPC
@VladimirD_42@kgd_net
gRPC
@VladimirD_42@kgd_net
gRPC
@VladimirD_42@kgd_net
gRPC
@VladimirD_42@kgd_net
gRPC
@VladimirD_42@kgd_net
gRPC
@VladimirD_42@kgd_net
gRPC
@VladimirD_42@kgd_net
gRPC
@VladimirD_42@kgd_net
gRPC
@VladimirD_42@kgd_net
REST vs gRPC
REST support more than 4 types
@VladimirD_42@kgd_net
gRPC
@VladimirD_42@kgd_net
gRPC
IDL
@VladimirD_42@kgd_net
REST vs gRPC
Schema is “optional” in REST
@VladimirD_42@kgd_net
REST vs gRPC
Schema is “optional” in REST
REST code or schema first
@VladimirD_42@kgd_net
REST vs gRPC
Schema is “optional” in REST
REST code or schema first
gRPC is schema first
@VladimirD_42@kgd_net
...
message TransferMoney {
int32 trans_id = 1;
int32 from_account_number = 2;
int32 to_account_number = 3;
double ammount = 4;
string message = 5;
}
service Bank {
rpc Transfer(TransferMoney) returns (TransferConfirmation);
rpc ListenToNotifications(Account) returns (stream AccountNotification);
rpc RequestTransfer(stream RequestMoney) returns (stream RequestStatus);
}
...
@VladimirD_42@kgd_net
...
message TransferMoney {
int32 trans_id = 1;
int32 from_account_number = 2;
int32 to_account_number = 3;
double ammount = 4;
string message = 5;
}
service Bank {
rpc Transfer(TransferMoney) returns (TransferConfirmation);
rpc ListenToNotifications(Account) returns (stream AccountNotification);
rpc RequestTransfer(stream RequestMoney) returns (stream RequestStatus);
}
...
@VladimirD_42@kgd_net
...
message TransferMoney {
int32 trans_id = 1;
int32 from_account_number = 2;
int32 to_account_number = 3;
double ammount = 4;
string message = 5;
}
service Bank {
rpc Transfer(TransferMoney) returns (TransferConfirmation);
rpc ListenToNotifications(Account) returns (stream AccountNotification);
rpc RequestTransfer(stream RequestMoney) returns (stream RequestStatus);
}
...
@VladimirD_42@kgd_net
...
message TransferMoney {
int32 trans_id = 1;
int32 from_account_number = 2;
int32 to_account_number = 3;
double ammount = 4;
string message = 5;
}
service Bank {
rpc Transfer(TransferMoney) returns (TransferConfirmation);
rpc ListenToNotifications(Account) returns (stream AccountNotification);
rpc RequestTransfer(stream RequestMoney) returns (stream RequestStatus);
}
...
@VladimirD_42@kgd_net
...
message TransferMoney {
int32 trans_id = 1;
int32 from_account_number = 2;
int32 to_account_number = 3;
double ammount = 4;
string message = 5;
}
service Bank {
rpc Transfer(TransferMoney) returns (TransferConfirmation);
rpc ListenToNotifications(Account) returns (stream AccountNotification);
rpc RequestTransfer(stream RequestMoney) returns (stream RequestStatus);
}
...
@VladimirD_42@kgd_net
...
message TransferMoney {
int32 trans_id = 1;
int32 from_account_number = 2;
int32 to_account_number = 3;
double ammount = 4;
string message = 5;
}
service Bank {
rpc Transfer(TransferMoney) returns (TransferConfirmation);
rpc ListenToNotifications(Account) returns (stream AccountNotification);
rpc RequestTransfer(stream RequestMoney) returns (stream RequestStatus);
}
...
@VladimirD_42@kgd_net
...
message TransferMoney {
int32 trans_id = 1;
int32 from_account_number = 2;
int32 to_account_number = 3;
double ammount = 4;
string message = 5;
}
service Bank {
rpc Transfer(TransferMoney) returns (TransferConfirmation);
rpc ListenToNotifications(Account) returns (stream AccountNotification);
rpc RequestTransfer(stream RequestMoney) returns (stream RequestStatus);
}
...
@VladimirD_42@kgd_net
...
message TransferMoney {
int32 trans_id = 1;
int32 from_account_number = 2;
int32 to_account_number = 3;
double ammount = 4;
string message = 5;
}
service Bank {
rpc Transfer(TransferMoney) returns (TransferConfirmation);
rpc ListenToNotifications(Account) returns (stream AccountNotification);
rpc RequestTransfer(stream RequestMoney) returns (stream RequestStatus);
}
...
@VladimirD_42@kgd_net
...
message TransferMoney {
int32 trans_id = 1;
int32 from_account_number = 2;
int32 to_account_number = 3;
double ammount = 4;
string message = 5;
}
service Bank {
rpc Transfer(TransferMoney) returns (TransferConfirmation);
rpc ListenToNotifications(Account) returns (stream AccountNotification);
rpc RequestTransfer(stream RequestMoney) returns (stream RequestStatus);
}
...
@VladimirD_42@kgd_net
...
message TransferMoney {
int32 trans_id = 1;
int32 from_account_number = 2;
int32 to_account_number = 3;
double ammount = 4;
string message = 5;
}
service Bank {
rpc Transfer(TransferMoney) returns (TransferConfirmation);
rpc ListenToNotifications(Account) returns (stream AccountNotification);
rpc RequestTransfer(stream RequestMoney) returns (stream RequestStatus);
}
...
@VladimirD_42@kgd_net
gRPC
IDL
HTTP/2
@VladimirD_42@kgd_net
REST vs gRPC
HTTP2 backed into gRPC
@VladimirD_42@kgd_net
REST vs gRPC
HTTP2 backed into gRPC
Extra work “needed” for REST
@VladimirD_42@kgd_net
gRPC
IDL
HTTP/2
Protobuf 3
@VladimirD_42@kgd_net
Protocol Buffers
http://itshark.xyz/posts/2018/7/11/Proto
col_Buffers_basic_stuff_you_need_to_kn
ow
@VladimirD_42@kgd_net
Protocol Buffers
http://itshark.xyz/posts/2018/7/11/Proto
col_Buffers_basic_stuff_you_need_to_kn
ow
https://www.youtube.com/watch
?v=oDIkgNchrVY
@VladimirD_42@kgd_net
REST vs gRPC
REST is not JSON over HTTP
@VladimirD_42@kgd_net
REST vs gRPC
JSON Proto
@VladimirD_42@kgd_net
REST vs gRPC
JSON Proto ProtoJSON
@VladimirD_42@kgd_net
REST vs gRPC
JSON Proto
@VladimirD_42@kgd_net
REST vs gRPC
JSON Proto ProtoJSON
@VladimirD_42@kgd_net
REST vs gRPC
Protocol Buffer with REST
@VladimirD_42@kgd_net
Big Difference
@VladimirD_42@kgd_net
Big Difference
REST is about Resources
@VladimirD_42@kgd_net
Big Difference
REST is about Resources
RPC is about Remote Procedure Calls
@VladimirD_42@kgd_net
@VladimirD_42@kgd_net
@VladimirD_42@kgd_net
@VladimirD_42@kgd_net
@VladimirD_42@kgd_net
@VladimirD_42@kgd_net
@VladimirD_42@kgd_net
@VladimirD_42@kgd_net
gRPC code example
https://github.com/vladimir-dejanovic/g
rpc-bank-example
@VladimirD_42@kgd_net
REST vs gRPC
@VladimirD_42@kgd_net
REST vs gRPC
@VladimirD_42@kgd_net
REST vs gRPCWildWest
@VladimirD_42@kgd_net
REST vs gRPCWildWest
Law&Order
@VladimirD_42@kgd_net
REST vs gRPCWildWest
Law&Order
REST
@VladimirD_42@kgd_net
REST vs gRPCWildWest
Law&Order
REST
@VladimirD_42@kgd_net
REST vs gRPCWildWest
Law&Order
gRPCREST
@VladimirD_42@kgd_net
Some Questions
@VladimirD_42@kgd_net
Some Questions
Who will be consumers?
@VladimirD_42@kgd_net
Some Questions
Who will be consumers?
Mobile / Web / Other?
@VladimirD_42@kgd_net
Some Questions
What is the use case?
@VladimirD_42@kgd_net
Some Questions
What is the use case?
CRUD or Other?
@VladimirD_42@kgd_net
Some Questions
What are internal policies and rules?
@VladimirD_42@kgd_net
Some Questions
What are internal policies and rules?
Toward frameworks, protocols & others
@VladimirD_42@kgd_net
Some Questions
What is the problem
that you are solving?
@VladimirD_42@kgd_net
Thank You
@VladimirD_42
Questions
@VladimirD_42
vladimir@itshark.xyz
http://itshark.xyz
@kgd_net

More Related Content

Similar to REST API vs gRPC, which one should you use in breaking a monolith [Kdg.net 2018]

Similar to REST API vs gRPC, which one should you use in breaking a monolith [Kdg.net 2018] (20)

How to be a smart contract engineer
How to be a smart contract engineerHow to be a smart contract engineer
How to be a smart contract engineer
 
Robert Kubis - gRPC - boilerplate to high-performance scalable APIs - code.t...
 Robert Kubis - gRPC - boilerplate to high-performance scalable APIs - code.t... Robert Kubis - gRPC - boilerplate to high-performance scalable APIs - code.t...
Robert Kubis - gRPC - boilerplate to high-performance scalable APIs - code.t...
 
ql.io at NodePDX
ql.io at NodePDXql.io at NodePDX
ql.io at NodePDX
 
Make gRPC great again
Make gRPC great againMake gRPC great again
Make gRPC great again
 
GraphQL vs Traditional Rest API [GeeCon Prague 2018]
GraphQL vs Traditional Rest API [GeeCon Prague 2018]GraphQL vs Traditional Rest API [GeeCon Prague 2018]
GraphQL vs Traditional Rest API [GeeCon Prague 2018]
 
Samza at LinkedIn
Samza at LinkedInSamza at LinkedIn
Samza at LinkedIn
 
Cadence: The Only Workflow Platform You'll Ever Need
Cadence: The Only Workflow Platform You'll Ever NeedCadence: The Only Workflow Platform You'll Ever Need
Cadence: The Only Workflow Platform You'll Ever Need
 
ArchSummit Shenzhen - Using sagas to maintain data consistency in a microserv...
ArchSummit Shenzhen - Using sagas to maintain data consistency in a microserv...ArchSummit Shenzhen - Using sagas to maintain data consistency in a microserv...
ArchSummit Shenzhen - Using sagas to maintain data consistency in a microserv...
 
WCM Transfer Services
WCM Transfer Services WCM Transfer Services
WCM Transfer Services
 
stream-processing-at-linkedin-with-apache-samza
stream-processing-at-linkedin-with-apache-samzastream-processing-at-linkedin-with-apache-samza
stream-processing-at-linkedin-with-apache-samza
 
[CB20]-U25 Automated Hunting for Cross-Server Xrefs in Microsoft RPC and COM ...
[CB20]-U25 Automated Hunting for Cross-Server Xrefs in Microsoft RPC and COM ...[CB20]-U25 Automated Hunting for Cross-Server Xrefs in Microsoft RPC and COM ...
[CB20]-U25 Automated Hunting for Cross-Server Xrefs in Microsoft RPC and COM ...
 
Tribeflow on bitcoin data
Tribeflow on bitcoin dataTribeflow on bitcoin data
Tribeflow on bitcoin data
 
GraphQL vs Traditional Rest API
GraphQL vs Traditional Rest APIGraphQL vs Traditional Rest API
GraphQL vs Traditional Rest API
 
gRPC - czyli jak skutecznie rozmawiać (rg-dev#14)
gRPC - czyli jak skutecznie rozmawiać (rg-dev#14)gRPC - czyli jak skutecznie rozmawiać (rg-dev#14)
gRPC - czyli jak skutecznie rozmawiać (rg-dev#14)
 
Microservices Communication Patterns with gRPC
Microservices Communication Patterns with gRPCMicroservices Communication Patterns with gRPC
Microservices Communication Patterns with gRPC
 
eProsima RPC over DDS - Connext Conf London October 2015
eProsima RPC over DDS - Connext Conf London October 2015 eProsima RPC over DDS - Connext Conf London October 2015
eProsima RPC over DDS - Connext Conf London October 2015
 
Testable Code
Testable CodeTestable Code
Testable Code
 
Dataflows: The abstraction that powers Big Data by Raul Castro Fernandez at ...
 Dataflows: The abstraction that powers Big Data by Raul Castro Fernandez at ... Dataflows: The abstraction that powers Big Data by Raul Castro Fernandez at ...
Dataflows: The abstraction that powers Big Data by Raul Castro Fernandez at ...
 
InfluxDB 101 – Concepts and Architecture by Michael DeSa, Software Engineer |...
InfluxDB 101 – Concepts and Architecture by Michael DeSa, Software Engineer |...InfluxDB 101 – Concepts and Architecture by Michael DeSa, Software Engineer |...
InfluxDB 101 – Concepts and Architecture by Michael DeSa, Software Engineer |...
 
Oracle Goldengate for Big Data - LendingClub Implementation
Oracle Goldengate for Big Data - LendingClub ImplementationOracle Goldengate for Big Data - LendingClub Implementation
Oracle Goldengate for Big Data - LendingClub Implementation
 

More from Vladimir Dejanovic

More from Vladimir Dejanovic (16)

What limitations & problems of REST API can be solved with GraphQL [jPrime 2019]
What limitations & problems of REST API can be solved with GraphQL [jPrime 2019]What limitations & problems of REST API can be solved with GraphQL [jPrime 2019]
What limitations & problems of REST API can be solved with GraphQL [jPrime 2019]
 
Micronaut, Dragon-Slayer (Spring/boot) or just another framework [GeeCON Krak...
Micronaut, Dragon-Slayer (Spring/boot) or just another framework [GeeCON Krak...Micronaut, Dragon-Slayer (Spring/boot) or just another framework [GeeCON Krak...
Micronaut, Dragon-Slayer (Spring/boot) or just another framework [GeeCON Krak...
 
GraphQL in Java World [Workshop RivieraDev 2019]
GraphQL in Java World [Workshop RivieraDev 2019]GraphQL in Java World [Workshop RivieraDev 2019]
GraphQL in Java World [Workshop RivieraDev 2019]
 
What Users Want, A/B testing explained [CodeteCon 2018]
What Users Want, A/B testing explained [CodeteCon 2018]What Users Want, A/B testing explained [CodeteCon 2018]
What Users Want, A/B testing explained [CodeteCon 2018]
 
GeeCON 2018 GraphQL vs Traditional REST API
GeeCON 2018 GraphQL vs Traditional REST APIGeeCON 2018 GraphQL vs Traditional REST API
GeeCON 2018 GraphQL vs Traditional REST API
 
Java Day Istanbul 2018 GraphQL vs Traditional REST API
Java Day Istanbul 2018 GraphQL vs Traditional REST APIJava Day Istanbul 2018 GraphQL vs Traditional REST API
Java Day Istanbul 2018 GraphQL vs Traditional REST API
 
Devoxx France 2018 GraphQL vs Traditional REST API
Devoxx France 2018 GraphQL vs Traditional REST APIDevoxx France 2018 GraphQL vs Traditional REST API
Devoxx France 2018 GraphQL vs Traditional REST API
 
Java land What Users Want, A/B testing explained
Java land What Users Want, A/B testing explainedJava land What Users Want, A/B testing explained
Java land What Users Want, A/B testing explained
 
Java One Secret of developing high performance website, with no budget
Java One Secret of developing high performance website, with no budgetJava One Secret of developing high performance website, with no budget
Java One Secret of developing high performance website, with no budget
 
Voxxed Days Belgrade - Changing wheels on moving car, from monolith to micros...
Voxxed Days Belgrade - Changing wheels on moving car, from monolith to micros...Voxxed Days Belgrade - Changing wheels on moving car, from monolith to micros...
Voxxed Days Belgrade - Changing wheels on moving car, from monolith to micros...
 
What users want [DevoxxPL]
What users want [DevoxxPL]What users want [DevoxxPL]
What users want [DevoxxPL]
 
Secret of developing high performance website, with no budget in small amount...
Secret of developing high performance website, with no budget in small amount...Secret of developing high performance website, with no budget in small amount...
Secret of developing high performance website, with no budget in small amount...
 
Changing wheels on moving car, from monolith to microservices by using api's V2
Changing wheels on moving car, from monolith to microservices by using api's V2Changing wheels on moving car, from monolith to microservices by using api's V2
Changing wheels on moving car, from monolith to microservices by using api's V2
 
Changing wheels on moving car, from monolith to microservices by using api's
Changing wheels on moving car, from monolith to microservices by using api'sChanging wheels on moving car, from monolith to microservices by using api's
Changing wheels on moving car, from monolith to microservices by using api's
 
Pain of growing up, and moving to large scale
Pain of growing up, and moving to large scalePain of growing up, and moving to large scale
Pain of growing up, and moving to large scale
 
What users want
What users wantWhat users want
What users want
 

Recently uploaded

%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
masabamasaba
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
masabamasaba
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
masabamasaba
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
VictoriaMetrics
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
chiefasafspells
 

Recently uploaded (20)

Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
WSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaSWSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaS
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 

REST API vs gRPC, which one should you use in breaking a monolith [Kdg.net 2018]