Skip to main content

Command Palette

Search for a command to run...

REST API Design Made Simple with Express.js

Published
6 min read
D
Turning confusing web concepts into simple, real-world explanations. Writing about JavaScript, Node.js, and how things actually work.

Modern web applications constantly communicate with servers.

Examples:

  • frontend fetching user profiles

  • mobile apps loading products

  • dashboards updating analytics

  • applications sending login requests

This communication usually happens through:

APIs

And one of the most common API styles today is:

REST

If you’ve worked with Express.js before, you’ve already seen REST patterns even if you didn’t realize it.

Let’s understand REST APIs step-by-step in a practical way.


What Does API Mean?

API stands for:

Application Programming Interface

In simple terms:

  • APIs allow different systems to communicate

Example:

Frontend ↔ Backend
Mobile App ↔ Server
Website ↔ Database Service

An API acts like a bridge between client and server.


What Is a REST API?

REST stands for:

Representational State Transfer

The name sounds complicated, but the idea is simple.

REST is a structured way of designing APIs using:

  • resources

  • HTTP methods

  • predictable routes

REST APIs organize backend functionality around resources.


What Are Resources in REST?

A resource is simply:

  • something your application manages

Examples:

  • users

  • products

  • posts

  • comments

  • orders

In REST, resources are usually represented using nouns.

Example:

/users
/products
/posts

Why REST Became Popular

REST makes APIs:

  • predictable

  • organized

  • scalable

  • easier to understand

Instead of random route naming, REST follows conventions.

That consistency helps frontend and backend developers work together more easily.


REST Uses HTTP Methods

REST APIs mainly rely on standard HTTP methods.

Examples:

  • GET

  • POST

  • PUT

  • DELETE

Each method represents a specific action.


CRUD and HTTP Methods

REST APIs usually map CRUD operations to HTTP methods.

Operation HTTP Method
Create POST
Read GET
Update PUT
Delete DELETE

Example Resource: Users

Let’s use:

/users

as the main resource example.


1. GET Request - Fetch Data

Used for:

  • retrieving data

  • reading resources

Example:

GET /users

Meaning:

“Fetch all users.”


Fetch Single User

GET /users/42

Meaning:

“Fetch user with ID 42.”


Express Example

app.get("/users", (req, res) => {
  res.send("All Users");
});

2. POST Request - Create Data

Used for:

  • creating resources

  • sending new data to server

Example:

POST /users

Meaning:

“Create a new user.”


Express Example

app.post("/users", (req, res) => {
  res.send("User Created");
});

3. PUT Request - Update Data

Used for:

  • updating existing resources

Example:

PUT /users/42

Meaning:

“Update user with ID 42.”


Express Example

app.put("/users/:id", (req, res) => {
  res.send("User Updated");
});

4. DELETE Request - Remove Data

Used for:

  • deleting resources

Example:

DELETE /users/42

Meaning:

“Delete user with ID 42.”


Express Example

app.delete("/users/:id", (req, res) => {
  res.send("User Deleted");
});

Designing Clean REST Routes

One of the biggest REST principles is:

Use Nouns, Not Verbs

Good REST route:

/users

Bad REST route:

/getUsers
/createUser
/deleteUser

Why?

Because HTTP methods already describe the action.

Example:

GET /users
POST /users
DELETE /users/42

The method explains the operation clearly.


REST Request-Response Lifecycle

Example flow:

Client sends request
↓
Express route receives request
↓
Server processes logic
↓
Database operation happens
↓
Response returned as JSON

This is the core lifecycle of REST APIs.


Sending JSON Responses

REST APIs commonly return:

JSON

because it’s lightweight and easy for applications to understand.

Example:

res.json({
  id: 1,
  name: "Dhiraj"
});

Status Codes Basics

HTTP responses also include:

Status Codes

These indicate request results.


Common Status Codes

Status Code Meaning
200 Success
201 Resource Created
400 Bad Request
401 Unauthorized
404 Resource Not Found
500 Server Error

Example Response

res.status(201).json({
  message: "User Created"
});

This means:

  • request succeeded

  • new resource created


Example Small REST API in Express

const express = require("express");

const app = express();

app.use(express.json());

app.get("/users", (req, res) => {
  res.send("Get Users");
});

app.post("/users", (req, res) => {
  res.send("Create User");
});

app.put("/users/:id", (req, res) => {
  res.send("Update User");
});

app.delete("/users/:id", (req, res) => {
  res.send("Delete User");
});

app.listen(3000);

This small application already demonstrates core REST principles.


Why REST APIs Feel Predictable

REST works well because routes follow conventions.

Example:

Route Meaning
GET /users Fetch users
POST /users Create user
GET /users/1 Fetch specific user
PUT /users/1 Update user
DELETE /users/1 Delete user

Once developers learn the pattern, APIs become easier to use.


Simple Mental Model

Think of REST like organized resource management.

Resource

“What data are we managing?”


HTTP Method

“What operation are we performing?”


Route

“Where is that resource located?”


REST APIs provide a clean and structured way for applications to communicate.

The core ideas are:

  • resources represent data

  • HTTP methods represent actions

  • routes stay predictable

  • status codes describe results

Express.js makes REST API development simple because routing maps naturally to REST concepts.

Once you understand:

  • resources

  • HTTP methods

  • route conventions

  • request-response flow

designing APIs becomes much more intuitive.