Building Your First REST API with PHP
π Introduction
If you want to build modern backends, mobile apps, dashboards, authentication systems, or connect your website to a database⦠you must understand REST APIs.
A REST API allows different software to talk to each other through simple URLs and JSON. And the best part? PHP β yes, the same language powering WordPress β is still one of the easiest and fastest ways to build an API.
By the end of this guide, you'll know how to:
- β Build your first REST API
- β Return clean JSON responses
- β Connect to a database
- β Handle GET, POST, PUT & DELETE
- β Understand API structure
- β Avoid beginner mistakes
Let's begin.
π§ What Is a REST API?
A REST API (Representational State Transfer) is a structured way for clients (web apps, mobile apps, other servers) to request or send data using standard HTTP verbs:
- GET β retrieve data
- POST β create data
- PUT/PATCH β update data
- DELETE β remove data
The server responds using JSON, the universal data format.
Example response:
{
"success": true,
"message": "User created successfully"
}If you can return JSON β you can build APIs.
π§° What You Need Before Starting
- β PHP 7.4+ (8.0 recommended)
- β Apache or Nginx
- β MySQL or MariaDB
- β Postman or Thunder Client (for testing)
- β Basic PHP knowledge
Folder example:
/api
/v1
index.php
users.phpSimple and effective.
π¦ Step 1 β Create Your API Folder
Inside your project or localhost:
mkdir api
cd api
mkdir v1Inside api/v1, create:
index.phpusers.php
index.php will act as a router for now.
π§ Step 2 β Enable JSON Output
Inside index.php:
<?php
header("Content-Type: application/json; charset=UTF-8");
echo json_encode([
"status" => "online",
"message" => "API is running!"
]);Visit:
http://localhost/api/v1/index.phpYou've just created your first API response.
ποΈ Step 3 β Connect to the Database
Create a file db.php:
<?php
$host = "localhost";
$user = "root";
$pass = "";
$db = "rest_api";
$conn = new mysqli($host, $user, $pass, $db);
if ($conn->connect_error) {
die(json_encode([
"success" => false,
"error" => $conn->connect_error
]));
}Then include it in users.php:
<?php
header("Content-Type: application/json");
require_once "../db.php";You now have database access.
π€ Step 4 β Build Your First GET Endpoint
Inside users.php:
if ($_SERVER["REQUEST_METHOD"] === "GET") {
$result = $conn->query("SELECT * FROM users");
$users = [];
while ($row = $result->fetch_assoc()) {
$users[] = $row;
}
echo json_encode([
"success" => true,
"data" => $users
]);
}Call:
GET /api/v1/users.phpYour API returns all users!
π Step 5 β Create a POST Endpoint (Add User)
Add this under the GET block:
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$data = json_decode(file_get_contents("php://input"), true);
$name = $conn->real_escape_string($data["name"]);
$email = $conn->real_escape_string($data["email"]);
$conn->query("INSERT INTO users (name, email) VALUES ('$name', '$email')");
echo json_encode([
"success" => true,
"message" => "User created!"
]);
}Send POST JSON:
{
"name": "John Doe",
"email": "john@example.com"
}User created.
π οΈ Step 6 β Add Update (PUT) Endpoint
if ($_SERVER["REQUEST_METHOD"] === "PUT") {
$data = json_decode(file_get_contents("php://input"), true);
$id = intval($data["id"]);
$name = $conn->real_escape_string($data["name"]);
$email = $conn->real_escape_string($data["email"]);
$conn->query("UPDATE users SET name='$name', email='$email' WHERE id=$id");
echo json_encode([
"success" => true,
"message" => "User updated!"
]);
}ποΈ Step 7 β Add Delete Endpoint
if ($_SERVER["REQUEST_METHOD"] === "DELETE") {
$data = json_decode(file_get_contents("php://input"), true);
$id = intval($data["id"]);
$conn->query("DELETE FROM users WHERE id=$id");
echo json_encode([
"success" => true,
"message" => "User deleted!"
]);
}CRUD completed.
π§ͺ Step 8 β Test Everything
Open Postman or Thunder Client:
GET all users
GET /api/v1/users.phpCreate a user
POST /api/v1/users.phpBody β JSON
{ "name": "Alice", "email": "alice@email.com" }Update a user
PUT /api/v1/users.php{ "id": 1, "name": "Alice Updated", "email": "alice@updated.com" }Delete a user
DELETE /api/v1/users.php{ "id": 1 }Everything should now work smoothly.
π‘οΈ Security Improvements (Real-World Best Practices)
To upgrade this API to professional level:
π 1. Add API Keys
Block requests without a valid key.
π 2. Use Prepared Statements
Prevent SQL Injection.
π§ 3. Add Rate Limiting
Stop brute force and spam.
π 4. Use Routing Libraries
Slim Framework or Laravel.
πͺͺ 5. Add User Authentication
JWT or sessions.
π¦ 6. Validate All Input
Never trust user data.
π§± Folder Structure (Recommended)
/api
/v1
/controllers
/models
index.php
users.php
/config
db.phpScalable and clean.
π Turning Your API Into a Real Product
Once your REST API is working, you can use it to power:
- Mobile apps (Flutter, React Native)
- Web dashboards (React, Vue)
- Authentication systems
- Ecommerce
- SaaS products
- Internal tools
- Game backends
A simple PHP API can grow into a full startup.