Nothing Special   »   [go: up one dir, main page]

Rest Api Vs GRPC: Vladimir Dejanović Javaland

Download as pdf or txt
Download as pdf or txt
You are on page 1of 115

REST API vs gRPC

JavaLand Vladimir Dejanović


13 March 2018

@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

Vladimir Dejanović and Others...

@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

gRPC Remote Procedure Call

@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#

Node.js Android Java

@JavaLandConf @VladimirD_42
gRPC
C++ Java Python

Go Ruby C#

Node.js Android Java Objective-C

@JavaLandConf @VladimirD_42
gRPC
C++ Java Python

Go Ruby C#

Node.js Android Java Objective-C

PHP

@JavaLandConf @VladimirD_42
gRPC
C++ Java Python

Go Ruby C#

Node.js Android Java Objective-C

PHP

@JavaLandConf @VladimirD_42
gRPC vs REST

@JavaLandConf @VladimirD_42
@JavaLandConf @VladimirD_42
gRPC vs REST

Both Language agnostic

@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

REST support more languages

@JavaLandConf @VladimirD_42
gRPC vs REST

REST support more languages

More than 4 types :-)

@JavaLandConf @VladimirD_42
gRPC

@JavaLandConf @VladimirD_42
gRPC
IDL

@JavaLandConf @VladimirD_42
gRPC vs REST

Schema is “optional” in REST

@JavaLandConf @VladimirD_42
gRPC vs REST

Schema is “optional” in REST

REST code or schema first

@JavaLandConf @VladimirD_42
gRPC vs REST

Schema is “optional” in REST

REST code or schema first

gRPC is schema first

@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);

rpc ListenToNotifications(Account) returns (stream AccountNotification);

rpc RequestTransfer(stream RequestMoney) returns (stream RequestStatus);


}

...

@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);

rpc ListenToNotifications(Account) returns (stream AccountNotification);

rpc RequestTransfer(stream RequestMoney) returns (stream RequestStatus);


}

...

@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);

rpc ListenToNotifications(Account) returns (stream AccountNotification);

rpc RequestTransfer(stream RequestMoney) returns (stream RequestStatus);


}

...

@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);

rpc ListenToNotifications(Account) returns (stream AccountNotification);

rpc RequestTransfer(stream RequestMoney) returns (stream RequestStatus);


}

...

@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);

rpc ListenToNotifications(Account) returns (stream AccountNotification);

rpc RequestTransfer(stream RequestMoney) returns (stream RequestStatus);


}

...

@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);

rpc ListenToNotifications(Account) returns (stream AccountNotification);

rpc RequestTransfer(stream RequestMoney) returns (stream RequestStatus);


}

...

@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);

rpc ListenToNotifications(Account) returns (stream AccountNotification);

rpc RequestTransfer(stream RequestMoney) returns (stream RequestStatus);


}

...

@JavaLandConf @VladimirD_42
gRPC
IDL

HTTP/2

@JavaLandConf @VladimirD_42
gRPC vs REST

HTTP2 backed into gRPC

@JavaLandConf @VladimirD_42
gRPC vs REST

HTTP2 backed into gRPC

Extra work “needed” for REST

@JavaLandConf @VladimirD_42
gRPC
IDL

HTTP/2

Protobuf 3

@JavaLandConf @VladimirD_42
gRPC vs REST

REST is not JSON over HTTP

@JavaLandConf @VladimirD_42
gRPC vs REST

JSON Proto

@JavaLandConf @VladimirD_42
gRPC vs REST

JSON Proto JSON Proto

@JavaLandConf @VladimirD_42
gRPC vs REST

JSON Proto

@JavaLandConf @VladimirD_42
gRPC vs REST

JSON Proto JSON Proto

@JavaLandConf @VladimirD_42
gRPC vs REST

Protocol Buffer with 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

Law & Order


Wild West

@JavaLandConf @VladimirD_42
gRPC vs REST

Law & Order


Wild West

REST

@JavaLandConf @VladimirD_42
gRPC vs REST

Law & Order


Wild West

REST

@JavaLandConf @VladimirD_42
gRPC vs REST

Law & Order


Wild West

REST gRPC

@JavaLandConf @VladimirD_42
gRPC vs REST

Some questions to ask

@JavaLandConf @VladimirD_42
gRPC vs REST

Who will be consumers?

@JavaLandConf @VladimirD_42
gRPC vs REST

Who will be consumers?

Mobile / Web / Other?

@JavaLandConf @VladimirD_42
gRPC vs REST

What is the use case?

@JavaLandConf @VladimirD_42
gRPC vs REST

What is the use case?

CRUD or Other?

@JavaLandConf @VladimirD_42
gRPC vs REST

What are internal policies and rules?

@JavaLandConf @VladimirD_42
gRPC vs REST

What are internal policies and rules?

Toward frameworks, protocols and others

@JavaLandConf @VladimirD_42
gRPC vs REST

What is the problem


that you are solving

@JavaLandConf @VladimirD_42
Thank You

@JavaLandConf @VladimirD_42
Questions

@VladimirD_42

vladimir@itshark.xyz

@JavaLandConf @VladimirD_42

You might also like