Skip to main content

Command Palette

Search for a command to run...

REST API Design Made Simple with Express.js

Updated
6 min read
REST API Design Made Simple with Express.js
A
Graduated In Computer Application (BCA) | Love Building Systems | Currently learning Full Stack Development with ChaiCode Web-Dev 26 Cohort

Building a web application some times feel like trying to organize massive library. If you don't have an system, finding a book or pice of data becomes nightmare. REST (REpresentational State Transfer) is that system. Its s gold standard of how the applications talk to each other over internet.

When you paire RESTful principle with Express.js - A minimal web framework for web application - you get a toolkit that is powerfull and incredibily easy to manage.

What REST API Means

At its core REST is an architectural style not a protocol or specific piece of software. Its a set of "rules of the road" for creating web services. When an apis is RESTful means it follow these specific constrains:

  1. Client Server Separation: the frontend (client) or backend (server) are independent. You can change your application UI wihtout touching the database services.

  2. Statelessness: the server doesn't remeber previous request, Every single request from the user must contain all information needed to understand and process it.

  3. Uniform Interface: its the big one, it's mean no matter what resources you are accessing, you use the same standardized methods like http verbs to do it.

Think like an vending machine, you don't need to know internal gears of that machine. You just need to know which button need to press (interface) to get your snacks (resources).

Resources in REST Architecture

In the world of REST every thing is a resources. A resources can be any "thing" or "object" that the API can provide information about.

  • Nouns not verbs: resources should always should be named as noun, instead of /getUser or /deleteUser, we simply use /users.

  • identifires (URIs) Each resources is uniquly identified by a uniqe path.

    • /products: represent collection of products.
    • /products/42: represent one specific product with id.

By treating data as resources your API becomes predictable. If a developers know your API has a "users" resources, they can probably guess how to find a specific user without even reading you documentation.

HTTP Methods: GET, POST, PUT, DELETE

If resources are the nouns, the http methods are the verbs. These tell the server what action to take on the resources. This is often referred to as CRUD (create, read, update, and delete).

Methods CRUD Actions Purpos
GET Read retirive data from the server like list users
POST Create send data to the server to create new resource like register users
PUT Update replace an existing entirely with new data
DELETE Delete remove a resources from the sever

Tip: GET request should be "idempotent" and "safe" meaning they should not change the state in database. Simply looking profile shouldn't delete the profile.

Status Codes Basics

When you send a request to server, it send back a status code. These three digit numbers are the server way of saying "i got your message, and here is what happend"

  • 2xx (Success): action was successfully recieved, understood, and accepted.
    • 200 (Ok): standard success code, page or resources was found and delivered perfactly.
    • 201 (created): request was successful and new resources was created.
  • 3xx (Redirection): further action needed to complete the action.
    • 301 (moved permanently): page has new permanent url.
    • 302 (found): a temporary redirect.
  • 4xx (Client Error): request contained bad syntax, or can not fullfiled because of user error.
    • 400 (bad request): server didn't understand request.
    • 401 (unauthorized): need valid credential to access resources.
    • 403 (forbidden): don't have permissions.
    • 404 (notfound): server couldn't find specific resources.
  • 5xx (Server Error): server failed to fullfill an apparently valid request.
    • 500 (internal server error): a generic something want wrong on server side.
    • 503 (service unavailabel): server is currently overloaded or down for maintainance.

Designing Routes Using REST Principles

In express designing routes is the where "Simple" part of the "REST Made Simple" relly shines. You use the app object to define your endpoints using the http methods we dicussed.

Standard pattren is: app.<METHOD>(<PATH>, <callback>)

Good routes designing:

  • Use plural nouns like /posts not post.
  • Nesting for relationship like use /posts/:id/comments for getting all comments for specific post.
  • Avoid verbs in path like don't use /users/update/1 use PUT /users/1 instead.

Example Resource: Users

Lets put it all together. Here is example of how you would structure a standard "Users" resources in an express.js application.

const express = require("express");
const app = express();
app.use(express.json()); // To parse JSON bodies

// 1. GET all users
app.get("/users", (req, res) => {
  // Logic to fetch all users from DB
  res.status(200).json({ message: "List of all users" });
});

// 2. GET a single user by ID
app.get("/users/:id", (req, res) => {
  const userId = req.params.id;
  res.status(200).json({ message: `Details for user ${userId}` });
});

// 3. POST - Create a new user
app.post("/users", (req, res) => {
  const newUser = req.body;
  // Logic to save newUser to DB
  res.status(201).json({ message: "User created", data: newUser });
});

// 4. PUT - Update a user
app.put("/users/:id", (req, res) => {
  const userId = req.params.id;
  // Logic to update user in DB
  res.status(200).json({ message: `User ${userId} updated` });
});

// 5. DELETE - Remove a user
app.delete("/users/:id", (req, res) => {
  const userId = req.params.id;
  res.status(204).send(); // 204 means 'No Content' (successful delete)
});

app.listen(3000, () => console.log("Server running on port 3000"));

By following this structure your api remains clean, readable and most important easy for other developers (and you future self) to understand.

Summary

REST (Representational State Transfer) is a stateless architectural style that uses Resources (the "nouns," like /users) and HTTP Methods (the "verbs") to manage data.

In Express.js, you map these methods—GET (read), POST (create), PUT (update), and DELETE (remove)—to specific routes. Communication is clarified through Status Codes, such as 200 OK or 404 Not Found. By using plural nouns and logical nesting, you create a predictable, scalable interface. This decoupled design ensures that the client and server can evolve independently, making development both organized and efficient.