
How To Create API in Next JS
Creating an API in Next.js is one of the most powerful and convenient features of the framework. Whether you're building a modern web app, a dashboard, or a mobile backend, Next.js simplifies the process by allowing developers to build both frontend and backend functionalities in one project.
In this comprehensive guide, we'll explore how to create an API in Next.js, from setting up routes to handling dynamic endpoints and connecting to databases. You'll also learn best practices, security tips, and how professional teams like AAMAX can help you develop scalable and efficient MERN Stack Development.
π§© What Is an API in Next.js?
In traditional web development, developers often separate the frontend (built with React or another framework) and the backend (built with Express, Node.js, or similar). However, Next.js combines both worlds by allowing you to create API routes directly inside your Next.js application.
These API routes run on the server side and can handle requests such as GET, POST, PUT, and DELETE --- just like any Express.js route. This makes Next.js a full-stack framework out of the box.
Benefits of Using API Routes in Next.js
- No need for a separate backend: Build backend logic directly inside your Next.js app.
- Simplified deployment: Both frontend and backend are deployed together on the same platform.
- Serverless-ready: Next.js API routes work perfectly with serverless functions (like Vercel or AWS Lambda).
- Fast and scalable: Built-in optimization and edge functions make it ideal for performance-driven apps.
ποΈ Setting Up a Next.js Project
Before creating your API, you'll need to have a Next.js app ready.
Step 1: Create a New Next.js App
You can create a new project using the following command:
npx create-next-app@latest my-api-app
Move into your project directory:
cd my-api-app
Step 2: Run the Development Server
To make sure everything is working, start your development server:
npm run dev
Visit http://localhost:3000 in your browser --- you should see your
default Next.js app running.
π§ Understanding the API Folder Structure
Next.js uses a special folder called /pages/api for API routes.
Every file inside this directory automatically becomes an endpoint.
For example:
/pages/api/
βββ hello.js
βββ users.js
βββ posts/
βββ index.js
Each file represents an API route accessible via /api/filename. For
instance, pages/api/hello.js becomes available at
http://localhost:3000/api/hello.
βοΈ Creating Your First API Route
Let's create your first basic API route.
Inside the /pages/api directory, create a file named hello.js and
add the following code:
export default function handler(req, res) {
res.status(200).json({ message: "Hello from Next.js API!" });
}
Now, open your browser and navigate to
http://localhost:3000/api/hello. You should see:
{ "message": "Hello from Next.js API!" }
Congratulations --- you've just built your first API route in Next.js!
π§° Handling HTTP Methods (GET, POST, PUT, DELETE)
In real-world applications, APIs often handle multiple request types. Let's build an example that supports CRUD operations.
Create a new file pages/api/users.js and add the following code:
let users = [
{ id: 1, name: "Alice" },
{ id: 2, name: "Bob" }
];
export default function handler(req, res) {
const { method } = req;
switch (method) {
case "GET":
res.status(200).json(users);
break;
case "POST":
const newUser = { id: Date.now(), ...req.body };
users.push(newUser);
res.status(201).json(newUser);
break;
default:
res.setHeader("Allow", ["GET", "POST"]);
res.status(405).end(`Method ${method} Not Allowed`);
}
}
Now you can: - GET all users by visiting /api/users. - POST a
new user by sending JSON data using Postman or a frontend form.
π Creating Dynamic API Routes
Dynamic routes allow you to handle requests for specific items --- for example, fetching a user by ID.
Create a new file at pages/api/users/[id].js:
let users = [
{ id: 1, name: "Alice" },
{ id: 2, name: "Bob" }
];
export default function handler(req, res) {
const {
query: { id },
method
} = req;
const user = users.find(u => u.id === parseInt(id));
if (!user) {
res.status(404).json({ message: "User not found" });
return;
}
switch (method) {
case "GET":
res.status(200).json(user);
break;
case "PUT":
user.name = req.body.name || user.name;
res.status(200).json(user);
break;
case "DELETE":
users = users.filter(u => u.id !== parseInt(id));
res.status(204).end();
break;
default:
res.setHeader("Allow", ["GET", "PUT", "DELETE"]);
res.status(405).end(`Method ${method} Not Allowed`);
}
}
Now you can fetch, update, or delete specific users dynamically!
ποΈ Connecting Your Next.js API to a Database
To make your API persistent, you'll want to connect it to a database. Let's see how to connect it to MongoDB using Mongoose.
Step 1: Install Mongoose
npm install mongoose
Step 2: Create a Database Connection File
Create a new file at lib/dbConnect.js:
import mongoose from "mongoose";
const MONGODB_URI = process.env.MONGODB_URI;
if (!MONGODB_URI) {
throw new Error("Please define the MONGODB_URI environment variable inside .env.local");
}
let cached = global.mongoose;
if (!cached) {
cached = global.mongoose = { conn: null, promise: null };
}
async function dbConnect() {
if (cached.conn) return cached.conn;
if (!cached.promise) {
const opts = { bufferCommands: false };
cached.promise = mongoose.connect(MONGODB_URI, opts).then((mongoose) => mongoose);
}
cached.conn = await cached.promise;
return cached.conn;
}
export default dbConnect;
Step 3: Use It in an API Route
Now modify your API route to connect to MongoDB before handling requests.
import dbConnect from "@/lib/dbConnect";
import User from "@/models/User";
export default async function handler(req, res) {
await dbConnect();
if (req.method === "GET") {
const users = await User.find({});
res.status(200).json(users);
} else if (req.method === "POST") {
const user = await User.create(req.body);
res.status(201).json(user);
} else {
res.status(405).end();
}
}
You'll also need a Mongoose model (models/User.js):
import mongoose from "mongoose";
const UserSchema = new mongoose.Schema({
name: {
type: String,
required: true,
},
email: {
type: String,
required: true,
unique: true,
}
});
export default mongoose.models.User || mongoose.model("User", UserSchema);
π Securing Your Next.js API
Security is crucial when building APIs. Here are a few key recommendations:
- Validate Input: Never trust user input. Use libraries like Joi or Zod for validation.
- Rate Limiting: Prevent abuse using middleware or tools like
express-rate-limit. - Use Authentication: Secure endpoints using JWT, NextAuth.js, or OAuth.
- Hide API Keys: Store sensitive information in
.env.local. - Use HTTPS: Always use secure connections in production.
π Deploying Your Next.js API
One of the advantages of using Next.js is easy deployment. Since API routes are serverless functions, deployment platforms like Vercel, Netlify, or AWS Lambda work seamlessly.
Deploying on Vercel
Just run:
vercel
Vercel automatically detects and deploys your API routes as serverless functions.
π§βπ» Common Use Cases for Next.js APIs
Next.js APIs are suitable for a variety of use cases, such as:
- Form handling: Submitting forms directly to API routes.
- Authentication: Managing sign-up, login, and logout logic.
- E-commerce: Handling orders, payments, and inventory.
- Blog platforms: Managing posts, comments, and categories.
- Dashboard analytics: Fetching and managing dynamic data.
π‘ Pro Tips for Building Robust APIs in Next.js
- Use TypeScript for better type safety.
- Modularize your code --- use helper files for logic.
- Use middleware for authentication or rate-limiting.
- Test your API routes using tools like Jest or Supertest.
- Cache responses when possible to improve performance.
π Hire AAMAX for MERN Stack Development
If you're looking for expert help in Next.js API development or building scalable MERN stack applications, consider hiring AAMAX. As a full-service digital marketing and development company, AAMAX offers:
- Web Development (MERN, Next.js, React, Node.js)
- Digital Marketing & SEO Services
- API Integration and Cloud Deployment
Whether you're building a startup product, enterprise tool, or custom business platform, AAMAX can help you deliver high-performance, modern web applications.
Visit AAMAX today to get started with professional MERN stack development services.
β Final Thoughts
Creating APIs in Next.js is fast, efficient, and perfect for modern web apps. It eliminates the need for a separate backend, reduces complexity, and improves performance with built-in serverless support.
By following the steps in this guide --- from basic routes to database integration --- you now have the knowledge to create robust APIs inside your Next.js projects. For businesses and developers looking to take their web development to the next level, partnering with experts like AAMAX ensures your projects are handled with technical precision and creativity.






