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

gRPC on Spring Boot

Kenta Suzuki
November 17, 2017

gRPC on Spring Boot

会社のTech Talkで話しました

Kenta Suzuki

November 17, 2017
Tweet

More Decks by Kenta Suzuki

Other Decks in Technology

Transcript

  1. Զ is ୭ • Name
 Kenta Suzuki • like
 Rails

    / Ruby / JS(React / ES next) / Golang
 ࠷ۙ͸Kotlin & Spring Boot • ͦͷଞ
 ່͕ՄѪ͍͜ͱʹఆධ͕͋Γ·͢
 Twitter GitHub @suusan2go
  2. 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.
  3. Working with Protocol Buffers • Define data structures and RPC

    methods( with parameters and return types) RPC method Request Type Return Type
  4. 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.
  5. 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,,,)
  6. 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
  7. How to handle Exception?(1) • When gRPC server throws Exception,

    client just receive exception like below.
  8. 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
  9. 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
  10. 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.
  11. 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
  12. 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.
  13. 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
  14. Documentation and code generation for REST client • grpc-gateway supports

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

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