6 min read
ā¢Question 23 of 28hardHow do microservices communicate via APIs?
Understanding microservices API patterns.
What You'll Learn
- Synchronous vs asynchronous communication
- Common patterns
- Implementation examples
Communication Types
Synchronous (HTTP/gRPC)
code.jsJavaScript
Service A ā HTTP Request ā Service B
Service A ā HTTP Response ā Service BAsynchronous (Message Queue)
code.jsJavaScript
Service A ā Message ā Queue ā Service B
(No waiting for response)Synchronous Patterns
REST
code.jsJavaScript
// Order service calling User service
async function getOrderWithUser(orderId) {
const order = await Order.findById(orderId);
const user = await fetch(`http://user-service/users/${order.userId}`)
.then(r => r.json());
return { ...order, user };
}gRPC
code.jsJavaScript
// Faster, type-safe communication
const client = new UserServiceClient('user-service:50051');
const user = await client.getUser({ id: userId });Asynchronous Patterns
Message Queue (RabbitMQ/Kafka)
code.jsJavaScript
// Publisher (Order Service)
channel.publish('orders', 'order.created', Buffer.from(JSON.stringify(order)));
// Consumer (Notification Service)
channel.consume('order-notifications', (msg) => {
const order = JSON.parse(msg.content);
sendEmail(order.userEmail, 'Order confirmed');
});Service Discovery
code.jsJavaScript
// Using Consul or environment variables
const userServiceUrl = process.env.USER_SERVICE_URL || 'http://user-service:3000';
// Circuit breaker for resilience
const CircuitBreaker = require('opossum');
const breaker = new CircuitBreaker(fetchUser, {
timeout: 3000,
errorThresholdPercentage: 50,
resetTimeout: 30000,
});