🎯 Learning Objectives
By the end of this lesson, you will be able to:
- Design RESTful API endpoints
- Implement CRUD operations
- Use route parameters and query strings
- Organize routes with Express Router
- Handle different HTTP methods
- Create API documentation
📚 REST API Design
CRUD Operations
const express = require('express');
const router = express.Router();
// GET /api/posts - Read all
router.get('/', (req, res) => {
res.json(posts);
});
// GET /api/posts/:id - Read one
router.get('/:id', (req, res) => {
const post = posts.find(p => p.id === parseInt(req.params.id));
res.json(post);
});
// POST /api/posts - Create
router.post('/', (req, res) => {
const post = { id: Date.now(), ...req.body };
posts.push(post);
res.status(201).json(post);
});
// PUT /api/posts/:id - Update
router.put('/:id', (req, res) => {
const index = posts.findIndex(p => p.id === parseInt(req.params.id));
posts[index] = { ...posts[index], ...req.body };
res.json(posts[index]);
});
// DELETE /api/posts/:id - Delete
router.delete('/:id', (req, res) => {
const index = posts.findIndex(p => p.id === parseInt(req.params.id));
posts.splice(index, 1);
res.status(204).send();
});
🎯 Practice Exercises
Exercise 1: Blog API
Create a complete blog API with CRUD operations:
Solution:
const express = require('express');
const app = express();
app.use(express.json());
let posts = [
{ id: 1, title: 'First Post', content: 'Hello World', author: 'Alice' },
{ id: 2, title: 'Second Post', content: 'Node.js is awesome', author: 'Bob' }
];
// GET /api/posts
app.get('/api/posts', (req, res) => {
const { author, limit } = req.query;
let filteredPosts = posts;
if (author) {
filteredPosts = posts.filter(p => p.author === author);
}
if (limit) {
filteredPosts = filteredPosts.slice(0, parseInt(limit));
}
res.json(filteredPosts);
});
// POST /api/posts
app.post('/api/posts', (req, res) => {
const { title, content, author } = req.body;
if (!title || !content || !author) {
return res.status(400).json({ error: 'Missing required fields' });
}
const post = {
id: Date.now(),
title,
content,
author,
createdAt: new Date()
};
posts.push(post);
res.status(201).json(post);
});
app.listen(3000, () => {
console.log('Blog API running on http://localhost:3000');
});
🎯 Key Takeaways
- REST principles guide API design
- HTTP methods map to CRUD operations
- Route parameters access dynamic values
- Query strings filter and paginate data
- Status codes communicate results
Next Lesson: Lesson 6: Working with Files