The popular client-server architecture divides communication into two parts: one that takes up all heavy tasks and provides services, known as the server, and the other one that enjoys those services, known as the client.
In general client-server communication, the client simply sends a request asking for resources or services to the server, and the server responds to that request. There are two primary models for API design: RPC and REST.
For client-server communication, clients and servers need to have libraries that can understand the protocol in which they are communicating. A protocol is a language or set of Internet communication rules. They are transport mechanisms that follow some guidelines for transporting data over the Internet.
The second most important aspect of client communication is the message format on which both the client and server can agree. This message format is based on some schemas, and by not following these schemas, communication wouldn’t be taking place. Message formats can be similar to XML, which adheres to a schema, or a JSON file, which must contain specific key-value pairs.
Another important aspect of this type of communication to understand is that it is based on a request and response mechanism, which means that the server only communicates when the client initiates the communication. With REST APIs and GraphQL, this is mostly unidirectional. This is a basic problem that will be solved by technology like gRPC.
In the early ’90s, a popular client-server protocol called SOAP used an XML message structure with a hardcoded schema. The schema for the message structure was very rigid. Lack of freedom is what caused the abandonment of SOAP and the emergence of REST API.
REST APIs came into existence due to the growing popularity of JavaScript, which led to the growth in JSON file organization. It was simple to understand and convenient. It just had some key and value pairs in its message structure.
In simple words, Rest is a guideline for transferring JSON messages over the internet with HTTP as its protocol (transport mechanism). With Rest, one doesn’t need to worry about defining a schema.
We talked about the emergence of REST. Now let’s deep dive into its core technology. So let me tell you that REST stands for Representational State Transfer. Rest is a standardized software architectural style, an API used a lot in the industry.
Imagine you are making a website for a restaurant. You have all the menus online, and food items are divided into three categories:
Now, let’s say you want to see all the beverages online. In the Rest architecture, you can easily and consistently partition all of your resources on API endpoints. Of course, you can use multiple authentications on them to make them secure.
In this type of case, we send a GET request to the server to an endpoint where we can get beverage resource data.
Similarly, we can perform all CRUD (Create, Read, Update, Delete) in the Rest APIs, which makes it suitable for big projects that don’t require super-transfer of data and do not need to be real-time.
Rest works best for projects where the efficient transfer of data is an important factor. Caching is another feature of REST that is useful for standard applications like food booking apps, hotel booking apps, blog websites, online forum websites, etc.
REST is great, but it has many cons that are quite crucial in some cases. Let’s talk about them.
To tackle the first problem with REST, which is the need for bi-directional communication, WebSocket was invented, which permits the server to initiate the communication, but the problem with it is that it doesn’t have the structure. It just sends bytes and has no restrictions.
The WebSockets didn’t have any problems of their own, but the actual issue is that any type of communication requires a protocol otherwise known as a transport chain, and each transport chain requires a client library that can communicate using it.
If you are creating a Python application that works on the Rest architecture, you will need an HTTP client that can communicate with the server. In many cases, client libraries are made by a third party, mainly an independent developer. Using third-party libraries can expose your security, and your entire application will depend on a third party for communication.
In the case of a web application, the browser acts like a client library, but for non-web projects, you will need a third-party client library. If you are thinking of making one on your own, then remember that it is not that easy, and you will burden yourself with maintaining another application.
So, to tackle some problems with Rest and to tackle problems with client libraries, Google invented gRPC in 2015.
For gRPC APIs, one client library is maintained by Google for almost all popular languages. It uses the HTTP 2 protocol under the hood and protocol buffer (protobuf) as its message structure.
You don’t need to worry about any client library as Google is maintaining it for you and almost every programming language. A single and centralized client library is one of the major strengths of gRPC.
Another benefit of gRPC is the message structure that it uses. The protocol buffer is language agnostic, so you can make clients in Python and servers in Go and still be able to communicate without making any fuss.
gRPC is a system that implements traditional RPC with several optimizations. The “RPC” in gRPC stands for the Remote Procedure Call (RPC) model. Its APIs use protobuf to communicate. It serializes proto files into a binary structure and sends them to the server, and on the server side, they are deserialized into the original structure. That’s how it works with protobuf.
gRPC has different forms of communication. gRPC makes use of HTTP, but the client and server never see how a gRPC request is mapped to the HTTP protocol. gRPC uses protocol buffers for serialization and communication, just like REST uses JSON. You can think of them as features of gRPC.
These are four popular features of gRPC that make it so powerful.
As for the features of gRPC, we saw some use cases for gRPC. Let’s imagine you want to make a chat application. You are not going to use the Rest API as it will not be able to allow fast streaming of bi-directional communication. For this, we will be using the gRPC stream, which will provide some more benefits other than speed.
First, its language-neutral behavior doesn’t matter in what programming language the server or other clients are writing. Communication can still be established until the message structure is accepted.
So, with this feature, the Android version of the chat app can communicate with the iOS version and vice versa.
There are issues with everything, including gRPC.
Now we will discuss the technical difference between REST and gRPC.
Message format
The message format used by REST is mostly JSON (sometimes XML structure), which is a more readable form and easier to handle. You will not have to worry about the schema in Rest. On the other hand, gRPC uses a protocol buffer to serialize data. The compressed form is lighter and faster to travel with. It is in a binary structure, so it serializes and deserializes data to transmit it.
HTTP 1.1 vs. HTTP 2
The Rest API usually makes use of HTTP 1.1 as its protocol, whereas gRPC is based on HTTP 2 as its protocol. The Rest APIs can still make use of HTTP 2 but are still limited because of the request-response mechanism. gRPC APIs use HTTP 2 and take advantage of HTTP 2 support for both client-response and bidirectional communication. This is another aspect that makes gRPC performance better than REST. It can manage unidirectional requests like HTTP 1.1 and bidirectional requests simultaneously like HTTP 2.0.
Latency
gRPC also has low latency and high speed in communication making it useful for connecting to systems that consist of lightweight microservices architecture, which increases message transmission efficiency. In most cases of the network, latency REST takes 25ms, whereas gRPC latency is far less than REST.
Payload limit
Rest has a maximum payload limit of 45MB when sending outgoing messages, whereas gRPC doesn’t have any limit, meaning your outgoing message can be as heavy as you want.
Security
In terms of security, Rest will lag as it makes use of HTTP 1.1 protocol and JSON structure, which is easy to decrypt and access. On the other hand, gRPC API makes use of HTTP 2, which is far more secure, and uses protobuf, which is in binary structure and hard to decrypt.
Speed
Here again, gRPC API wins, as it offers 10x more speed than Rest APIs, and it is for the same reason, using HTTP 2 as the protocol and protobuf as the message format.
The code generation function
Rest does not provide built-in code generation features, meaning the developer needs third-party apps to produce API code, whereas gRPC has native code generation features due to its protobuf compiler, which is compatible with several programming languages. This is another benefit, particularly for microservice architectures.
REST is still the most used and popular type of communication, but at the same time, it stopped evolving and can’t support modern use cases like lack of data streaming, no bi-directional communication, high latency, etc.,
On the other hand, gRPC provides multiple features like data streaming on both the client and server side, bi-directional communication, low latency, and efficiency, and makes use of HTTP 2. Due to its fast performance, gRPC is best suited for high-workload and high-velocity applications.
Want to read more about gRPC and REST? Check out our next great read: gRPC vs Message broker