Node.js8 min read
REST API Best Practices
Build better REST APIs. Learn HTTP methods and status codes.
Sarah Chen
December 19, 2025
0.0k0
REST API Best Practices
HTTP Methods
app.get('/api/products', async (req, res) => {
const products = await Product.find();
res.json(products);
});
app.get('/api/products/:id', async (req, res) => {
const product = await Product.findById(req.params.id);
if (!product) return res.status(404).json({ error: 'Not found' });
res.json(product);
});
app.post('/api/products', async (req, res) => {
const product = await Product.create(req.body);
res.status(201).json(product);
});
app.put('/api/products/:id', async (req, res) => {
const product = await Product.findByIdAndUpdate(
req.params.id,
req.body,
{ new: true }
);
res.json(product);
});
app.delete('/api/products/:id', async (req, res) => {
await Product.findByIdAndDelete(req.params.id);
res.status(204).send();
});
Status Codes
200 OK → Successful GET, PUT, PATCH
201 Created → Successful POST
204 No Content → Successful DELETE
400 Bad Request → Invalid input
401 Unauthorized → Not authenticated
403 Forbidden → Not authorized
404 Not Found → Resource doesn't exist
500 Internal Error → Server error
Consistent Response Format
res.json({
success: true,
data: products
});
res.status(400).json({
success: false,
error: {
message: 'Invalid input',
code: 'INVALID_INPUT'
}
});
Filtering and Sorting
app.get('/api/products', async (req, res) => {
const { category, minPrice, sortBy, order } = req.query;
const query = {};
if (category) query.category = category;
if (minPrice) query.price = { $gte: parseInt(minPrice) };
const sort = {};
if (sortBy) sort[sortBy] = order === 'desc' ? -1 : 1;
const products = await Product.find(query).sort(sort);
res.json({ success: true, data: products });
});
Key Takeaway
Use proper HTTP methods and status codes. Consistent response format. Support filtering, sorting, pagination. Include helpful error messages.
#Node.js#REST#API#Best Practices