Building a RESTful API with Node.js and Express

Yash Kumar Prasad
4 min readOct 12, 2024

--

Introduction

In cutting-edge digital landscape, APIs play a critical position in permitting packages to speak with every other. RESTful APIs, in particular, are extensively used due to their simplicity and scalability. In this weblog post, we are able to stroll through the steps to build a RESTful API using Node.Js and Express, a famous framework that simplifies server-side improvement.

What is REST?

REST (Representational State Transfer) is an architectural style that defines a fixed of constraints and houses primarily based on HTTP. A RESTful API offers a manner for applications to talk over the internet the use of fashionable HTTP methods which include GET, POST, PUT, and DELETE. The key ideas of REST include statelessness, resource representation, and uniform interface.

Prerequisites

Before we start building our API, ensure you have the following:

1. Node.js installed on your machine.
2. A code editor like Visual Studio Code.
3. Basic knowledge of JavaScript and HTTP methods.

Setting Up the Project

Step 1: Initialize Your Project

Open your terminal and create a new directory for your project:

mkdir my-restful-api
cd my-restful-api

Initialize a new Node.js project:

npm init -y

This command will create a `package.json` file in your project directory.

Step 2: Install Dependencies

Next, we need to install Express. Run the following command:

npm install express

Step 3: Create Your Server

Create a new file named `server.js` in your project directory.

const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;

// Middleware to parse JSON bodies
app.use(express.json());

// Simple GET endpoint
app.get('/', (req, res) => {
res.send('Welcome to my RESTful API!');
});

// Start the server
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});

Step 4: Run Your Server

In the terminal, start your server:

node server.js

You should see a message indicating that your server is running. You can now access `http://localhost:3000` in your web browser.

Creating RESTful Endpoints

Now that we have a basic server running, let’s add some RESTful endpoints. For demonstration, we’ll create a simple API for managing a list of books.

Step 1: Define a Sample Data Structure

In `server.js`, create an array to hold our books:

let books = [
{ id: 1, title: '1984', author: 'George Orwell' },
{ id: 2, title: 'To Kill a Mockingbird', author: 'Harper Lee' },
];

Step 2: Implement CRUD Operations

Now, we’ll implement the following CRUD operations: Create, Read, Update, and Delete.

Create (POST)

Add a new endpoint to add a book:

app.post('/books', (req, res) => {
    const newBook = {
        id: books.length + 1,
        title: req.body.title,
        author: req.body.author,
    };
    books.push(newBook);
    res.status(201).json(newBook);
});

Read (GET)

To get the list of books, add:

app.get('/books/:id', (req, res) => {
    const book = books.find(b => b.id === parseInt(req.params.id));
    if (!book) return res.status(404).send('Book not found');
    res.json(book);
});

To get a specific book by ID, add:

app.get('/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) return res.status(404).send('Book not found');
res.json(book);
});

Update (PUT)

For updating a book:

app.put('/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) return res.status(404).send('Book not found');

book.title = req.body.title;
book.author = req.body.author;
res.json(book);
});

Delete (DELETE)

To delete a book:

app.delete('/books/:id', (req, res) => {
const bookIndex = books.findIndex(b => b.id === parseInt(req.params.id));
if (bookIndex === -1) return res.status(404).send('Book not found');

books.splice(bookIndex, 1);
res.status(204).send();
});

Full `server.js` Example

Here’s how the complete `server.js` file should look:

const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;

app.use(express.json());

let books = [
{ id: 1, title: '1984', author: 'George Orwell' },
{ id: 2, title: 'To Kill a Mockingbird', author: 'Harper Lee' },
];

app.get('/', (req, res) => {
res.send('Welcome to my RESTful API!');
});

app.post('/books', (req, res) => {
const newBook = {
id: books.length + 1,
title: req.body.title,
author: req.body.author,
};
books.push(newBook);
res.status(201).json(newBook);
});

app.get('/books', (req, res) => {
res.json(books);
});

app.get('/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) return res.status(404).send('Book not found');
res.json(book);
});

app.put('/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) return res.status(404).send('Book not found');

book.title = req.body.title;
book.author = req.body.author;
res.json(book);
});

app.delete('/books/:id', (req, res) => {
const bookIndex = books.findIndex(b => b.id === parseInt(req.params.id));
if (bookIndex === -1) return res.status(404).send('Book not found');

books.splice(bookIndex, 1);
res.status(204).send();
});

app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});

Testing the API

You can use tools like Postman or CURL to test your API endpoints:

- GET `/books` - Retrieve all books.
- POST `/books` - Add a new book with JSON body `{ "title": "New Book", "author": "Author Name" }`.
- GET `/books/:id` - Retrieve a specific book by ID.
- PUT `/books/:id` - Update a specific book with JSON body.
- DELETE `/books/:id` - Delete a specific book.

Conclusion

Congratulations! You've successfully built a RESTful API using Node.js and Express. This foundational knowledge can be expanded upon by adding features such as authentication, database integration, and error handling. As you continue to build and refine your API, you'll find endless opportunities to enhance your applications and improve user experiences. Happy coding!

--

--

Yash Kumar Prasad
Yash Kumar Prasad

Written by Yash Kumar Prasad

Full-stack developer with a passion for crafting robust web solutions. Experienced in creating scalable applications that prioritize user experience.

No responses yet