REST API Design Made Simple with Express.js
Learning web development in public. Writing simple, real-world explanations about web development concepts. Helping beginners understand why things work, not just how.
When building backend applications, one of the most common patterns you will use is a REST API. It provides a clean and structured way for clients (frontend, mobile apps) to communicate with your server.
In this blog, you will understand REST concepts in a simple way and learn how to design APIs using Express.js.
1. What REST API Means
REST stands for Representational State Transfer.
A REST API is a way of designing APIs where:
Everything is treated as a resource
Each resource is accessed using a URL
Standard HTTP methods are used to perform actions
Example:
/users
/products
/orders
Each of these represents a resource.
2. Resources in REST Architecture
A resource is any data or entity in your application.
Examples:
User
Product
Order
Each resource:
Has a unique URL
Can be created, read, updated, or deleted
Example:
/users → collection of users
/users/101 → specific user
3. HTTP Methods
REST APIs use standard HTTP methods to define actions.
a) GET (Read data)
Used to fetch data from the server.
app.get('/users', (req, res) => {
res.send('Get all users');
});
b) POST (Create data)
Used to create a new resource.
app.post('/users', (req, res) => {
res.send('User created');
});
c) PUT (Update data)
Used to update an existing resource.
app.put('/users/:id', (req, res) => {
res.send(`User ${req.params.id} updated`);
});
d) DELETE (Remove data)
Used to delete a resource.
app.delete('/users/:id', (req, res) => {
res.send(`User ${req.params.id} deleted`);
});
4. Status Codes Basics
Status codes tell the client what happened with the request.
Common status codes:
200 OK → Request successful
201 Created → Resource created successfully
400 Bad Request → Invalid input
401 Unauthorized → Authentication required
404 Not Found → Resource not found
500 Internal Server Error → Server error
Example:
res.status(200).json({ message: 'Success' });
5. Designing Routes Using REST Principles
REST APIs follow a consistent structure.
Good REST design:
GET /users → get all users
GET /users/:id → get one user
POST /users → create user
PUT /users/:id → update user
DELETE /users/:id → delete user
Key rules:
Use nouns, not verbs
Keep URLs clean and meaningful
Use HTTP methods for actions
6. Example Resource: Users
Let’s build a simple example using Express.
import express from "express";
const app = express();
app.use(express.json());
let users = [];
// GET all users
app.get('/users', (req, res) => {
res.json(users);
});
// GET single user
app.get('/users/:id', (req, res) => {
const user = users.find(u => u.id == req.params.id);
if (!user) return res.status(404).send('User not found');
res.json(user);
});
// POST create user
app.post('/users', (req, res) => {
const user = { id: Date.now(), ...req.body };
users.push(user);
res.status(201).json(user);
});
// PUT update user
app.put('/users/:id', (req, res) => {
const index = users.findIndex(u => u.id == req.params.id);
if (index === -1) return res.status(404).send('User not found');
users[index] = { ...users[index], ...req.body };
res.json(users[index]);
});
// DELETE user
app.delete('/users/:id', (req, res) => {
users = users.filter(u => u.id != req.params.id);
res.send('User deleted');
});
app.listen(3000);
Final Understanding
REST API is a structured way to design backend services
Everything is treated as a resource
HTTP methods define actions
Status codes indicate results
Routes should follow clean and consistent patterns
Summary
REST API design helps you build scalable and maintainable backend systems by following clear rules and standards. By treating data as resources and using HTTP methods correctly, your APIs become predictable and easy to use. Express.js makes implementing REST APIs simple with its clean routing system. Once you understand these principles, you can design APIs that are easy to expand, debug, and integrate with different clients such as web and mobile applications.



