Practice
1. Which of the following is a common way for microservices to communicate synchronously in an Express-based system?
easy
Solution
Step 1: Understand synchronous communication in microservices
Synchronous communication means one service waits for a response from another before continuing.Step 2: Identify common synchronous methods in Express
HTTP REST API calls are widely used for synchronous communication between microservices in Express.Final Answer:
Using HTTP REST API calls between services -> Option CQuick Check:
Synchronous communication = HTTP REST API calls [OK]
Hint: Sync communication usually uses HTTP requests [OK]
Common Mistakes:
- Thinking direct DB access is common for microservices
- Assuming shared memory works across services
- Using file system for communication
2. Which Express code snippet correctly sends a JSON response from one microservice to another?
easy
Solution
Step 1: Identify Express method for JSON response
Express provides res.json() to send JSON formatted responses easily.Step 2: Compare other methods
res.send() can send JSON but res.json() is preferred for clarity; res.write() is low-level and res.render() is for templates.Final Answer:
res.json({ data: 'value' }) -> Option AQuick Check:
Express JSON response = res.json() [OK]
Hint: Use res.json() to send JSON responses in Express [OK]
Common Mistakes:
- Using res.send() without JSON stringification
- Confusing res.render() with JSON response
- Using res.write() incorrectly
3. Consider two microservices where Service A calls Service B using HTTP GET. What will Service A receive if Service B responds with
res.status(200).json({ message: 'Success' })?medium
Solution
Step 1: Understand Service B's response
Service B sends HTTP status 200 with JSON body { message: 'Success' }.Step 2: Determine what Service A receives
Service A receives the JSON object exactly as sent, since status 200 means OK and body is JSON.Final Answer:
A JSON object { message: 'Success' } -> Option AQuick Check:
HTTP 200 + res.json() = JSON object response [OK]
Hint: HTTP 200 with res.json() returns JSON object [OK]
Common Mistakes:
- Assuming plain text instead of JSON
- Confusing status codes with response body
- Expecting empty or error response
4. In an Express microservice, the following code is used to call another service asynchronously. What is the main issue?
fetch('http://service-b/api/data')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.log(error))
medium
Solution
Step 1: Check environment support for fetch
Node.js versions before 18 do not have fetch globally defined by default.Step 2: Identify the main issue in Express microservice
Without importing or enabling fetch, this code will cause a ReferenceError in Node.js.Final Answer:
fetch is not defined in Node.js by default -> Option BQuick Check:
Node.js needs fetch polyfill or version 18+ [OK]
Hint: Node.js needs fetch polyfill or v18+ for fetch [OK]
Common Mistakes:
- Thinking await is mandatory with then() chains
- Ignoring fetch availability in Node.js
- Confusing console.log with response sending
5. You want to design communication between two Express microservices where Service A sends a task to Service B and does not wait for a response. Which approach is best to ensure reliable, scalable communication?
hard
Solution
Step 1: Understand asynchronous communication needs
Service A sends a task and does not wait, so async messaging is needed.Step 2: Evaluate options for reliability and scalability
Message queues like RabbitMQ provide reliable, scalable async communication with delivery guarantees.Final Answer:
Use a message queue like RabbitMQ for asynchronous messaging -> Option DQuick Check:
Async + reliable + scalable = message queue [OK]
Hint: Async tasks use message queues for reliability [OK]
Common Mistakes:
- Using HTTP POST expecting async without waiting
- Relying on database polling which is inefficient
- Using WebSocket for one-way async tasks
