Welcome back, every one! In this lecture, we will discover some use cases of gRPC and how does it compare to REST.
\n\nHere\'s the link to the full gRPC course playlist on Youtube
\nGitlab repository: pcbook-go and pcbook-java
\n\n
\n\n\n \n \n Types of gRPC\n
\n\nThere are 4 types of gRPC:
\n\nThe simplest one is Unary, where the client sends 1 single request message and the server replies with 1 single response. This looks somewhat similar to the normal HTTP REST API.
\n\nThen we have client-streaming. In this scenario, the client will send a stream of multiple messages, and it expects the server to send back only 1 single response.
\n\n \n\nSimilarly, we have server-streaming, where the client sends only 1 request message, and the server replies with a stream of multiple respnoses.
\n\nAnd finally, the bidirectional (or bidi) streaming. This one is the most complex because client and server will keep sending and receiving multiple messages in parallel and with arbitrary order. It\xe2\x80\x99s very flexible and no blocking, which means no sides need to wait for the response before sending the next messages.
\n\nThat\xe2\x80\x99s a very high-level overview of the 4 different ways of communication in gRPC. We will come back to this later on the hands-on lecture, where we will implement each and everyone of them to get much deeper understanding.
\n\n\n \n \n gRPC vs REST\n
\n\nNow, let\xe2\x80\x99s do a quick comparison of gRPC and REST to see their differences.
\n\nFirst, gRPC uses HTTP/2 which is, as you know, much faster than HTTP/1.1 used in REST by default. Note that today we can enable HTTP/2 in REST as well, but normally it often goes with HTTP/1.1. You can read more about how to enable HTTP/2 for REST in these articles:
\n\n \n\nSecond, gRPC uses Protocol buffer to serialize payload data, which is binary and smaller, while REST uses JSON, which is text and larger.
\n\nThe API contract in gRPC is strict, and required to be clearly defined in the proto file. While in REST, it\xe2\x80\x99s often loose and optional. We can define it via OpenAPI if we want, but it\xe2\x80\x99s not mandatory.
\n\nCode generation is built-in in gRPC with the help of protocol buffer compiler. While in REST, we must use third-party tool like OpenAPI and Swagger.
\n\n \n\nBoth gRPC and REST communications are secured with TLS/SSL.
\n\nStreaming is bidirectional in gRPC, while only 1 way request from client to server in REST.
\n\nSo gRPC is better than REST for most of the things that we\xe2\x80\x99ve mentioned so far. However, there\xe2\x80\x99s one thing that REST is still better,
\n\nThat is browser support. While REST is fully supported by all browsers, the support for gRPC is limited and required gRPC-web with a proxy layer to convert between HTTP/1 and HTTP/2.
\n\n\n \n \n Where to use gRPC?\n
\n\nSo gRPC has a lot of strength, but it also has its own weaknesses. So where and when should we use gRPC in order to take full advantage of it?
\n\nAs you might have guessed, microservices is where gRPC really shines, since it enables low-latency and high-throughput communication, as well as strong API contracts.
\n\ngRPC is also suitable for polyglot environments, because it provides code generations out-of-the-box for many programming languages.
\n\n \n\nPoint-to-point real-time communication is also a good place for gRPC, since it has excellent support for bidirectional streaming.
\n\nAnd finally, gRPC is a great choice for a network-constrained environment such as mobile application (android/ios), because of its light-weight message format.
\n\nAlright, so now you\xe2\x80\x99ve finished all the theory lectures of the gRPC course. Congratulations! I hope you enjoy it and I will see you in the hands-on lectures.
\n\n\n