REST vs Message Brokers: Choosing the Right Communication

Shoham Roditi
May 22, 2024
4 min read

With the clear dominance of microservices architecture, communication between different components of a system is a critical aspect of today’s software paradigm. Two popular methods of achieving this communication are through REST, direct communication, and message brokers, indirect communication. Each approach has its own set of advantages and trade-offs, making it essential for developers to understand the differences between them in order to make informed decisions when designing and building their systems.

Although the two feel like serving completely different use cases and do not intertwine, in many cases and architectures, they are, and in this blog post, we’ll delve into the disparities between REST and message brokers in terms of way of communication, helping you make the right choice for your specific use case.

REST

REST, a widely used architectural style for designing networked applications, relies on stateless communication between client and server. Here are some key features of REST communication:

  1. Request-Response Paradigm: REST operates on a simple request-response model. Clients initiate a request to the server, and the server responds with the requested data or an appropriate status code.
  2. HTTP Verbs: REST communication is based on HTTP verbs such as GET, POST, PUT, and DELETE, which correspond to CRUD (Create, Read, Update, Delete) operations.
  3. Resource-Oriented: REST revolves around the concept of resources identified by URLs. Each resource represents a distinct entity, and interactions are performed using these URLs.
  4. Stateless: REST is designed to be stateless, meaning that each request from the client must contain all the information required for the server to fulfill it. This simplifies server-side management and scalability.
  5. Caching: REST communication benefits from HTTP’s built-in caching mechanisms, which can improve performance and reduce server load by serving cached responses when appropriate.

Message Brokers

Message brokers facilitate asynchronous communication between components by allowing them to exchange messages or pieces of information, meaning the sender does not aware at any given time if a receiver exists or who it is. Here’s what you need to know about this approach:

  1. Decoupled Architecture: Message brokers promote decoupling between sender and receiver, allowing components to communicate without having to be aware of each other’s existence.
  2. Publish-Subscribe Model: In the publish-subscribe model, producers (publishers) send messages to specific topics, and consumers (subscribers) interested in those topics receive the messages. This enables broadcasting information to multiple consumers.
  3. Message Queues: Message brokers also support point-to-point communication through message queues. Producers send messages to queues, and consumers retrieve messages from those queues, ensuring that each message is processed by a single consumer.
  4. Reliability: Message brokers ensure message delivery, even in cases of component failures. This reliability is achieved through features like message persistence and acknowledgment mechanisms.
  5. Scalability: Message brokers can be scaled horizontally to handle increasing message volumes and provide load balancing across consumers.

The Story of Microservices

Representational state transfer (REST) uses a popular architectural pattern called API Gateway, and it can serve as a good example of the synchronous communication type.
Requests reach a service that acts as an internal router that routes requests based on the different values, headers, and query params.

Message brokers/queues are widely used in a microservices architecture as well, which follows the asynchronous pattern. In this type of architecture, a service sends a message without waiting for a response, and one or more services process the message asynchronously. Asynchronous messaging provides many benefits but also brings challenges such as idempotency, message ordering, poison message handling, and complexity of message broker, which must be highly available.

It is important to note the difference between asynchronous I/O and the asynchronous protocol. Asynchronous I/O means that the calling thread is not blocked while the I/O operations are executed. This is an implementation detail in terms of the software design. The asynchronous protocol means the sender does not wait for a response.

Choosing the Right Approach

The decision between REST communication and message brokers depends on various factors, including the nature of your application, communication patterns, and requirements:

  • REST is suitable when:
    • Direct request-response interactions are preferred.
    • Your app requires simplicity in communication patterns.
    • You have very strict communication rules with almost 1:1 sender/receiver ratio
    • Scale is small and so is the amount of communicating services, workloads, and amount of transferred data.
  • Message brokers are beneficial and a must when:
    • Asynchronous communication is needed and allowed.
    • Many-to-Many communication pattern is needed.
    • Components are loosely coupled, allowing for independent scaling.
    • Reliability and guaranteed message delivery are paramount.
    • Publish-subscribe or message queue patterns align with the application’s communication needs.
    • A great scale is needed to support billions of requests in a short period of time. Scaling the microservices would be overkill.

In conclusion, both REST and message brokers offer distinct advantages for different scenarios. REST provides simplicity and direct interactions, while message brokers enable decoupled, asynchronous, reliable, and much more scaleable communication. The choice between these approaches should be made based on your system’s requirements, the specific communication patterns your application demands, and the maturity of both the environment and the developers themselves.