Building a REST API with Laravel (PHP) and Node.js (JavaScript) can help you develop scalable and high-performance web applications. This step-by-step guide will show you how to set up both frameworks, build APIs, and integrate them efficiently.
Before building the API, install the necessary tools:
β Install Laravel (PHP Framework):
composer create-project --prefer-dist laravel/laravel LaravelAPI
β Install Node.js & Express.js (JavaScript Framework):
mkdir NodeAPI && cd NodeAPI
npm init -y
npm install express cors body-parser dotenv mongoose
β Database Setup: Use MySQL for Laravel and MongoDB for Node.js.
πΉ Why? Laravel works well with relational databases, while Node.js integrates seamlessly with NoSQL databases.
πΉ 1. Configure Database in .env
file:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=laravel_api
DB_USERNAME=root
DB_PASSWORD=
πΉ 2. Create a Model & Migration for users:
php artisan make:model User -m
πΉ 3. Define Schema in Migration File (database/migrations/xxxx_xx_xx_create_users_table.php
):
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamps();
});
}
Run Migration:
php artisan migrate
πΉ 4. Create API Routes (routes/api.php
):
Route::get('/users', [UserController::class, 'index']);
Route::post('/users', [UserController::class, 'store']);
πΉ 5. Build Controller for CRUD Operations (app/Http/Controllers/UserController.php
):
public function index() {
return response()->json(User::all(), 200);
}
public function store(Request $request) {
$user = User::create($request->all());
return response()->json($user, 201);
}
πΉ 1. Setup Express Server (server.js
):
const express = require('express');
const mongoose = require('mongoose');
require('dotenv').config();
const app = express();
app.use(express.json());
mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true });
app.listen(5000, () => console.log('Server running on port 5000'));
πΉ 2. Define User Schema (models/User.js
):
const mongoose = require('mongoose');
const UserSchema = new mongoose.Schema({
name: String,
email: { type: String, unique: true }
});
module.exports = mongoose.model('User', UserSchema);
πΉ 3. Create API Routes (routes/userRoutes.js
):
const express = require('express');
const router = express.Router();
const User = require('../models/User');
router.get('/users', async (req, res) => {
const users = await User.find();
res.json(users);
});
router.post('/users', async (req, res) => {
const user = new User(req.body);
await user.save();
res.status(201).json(user);
});
module.exports = router;
πΉ 4. Connect Routes to Server (server.js
):
const userRoutes = require('./routes/userRoutes');
app.use('/api', userRoutes);
β Use Postman or cURL to test the endpoints:
πΉ Test Laravel API:
curl -X GET http://127.0.0.1:8000/api/users
πΉ Test Node.js API:
curl -X GET http://localhost:5000/api/users
Laravel can consume Node.js APIs using Http::get()
.
πΉ Example (UserController.php
):
use Illuminate\Support\Facades\Http;
public function fetchFromNodeAPI() {
$response = Http::get('http://localhost:5000/api/users');
return response()->json($response->json());
}
In this guide, we covered how to:
β
Set up Laravel and Node.js
β
Create RESTful APIs using both frameworks
β
Perform CRUD operations
β
Test the APIs with Postman
β
Connect Laravel to Node.js API