Upgrade to Pro — share decks privately, control downloads, hide ads and more …

gRPC on Spring Boot

35b58828e4e24c579c35529061711dfd?s=47 Kenta Suzuki
November 17, 2017

gRPC on Spring Boot

会社のTech Talkで話しました


Kenta Suzuki

November 17, 2017


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

  2. Զ is ୭ • Name
 Kenta Suzuki • like

    / Ruby / JS(React / ES next) / Golang
 ࠷ۙ͸Kotlin & Spring Boot • ͦͷଞ
 Twitter GitHub @suusan2go
  3. 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.
  4. Working with Protocol Buffers • Define data structures and RPC

    methods( with parameters and return types) RPC method Request Type Return Type
  5. 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.
  6. Ruby

  7. Client sample gRPC Server Endpoint Create Request Object

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

  9. 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,,,)
  10. How to use gRPC on Spring Boot ?

  11. 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
  12. How to build application on gRPC x Spring Boot ?

  13. How to handle Exception?(1) • When gRPC server throws Exception,

    client just receive exception like below.
  14. 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
  15. 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
  16. 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.
  17. 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
  18. How to authenticate user?(3) • Client side, Set metadata when

    call gRPC method.
  19. 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.
  20. 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)
  21. Documentation and code generation for REST client • grpc-gateway supports

    swagger definitions. • So we can generate REST client and API document automatically.
  22. Summary • gRPC is ready for production ! ( I

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

  24. 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