Menu Navigasi

Tutorial Tutorial Pemrograman Part 44: Membangun REST API Sederhana dengan PHP

AI Generated
27 Desember 2025
25 views
Tutorial Tutorial Pemrograman Part 44: Membangun REST API Sederhana dengan PHP

Pendahuluan

Selamat datang di part 44 dari seri tutorial pemrograman PHP! Pada bagian ini, kita akan mempelajari cara membangun REST API sederhana menggunakan PHP. REST API (Representational State Transfer Application Programming Interface) adalah cara standar untuk membangun aplikasi web yang dapat berkomunikasi dengan aplikasi lain melalui protokol HTTP. Ini adalah topik tingkat menengah yang sangat penting untuk pengembangan web modern.

Prasyarat:

  • Pengetahuan dasar tentang PHP.
  • Memahami konsep HTTP (GET, POST, PUT, DELETE).
  • Text editor atau IDE untuk menulis kode.
  • Web server (misalnya Apache, Nginx) yang sudah terkonfigurasi dengan PHP.
  • Database (misalnya MySQL) untuk menyimpan data (opsional, tapi direkomendasikan).

Konsep Dasar

Bayangkan REST API seperti pelayan di restoran. Klien (aplikasi lain) mengirim permintaan (misalnya, memesan makanan), dan server (API) memberikan respons (misalnya, makanan yang dipesan). REST API bekerja dengan sumber daya (resources), seperti pengguna, produk, atau postingan. Setiap sumber daya memiliki URI (Uniform Resource Identifier) yang unik, seperti '/users' atau '/products/123'. Metode HTTP (GET, POST, PUT, DELETE) digunakan untuk melakukan operasi pada sumber daya tersebut.

  • GET: Mengambil data dari server.
  • POST: Membuat data baru di server.
  • PUT: Memperbarui data yang sudah ada di server.
  • DELETE: Menghapus data dari server.

Hands-on Coding

Mari kita bangun REST API sederhana untuk mengelola daftar pengguna. Kita akan membuat endpoint untuk mengambil daftar pengguna (GET /users), menambahkan pengguna baru (POST /users), memperbarui pengguna (PUT /users/{id}), dan menghapus pengguna (DELETE /users/{id}).

1. Struktur Proyek

Buat struktur proyek seperti berikut:


rest_api/
├── index.php
├── .htaccess (untuk Apache)
└── users.php

2. File .htaccess (untuk Apache)

Jika Anda menggunakan Apache, buat file .htaccess untuk mengarahkan semua permintaan ke index.php:


RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]

3. File users.php

Buat file users.php untuk menangani logika CRUD (Create, Read, Update, Delete) untuk pengguna. Kita akan simpan data pengguna dalam array sederhana untuk contoh ini.


 ['id' => 1, 'name' => 'John Doe', 'email' => 'john.doe@example.com'],
    2 => ['id' => 2, 'name' => 'Jane Smith', 'email' => 'jane.smith@example.com'],
];

function getUsers() {
    global $users;
    return $users;
}

function getUser($id) {
    global $users;
    return $users[$id] ?? null;
}

function createUser($data) {
    global $users;
    $newId = max(array_keys($users)) + 1;
    $data['id'] = $newId;
    $users[$newId] = $data;
    return $data;
}

function updateUser($id, $data) {
    global $users;
    if (isset($users[$id])) {
        $users[$id] = array_merge($users[$id], $data);
        return $users[$id];
    } else {
        return null;
    }
}

function deleteUser($id) {
    global $users;
    if (isset($users[$id])) {
        unset($users[$id]);
        return true;
    } else {
        return false;
    }
}

?>

4. File index.php

File ini akan menjadi titik masuk (entry point) untuk semua permintaan API. Di sini, kita akan memeriksa metode HTTP dan URI yang diminta, dan memanggil fungsi yang sesuai dari users.php.


 'User not found']);
                    }
                } else {
                    echo json_encode(array_values(getUsers()));
                }
                break;
            case 'POST':
                $data = json_decode(file_get_contents('php://input'), true);
                $newUser = createUser($data);
                echo json_encode($newUser);
                break;
            case 'PUT':
                if ($id) {
                    $data = json_decode(file_get_contents('php://input'), true);
                    $updatedUser = updateUser($id, $data);
                    if ($updatedUser) {
                        echo json_encode($updatedUser);
                    } else {
                        http_response_code(404);
                        echo json_encode(['message' => 'User not found']);
                    }
                } else {
                    http_response_code(400);
                    echo json_encode(['message' => 'User ID required for PUT request']);
                }
                break;
            case 'DELETE':
                if ($id) {
                    if (deleteUser($id)) {
                        echo json_encode(['message' => 'User deleted']);
                    } else {
                        http_response_code(404);
                        echo json_encode(['message' => 'User not found']);
                    }
                } else {
                    http_response_code(400);
                    echo json_encode(['message' => 'User ID required for DELETE request']);
                }
                break;
            default:
                http_response_code(405);
                echo json_encode(['message' => 'Method not allowed']);
        }
        break;
    default:
        http_response_code(404);
        echo json_encode(['message' => 'Resource not found']);
}

?>

Penjelasan Kode:

  • require 'users.php';: Memasukkan file users.php yang berisi fungsi-fungsi untuk mengelola data pengguna.
  • header('Content-Type: application/json');: Mengatur header respons HTTP ke application/json, sehingga klien tahu bahwa respons yang diterima adalah data JSON.
  • $_SERVER['REQUEST_METHOD'];: Mendapatkan metode HTTP yang digunakan dalam permintaan (GET, POST, PUT, DELETE).
  • $_SERVER['REQUEST_URI'];: Mendapatkan URI yang diminta.
  • explode('/', trim($uri, '/'));: Memecah URI menjadi bagian-bagian berdasarkan tanda '/', dan menghapus tanda '/' di awal dan akhir URI.
  • file_get_contents('php://input'): Mendapatkan data yang dikirim dalam body permintaan (biasanya untuk POST dan PUT).
  • json_decode(..., true): Mengubah string JSON menjadi array asosiatif PHP.
  • json_encode(...): Mengubah array asosiatif PHP menjadi string JSON.
  • http_response_code(...): Mengatur kode status HTTP respons.

Common Pittfalls

  • Tidak memvalidasi data input: Selalu validasi data yang diterima dari klien untuk mencegah serangan injeksi dan memastikan data yang disimpan valid.
  • Tidak menangani error dengan benar: Gunakan kode status HTTP yang sesuai untuk menunjukkan keberhasilan atau kegagalan permintaan.
  • Tidak menggunakan HTTPS: Gunakan HTTPS untuk mengenkripsi komunikasi antara klien dan server, terutama jika Anda mengirim data sensitif.
  • Terlalu banyak logika dalam satu file: Pisahkan logika ke dalam file yang berbeda untuk menjaga kode tetap terorganisir dan mudah dipelihara.
  • Lupa mengimplementasikan autentikasi dan otorisasi: Lindungi API Anda dengan autentikasi (siapa pengguna) dan otorisasi (apa yang boleh dilakukan pengguna).

Challenge

Tingkatkan API ini dengan menambahkan validasi input untuk memastikan data yang diterima valid. Misalnya, pastikan bahwa email memiliki format yang benar dan nama tidak kosong.

Selanjutnya, tambahkan fungsionalitas untuk menyimpan data pengguna ke database MySQL, bukan hanya dalam array.

Sebagai tantangan ekstra, implementasikan autentikasi dasar menggunakan username dan password.

Karena di Part 43 kita telah membahas 'PHP Generators untuk Iterasi Memori-Efisien', cobalah implementasi REST API ini dengan Generator untuk data set yang besar agar meminimalisir penggunaan memori!

Sumber Referensi

Bagikan: