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

More Decks by Kenta Suzuki

Other Decks in Technology


  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