REST API Sederhana dengan PHP dan MySQL

REST API Sederhana dengan PHP dan MySQL
REST API Sederhana dengan PHP dan MySQL

REST API (Representational State Transfer Application Programming Interface) adalah salah satu cara paling populer untuk membangun komunikasi antara berbagai sistem dalam aplikasi modern. Dengan REST API, kamu dapat menghubungkan aplikasi web, mobile, dan bahkan perangkat IoT secara efisien. Artikel ini akan membahas cara membuat REST API sederhana menggunakan PHP dan MySQL.

1. Persiapan Database

Langkah pertama adalah menyiapkan database. Kita akan membuat database rest_api_demo dengan sebuah tabel bernama users.

CREATE DATABASE rest_api_demo;

USE rest_api_demo;

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Setelah itu, masukkan beberapa data dummy:

INSERT INTO users (name, email) VALUES 
('Budi', 'budi@example.com'),
('Siti', 'siti@example.com');

2. Struktur Folder Project

Buat struktur folder seperti berikut:

rest-api/
├── config/
│   └── database.php
├── api/
│   ├── index.php
│   └── users.php
└── .htaccess

3. Koneksi ke Database

Buat file database.php di dalam folder config/:

<?php
class Database {
    private $host = "localhost";
    private $db_name = "rest_api_demo";
    private $username = "root";
    private $password = "";
    public $conn;

    public function connect() {
        $this->conn = null;
        try {
            $this->conn = new PDO(
                "mysql:host=" . $this->host . ";dbname=" . $this->db_name,
                $this->username,
                $this->password
            );
            $this->conn->exec("set names utf8");
        } catch(PDOException $exception) {
            echo "Connection error: " . $exception->getMessage();
        }

        return $this->conn;
    }
}
?>

4. Menangani Request API

Buat file users.php di folder api/. File ini akan menangani permintaan GET untuk mengambil data user.

<?php
header("Content-Type: application/json");
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");
header("Access-Control-Allow-Headers: Content-Type");

include_once "../config/database.php";

$db = new Database();
$conn = $db->connect();

$method = $_SERVER['REQUEST_METHOD'];

switch ($method) {
    case 'GET':
        $query = "SELECT * FROM users";
        $stmt = $conn->prepare($query);
        $stmt->execute();

        $users = [];
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            extract($row);
            $users[] = [
                "id" => $id,
                "name" => $name,
                "email" => $email,
                "created_at" => $created_at
            ];
        }

        echo json_encode($users);
        break;

    case 'POST':
        $data = json_decode(file_get_contents("php://input"));

        if (!empty($data->name) && !empty($data->email)) {
            $query = "INSERT INTO users (name, email) VALUES (:name, :email)";
            $stmt = $conn->prepare($query);
            $stmt->bindParam(':name', $data->name);
            $stmt->bindParam(':email', $data->email);

            if ($stmt->execute()) {
                echo json_encode(["message" => "User berhasil ditambahkan"]);
            } else {
                echo json_encode(["message" => "Gagal menambahkan user"]);
            }
        } else {
            echo json_encode(["message" => "Data tidak lengkap"]);
        }
        break;

    case 'PUT':
        $data = json_decode(file_get_contents("php://input"));

        if (!empty($data->id) && (!empty($data->name) || !empty($data->email))) {
            $fields = [];
            if (!empty($data->name)) {
                $fields[] = "name = :name";
            }
            if (!empty($data->email)) {
                $fields[] = "email = :email";
            }

            $query = "UPDATE users SET " . implode(", ", $fields) . " WHERE id = :id";
            $stmt = $conn->prepare($query);
            $stmt->bindParam(':id', $data->id);
            if (!empty($data->name)) $stmt->bindParam(':name', $data->name);
            if (!empty($data->email)) $stmt->bindParam(':email', $data->email);

            if ($stmt->execute()) {
                echo json_encode(["message" => "User berhasil diperbarui"]);
            } else {
                echo json_encode(["message" => "Gagal memperbarui user"]);
            }
        } else {
            echo json_encode(["message" => "Data tidak lengkap untuk update"]);
        }
        break;

    case 'DELETE':
        $data = json_decode(file_get_contents("php://input"));

        if (!empty($data->id)) {
            $query = "DELETE FROM users WHERE id = :id";
            $stmt = $conn->prepare($query);
            $stmt->bindParam(':id', $data->id);

            if ($stmt->execute()) {
                echo json_encode(["message" => "User berhasil dihapus"]);
            } else {
                echo json_encode(["message" => "Gagal menghapus user"]);
            }
        } else {
            echo json_encode(["message" => "ID diperlukan untuk menghapus user"]);
        }
        break;

    default:
        http_response_code(405);
        echo json_encode(["message" => "Metode tidak diizinkan"]);
        break;
}

5. Routing dengan index.php

Buat file index.php untuk menangani routing API:

<?php
$request = $_SERVER['REQUEST_URI'];

switch ($request) {
    case '/api/users':
        require __DIR__ . '/users.php';
        break;
    default:
        http_response_code(404);
        echo json_encode(["message" => "Endpoint not found"]);
        break;
}
?>

6. Konfigurasi .htaccess

Untuk mengarahkan semua request ke index.php, buat file .htaccess di root folder:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ api/index.php [QSA,L]

Pastikan server Apache mendukung mod_rewrite.

7. Uji Coba API

Jalankan server lokal (misalnya XAMPP atau Laragon), lalu akses:

http://localhost/rest-api/api/users

Hasilnya akan berupa data dalam format JSON seperti ini:

[
  {
    "id": 1,
    "name": "Budi",
    "email": "budi@example.com",
    "created_at": "2025-05-13 10:23:00"
  },
]

Penutup

Membuat REST API dengan PHP dan MySQL tidaklah rumit. Dengan memahami konsep dasar dan mengikuti langkah-langkah di atas, kamu dapat mengembangkan API untuk berbagai kebutuhan, seperti aplikasi mobile atau dashboard web. Ohiya jangan lupa untuk post data nya menggunakan tipe data JSON ya pada contoh ini.

Comments

No comments yet. Why don’t you start the discussion?

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *