- Node.js Tutorial
- NodeJS Home
- NodeJS Introduction
- NodeJS Setup
- NodeJS First App
- NodeJS REPL
- NodeJS Command Line
- NodeJS NPM
- NodeJS Callbacks
- NodeJS Events
- NodeJS Event-Loop
- NodeJS Event-Emitter
- NodeJS Global-Objects
- NodeJS Console
- NodeJS Process
- NodeJS Buffers
- NodeJS Streams
- Node.js File Handling
- Node.js File System
- Node.js Read/Write File
- Working with folders in Node.js
- HTTP and Networking
- Node.js HTTP Module
- Anatomy of an HTTP Transaction
- Node.js MongoDB
- MongoDB Get Started
- MongoDB Create Database
- MongoDB Create Collection
- MongoDB Insert
- MongoDB Find
- MongoDB Query
- MongoDB Sort
- MongoDB Delete
- MongoDB Update
- MongoDB Limit
- MongoDB Join
- Node.js MySQL
- MySQL Get Started
- MySQL Create Database
- MySQL Create Table
- MySQL Insert Into
- MySQL Select From
- MySQL Where
- MySQL Order By
- MySQL Delete
- MySQL Update
- MySQL Join
- Node.js Modules
- Node.js Modules
- Node.js Built-in Modules
- Node.js Utility Modules
- Node.js Web Module
- Node.js Advanced
- Node.js Debugger
- Node.js Scaling Application
- Node.js Packaging
- Node.js Express Framework
- Node.js RESTFul API
- Node.js Useful Resources
- Node.js Useful Resources
- Node.js Discussion
Node.js Restful API
A RESTful API (Representational State Transfer) is the architectural backbone of modern web development. In a Node.js environment, it acts as a bridge that allows different applications—like a React frontend, a mobile app, or a third-party service—to communicate with your server using standard HTTP protocols. Because Node.js is built on an event-driven, non-blocking I/O model, it is exceptionally fast at handling the multiple concurrent connections typically required by high-traffic APIs.
http module, almost every professional project uses Express.js. It simplifies routing, middleware integration, and request handling, saving you hours of boilerplate code.
Key Features of RESTful APIs
To be truly "RESTful," an API should follow specific constraints that make it predictable and easy to use. Here are the core pillars:
- Standard HTTP Methods: REST relies on verbs to define actions. We use
GETto read data,POSTto create it,PUTorPATCHto update it, andDELETEto remove it. - Resource-Based URLs: Instead of URLs like
/getBooks, REST uses nouns to represent resources, such as/booksor/users/123. - Statelessness: The server does not store any "client state" between requests. Every single request from the client must contain all the information necessary for the server to understand and process it (e.g., authentication tokens).
- JSON Data Exchange: While REST can technically support XML, JSON (JavaScript Object Notation) is the industry standard because it is lightweight and natively easy to parse in JavaScript.
/products instead of /product). This keeps your API consistent and intuitive for other developers.
Setting Up a Basic RESTful API
Before we write any code, we need to initialize our environment. This creates a package.json file to manage our dependencies and installs the Express framework.
Installing Required Modules
Open your terminal in a new folder and run:
npm init -y
Then, install Express:
npm install express
.gitignore file and include node_modules/. You never want to commit your dependency folder to version control as it is massive and can be recreated with npm install.
Code Example
Create a file named server.js. In this example, we will manage a simple library of books using an in-memory array. In a real-world scenario, this would be replaced by a database like MongoDB or PostgreSQL.
const express = require('express');
const app = express();
// Middleware: This is crucial! It tells Express to automatically
// parse JSON data sent in the body of a request.
app.use(express.json());
// Sample in-memory data (our "database")
let books = [
{ id: 1, title: '1984', author: 'George Orwell' },
{ id: 2, title: 'To Kill a Mockingbird', author: 'Harper Lee' }
];
// GET: Fetch the entire list of books
app.get('/books', (req, res) => {
res.json(books);
});
// POST: Add a new book to our list
app.post('/books', (req, res) => {
const { title, author } = req.body;
// Basic validation
if (!title || !author) {
return res.status(400).json({ error: 'Title and Author are required' });
}
const newBook = {
id: books.length + 1,
title,
author
};
books.push(newBook);
res.status(201).json(newBook); // 201 means "Created"
});
// PUT: Update an existing book by its ID
app.put('/books/:id', (req, res) => {
const id = parseInt(req.params.id);
const bookIndex = books.findIndex(b => b.id === id);
if (bookIndex === -1) {
return res.status(404).json({ error: 'Book not found' });
}
const updatedBook = { id, ...req.body };
books[bookIndex] = updatedBook;
res.json(updatedBook);
});
// DELETE: Remove a book from the list
app.delete('/books/:id', (req, res) => {
const id = parseInt(req.params.id);
const initialLength = books.length;
books = books.filter(book => book.id !== id);
if (books.length === initialLength) {
return res.status(404).json({ error: 'Book not found' });
}
res.status(204).send(); // 204 means "No Content" (successful deletion)
});
// Start the server
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});
app.use(express.json()). If you skip this line, req.body will be undefined, and your POST and PUT requests will fail to process any data.
Testing the API
Once your server is running (use node server.js), you can test these endpoints. While tools like Postman or Insomnia are great, you can use curl directly from your terminal to verify everything is working.
GET Request (Read all books):
curl http://localhost:3000/books
POST Request (Create a new book):
curl -X POST -H "Content-Type: application/json" -d '{"title":"Brave New World","author":"Aldous Huxley"}' http://localhost:3000/books
PUT Request (Update book with ID 1):
curl -X PUT -H "Content-Type: application/json" -d '{"title":"1984 - Special Edition","author":"George Orwell"}' http://localhost:3000/books/1
DELETE Request (Remove book with ID 1):
curl -X DELETE http://localhost:3000/books/1
npm install -g nodemon) during development. Run your app with nodemon server.js, and it will automatically restart the server every time you save a file change.
Summary
Building a RESTful API with Node.js and Express provides a powerful, scalable foundation for any application. By mastering the standard HTTP verbs and keeping your routes resource-oriented, you create a clean interface that other developers (and your future self) will find easy to navigate. As you progress, consider exploring middleware for authentication (like JWT), connecting to a database (like MongoDB), and implementing more robust error handling for production environments.