Slide 1

Slide 1 text

gRPC on Spring Boot (Kotlin) 2017/11/17 M3 Tech Talk #82 @suusan2go

Slide 2

Slide 2 text

Զ is ୭ • Name
 Kenta Suzuki • like
 Rails / Ruby / JS(React / ES next) / Golang
 ࠷ۙ͸Kotlin & Spring Boot • ͦͷଞ
 ່͕ՄѪ͍͜ͱʹఆධ͕͋Γ·͢
 Twitter GitHub @suusan2go

Slide 3

Slide 3 text

gRPC Overview • In gRPC a client application can directly call methods on a server application on a different machine. • By default gRPC uses protocol buffers, Google’s mature open source mechanism for serializing structured data.

Slide 4

Slide 4 text

Working with Protocol Buffers • Define data structures and RPC methods( with parameters and return types) RPC method Request Type Return Type

Slide 5

Slide 5 text

Generate server and client code from Protocol Buffer Java • Server Side • Extend auto-generated class and implement it. • Client Side • Create Stub object and set gRPC server endpoint, and call RPC method.

Slide 6

Slide 6 text

Ruby

Slide 7

Slide 7 text

Client sample gRPC Server Endpoint Create Request Object

Slide 8

Slide 8 text

https://speakerdeck.com/thesandlord/grpc-vs-rest-api-strat-2016

Slide 9

Slide 9 text

gRPC Summary • Auto code generation for client and server. • Supports many language. • Faster than REST ( using HTTP/2 and Protocol Buffers). • type-safety • Do no have to worry about RESTful API Designing.
 (URL, HTTP method, status code,,,)

Slide 10

Slide 10 text

How to use gRPC on Spring Boot ?

Slide 11

Slide 11 text

https://github.com/LogNet/ grpc-spring-boot-starter • Auto-configures and runs the embedded gRPC server with @GRpcService-enabled beans as part of spring-boot application. gRPC Server Spring Boot

Slide 12

Slide 12 text

How to build application on gRPC x Spring Boot ?

Slide 13

Slide 13 text

How to handle Exception?(1) • When gRPC server throws Exception, client just receive exception like below.

Slide 14

Slide 14 text

How to handle Exception?(2) • Use gRPC Interceptor to catch exception and return proper error to client. ࢀߟ http://blog.soushi.me/entry/2017/08/18/234615

Slide 15

Slide 15 text

How to handle Exception?(3) • Use gRPC Interceptor to catch exception and return proper error to client. ࢀߟ http://blog.soushi.me/entry/2017/08/18/234615

Slide 16

Slide 16 text

How to authenticate user?(1) • gRPC provides simple authentication API
 ( SSL/TLS, Token-based authentication with Google) • But I think this is not for application level authentication. (this is a gRPC connection or channel authentication.) • We can use Metadata for application level authentication.

Slide 17

Slide 17 text

How to authenticate user?(2) • Use Interceptor for Authentication. • This interceptor check token for every gRPC request. ࢀߟ: https://eng.revinate.com/2017/11/07/grpc-spring-security.html

Slide 18

Slide 18 text

How to authenticate user?(3) • Client side, Set metadata when call gRPC method.

Slide 19

Slide 19 text

But we still need REST endpoints… • Currently we can’t use gRPC directly on browser. 
 ※ grpc-web provides client and proxy server implementation for running gRPC on browser (gRPC-Web protocol is a cutting-edge spec that enables invoking gRPC services from modern browsers.). • Also, we have to support internal legacy services using REST. • We can use grpc-gateway for REST Client.

Slide 20

Slide 20 text

grpc-gateway • grpc-gateway provides proxy implementation from Protocol IDL(.proto files). • grpc-gateway implemented by Golang. But we can use another language for gRPC Server ! (e.q. Spring Boot)
 https://github.com/grpc-ecosystem/grpc-gateway

Slide 21

Slide 21 text

Documentation and code generation for REST client • grpc-gateway supports swagger definitions. • So we can generate REST client and API document automatically.

Slide 22

Slide 22 text

Summary • gRPC is ready for production ! ( I think) • InterceptorͱMetadataΛཧղ͢Ε͹ɺΞϓϦέʔγϣϯϨϕϧͰ΍Γ͍ͨ͜ͱ͸େମ࣮ݱͰ ͖ͦ͏ɻ • ·ͣ͸ࣗ෼ͷؔΘΔϦχϡʔΞϧϓϩδΣΫτ͔Β΍͍͖͍ͬͯͨ • Πϯϑϥ໘Ͱ͸ී௨ͷAPPαʔόʔͱ͸ҧ͏ߟྀϙΠϯτ΋͋Δ…

Slide 23

Slide 23 text

΍͍͖ͬͯ·͠ΐ͏ Yatteiki

Slide 24

Slide 24 text

Reference • https://medium.com/@shiladitya16/building- micro-services-using-grpc-on- ruby-41acb755ee06 • https://speakerdeck.com/kazegusuri/grpc-and- rest-with-grpc-in-practice • https://speakerdeck.com/kazegusuri/go- conference-2016-spring • http://blog.soushi.me/entry/2017/10/15/100616