Rest Api Vs GRPC: Vladimir Dejanović Javaland
Rest Api Vs GRPC: Vladimir Dejanović Javaland
Rest Api Vs GRPC: Vladimir Dejanović Javaland
@JavaLandConf @VladimirD_42
Let’s Meet
Vladimir Dejanović
@JavaLandConf @VladimirD_42
Let’s Meet
Vladimir Dejanović
@JavaLandConf @VladimirD_42
Let’s Meet
Vladimir Dejanović
@JavaLandConf @VladimirD_42
Let’s Meet
@JavaLandConf @VladimirD_42
Agenda
@JavaLandConf @VladimirD_42
Agenda
REST
@JavaLandConf @VladimirD_42
Agenda
REST
gRPC
@JavaLandConf @VladimirD_42
Agenda
REST
gRPC
gRPC vs REST
@JavaLandConf @VladimirD_42
Agenda
REST
gRPC
gRPC vs REST
Questions
@JavaLandConf @VladimirD_42
What is REST?
@JavaLandConf @VladimirD_42
REST
@JavaLandConf @VladimirD_42
REST
http://www.ics.uci.edu/~fielding/pubs
/dissertation/rest_arch_style.htm
@JavaLandConf @VladimirD_42
REST
Client-Server Architecture
@JavaLandConf @VladimirD_42
REST
Client-Server Architecture
Statelessness
@JavaLandConf @VladimirD_42
REST
Client-Server Architecture
Statelessness
Cacheability
@JavaLandConf @VladimirD_42
REST
Client-Server Architecture
Statelessness
Cacheability
Layered System
@JavaLandConf @VladimirD_42
REST
Client-Server Architecture
Statelessness
Cacheability
Layered System
Code on Demand (Optional)
@JavaLandConf @VladimirD_42
REST
Client-Server Architecture
Statelessness
Cacheability
Layered System
Code on Demand (Optional)
Uniform Interface
@JavaLandConf @VladimirD_42
REST in real life
@JavaLandConf @VladimirD_42
REST in real life
@JavaLandConf @VladimirD_42
REST in real life
@JavaLandConf @VladimirD_42
REST in real life
@JavaLandConf @VladimirD_42
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);
}
@JavaLandConf @VladimirD_42
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);
}
@JavaLandConf @VladimirD_42
@JavaLandConf @VladimirD_42
gRPC
@JavaLandConf @VladimirD_42
What is gRPC?
@JavaLandConf @VladimirD_42
gRPC
@JavaLandConf @VladimirD_42
Remote Procedure Call
@JavaLandConf @VladimirD_42
Remote Procedure Call
RMI
@JavaLandConf @VladimirD_42
Remote Procedure Call
RMI
CORBA
@JavaLandConf @VladimirD_42
https://grpc.io/img/landing-2.svg
@JavaLandConf @VladimirD_42
https://grpc.io/img/landing-2.svg
@JavaLandConf @VladimirD_42
https://grpc.io/img/landing-2.svg
@JavaLandConf @VladimirD_42
https://grpc.io/img/landing-2.svg
@JavaLandConf @VladimirD_42
https://grpc.io/img/landing-2.svg
@JavaLandConf @VladimirD_42
gRPC
C++
@JavaLandConf @VladimirD_42
gRPC
C++ Java
@JavaLandConf @VladimirD_42
gRPC
C++ Java Python
@JavaLandConf @VladimirD_42
gRPC
C++ Java Python
Go
@JavaLandConf @VladimirD_42
gRPC
C++ Java Python
Go Ruby
@JavaLandConf @VladimirD_42
gRPC
C++ Java Python
Go Ruby C#
@JavaLandConf @VladimirD_42
gRPC
C++ Java Python
Go Ruby C#
Node.js
@JavaLandConf @VladimirD_42
gRPC
C++ Java Python
Go Ruby C#
@JavaLandConf @VladimirD_42
gRPC
C++ Java Python
Go Ruby C#
@JavaLandConf @VladimirD_42
gRPC
C++ Java Python
Go Ruby C#
PHP
@JavaLandConf @VladimirD_42
gRPC
C++ Java Python
Go Ruby C#
PHP
@JavaLandConf @VladimirD_42
gRPC vs REST
@JavaLandConf @VladimirD_42
@JavaLandConf @VladimirD_42
gRPC vs REST
@JavaLandConf @VladimirD_42
@JavaLandConf @VladimirD_42
gRPC vs REST
https://grpc.io/
@JavaLandConf @VladimirD_42
gRPC vs REST
https://grpc.io/
https://github.com/grpc/grpc-java
@JavaLandConf @VladimirD_42
gRPC
@JavaLandConf @VladimirD_42
gRPC
@JavaLandConf @VladimirD_42
gRPC
@JavaLandConf @VladimirD_42
gRPC
@JavaLandConf @VladimirD_42
gRPC
@JavaLandConf @VladimirD_42
gRPC
@JavaLandConf @VladimirD_42
gRPC
@JavaLandConf @VladimirD_42
gRPC
@JavaLandConf @VladimirD_42
gRPC
@JavaLandConf @VladimirD_42
gRPC vs REST
@JavaLandConf @VladimirD_42
gRPC vs REST
@JavaLandConf @VladimirD_42
gRPC
@JavaLandConf @VladimirD_42
gRPC
IDL
@JavaLandConf @VladimirD_42
gRPC vs REST
@JavaLandConf @VladimirD_42
gRPC vs REST
@JavaLandConf @VladimirD_42
gRPC vs REST
@JavaLandConf @VladimirD_42
...
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);
...
@JavaLandConf @VladimirD_42
...
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);
...
@JavaLandConf @VladimirD_42
...
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);
...
@JavaLandConf @VladimirD_42
...
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);
...
@JavaLandConf @VladimirD_42
...
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);
...
@JavaLandConf @VladimirD_42
...
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);
...
@JavaLandConf @VladimirD_42
...
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);
...
@JavaLandConf @VladimirD_42
gRPC
IDL
HTTP/2
@JavaLandConf @VladimirD_42
gRPC vs REST
@JavaLandConf @VladimirD_42
gRPC vs REST
@JavaLandConf @VladimirD_42
gRPC
IDL
HTTP/2
Protobuf 3
@JavaLandConf @VladimirD_42
gRPC vs REST
@JavaLandConf @VladimirD_42
gRPC vs REST
JSON Proto
@JavaLandConf @VladimirD_42
gRPC vs REST
@JavaLandConf @VladimirD_42
gRPC vs REST
JSON Proto
@JavaLandConf @VladimirD_42
gRPC vs REST
@JavaLandConf @VladimirD_42
gRPC vs REST
@JavaLandConf @VladimirD_42
Big Difference
@JavaLandConf @VladimirD_42
Big Difference
REST is about
Resources
@JavaLandConf @VladimirD_42
Big Difference
RPC is about
Remote Procedure Calls
@JavaLandConf @VladimirD_42
Big Difference
@JavaLandConf @VladimirD_42
Big Difference
@JavaLandConf @VladimirD_42
Big Difference
@JavaLandConf @VladimirD_42
Big Difference
@JavaLandConf @VladimirD_42
Big Difference
@JavaLandConf @VladimirD_42
Big Difference
@JavaLandConf @VladimirD_42
Big Difference
@JavaLandConf @VladimirD_42
gRPC Code Example
https://github.com/vladimir-dejanovic/
grpc-bank-example
@JavaLandConf @VladimirD_42
gRPC vs REST
@JavaLandConf @VladimirD_42
gRPC vs REST
@JavaLandConf @VladimirD_42
Wild West
gRPC vs REST
@JavaLandConf @VladimirD_42
gRPC vs REST
@JavaLandConf @VladimirD_42
gRPC vs REST
REST
@JavaLandConf @VladimirD_42
gRPC vs REST
REST
@JavaLandConf @VladimirD_42
gRPC vs REST
REST gRPC
@JavaLandConf @VladimirD_42
gRPC vs REST
@JavaLandConf @VladimirD_42
gRPC vs REST
@JavaLandConf @VladimirD_42
gRPC vs REST
@JavaLandConf @VladimirD_42
gRPC vs REST
@JavaLandConf @VladimirD_42
gRPC vs REST
CRUD or Other?
@JavaLandConf @VladimirD_42
gRPC vs REST
@JavaLandConf @VladimirD_42
gRPC vs REST
@JavaLandConf @VladimirD_42
gRPC vs REST
@JavaLandConf @VladimirD_42
Thank You
@JavaLandConf @VladimirD_42
Questions
@VladimirD_42
vladimir@itshark.xyz
@JavaLandConf @VladimirD_42