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.
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.
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,,,)
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
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
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
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.
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
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.
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
Documentation and code generation for REST client • grpc-gateway supports swagger definitions. • So we can generate REST client and API document automatically.
Summary • gRPC is ready for production ! ( I think) • InterceptorͱMetadataΛཧղ͢ΕɺΞϓϦέʔγϣϯϨϕϧͰΓ͍ͨ͜ͱେମ࣮ݱͰ ͖ͦ͏ɻ • ·ͣࣗͷؔΘΔϦχϡʔΞϧϓϩδΣΫτ͔Β͍͖͍ͬͯͨ • Πϯϑϥ໘Ͱී௨ͷAPPαʔόʔͱҧ͏ߟྀϙΠϯτ͋Δ…