Selasa, 14 Mei 2024

Tutorial belajar membuat rest api sederhana menggunakan PHP native dan database mysql

Langkah  pertama sebelum membuat program jalankan dulu web server anda di local komputer. Web server local saya sudah terpasang otomatis apachenya menggunakan control panel Laragon, jadi si laragon ini sudah bundle yang lengkap di dalamya sudah include database, php, node, bahkan python. Lihat interface control panel laragon kalo sudah jalan seperti gambar di bawah.

Selanjutnya buat folder baru masuk file explorer windows cari tempat penyimpan file instalasi laragon terlebih dahulu misal punya saya di path "C:\laragon\www"  kemudian buat folder baru beri nama " belajar-restapi-php ". Perhatikan struktur foldernya  seperti ini. 

Kode yang ada di file database.php dan user.php yaitu:

<?php

class Database {

    protected $connect;
    protected $stmt;
    protected $user = "root";
    protected $pass = "";

    public function __construct()
    {
        $this->connect = new PDO("mysql:host=localhost;dbname=test_db", $this->user, $this->pass);
    }

    public function query($sql, $data = [])
    {
        $this->stmt = $this->connect->prepare($sql);
        $this->stmt->execute($data);
    }

    public function multipleSet()
    {
        return $this->stmt->fetchAll(PDO::FETCH_OBJ);
    }
   
    public function singleSet()
    {
        return $this->stmt->fetch(PDO::FETCH_OBJ);
    }

    public function createTable()
    {
        $sql = "CREATE TABLE users(
            id INT(11) UNSIGNED PRIMARY KEY AUTO_INCREMENT,
            username VARCHAR(50) NOT NULL,
            email VARCHAR(150) NOT NULL,
            pass VARCHAR(200) NOT NULL,
            is_admin BOOLEAN DEFAULT 0,
            created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
        )";
        $this->query($sql);
        echo json_encode(['status' => 200, 'message'=> 'Create table successfully']);
    }
}


<?php
require_once("database.php");

class User extends Database{

    public function findAll()
    {
        $sql = "SELECT * FROM users ORDER BY id DESC";
        $this->query($sql);
        return $this->multipleSet();
       
    }

    public function findById($id)
    {
        $sql = "SELECT * FROM users WHERE id = :id";
        $data = array(
            'id'=> $id
        );
        $this->query($sql, $data);
        return $this->singleSet();

    }

    public function findByUsername($username)
    {
        $sql = "SELECT * FROM users WHERE username = :username";
        $data = array(
            'username'=> $username
        );
        $this->query($sql, $data);
        return $this->singleSet();

    }

    public function create($username, $email, $pass)
    {
        $sql = "INSERT INTO users(username, email, pass) VALUES(:username, :email, :pass)";

        $form_data = array(
            'username' => $username,
            'email' => $email,
            'pass' => password_hash($pass, PASSWORD_BCRYPT)
        );
        $this->query($sql, $form_data);
    }

    public function update($username, $email, $pass, $id)
    {
        $sql = "UPDATE users SET username = :username, email = :email, pass = :pass WHERE id = :id";

        $form_data = array(
            'username' => $username,
            'email' => $email,
            'pass' => password_hash($pass, PASSWORD_BCRYPT),
            'id' => $id
        );
        $this->query($sql, $form_data);
    }

    public function delete($id)
    {
        $sql = "DELETE FROM users WHERE id = :id";
        $data = array(
            'id' => $id
        );

        $this->query($sql, $data);
    }
}


Oh ya jangan lupa siapkan nama database beserta tabelnya sesuai konfigurasi nama class Database di atas yaitu test_db dan nama tabelnya users dulu abaikan yang folder products kita hanya buat crud rest api data user saja . cara membuat tabel user buka heidi sql dari laragon kemudian tombol tab query baru kita masukan syntaknya.

CREATE TABLE users(
            id INT(11) UNSIGNED PRIMARY KEY AUTO_INCREMENT,
            username VARCHAR(50) NOT NULL,
            email VARCHAR(150) NOT NULL,
            pass VARCHAR(200) NOT NULL,
            is_admin BOOLEAN DEFAULT 0,
            created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
        )



Langkah terakhir buat file baru diberi nama index.php di folder api/users dan isi kodenya seperti terlihat pada gambar di bawah.
















<?php
require_once('../user.php');

header("Content-Type: application/json");

$method = $_SERVER["REQUEST_METHOD"];

switch($method) {

    case 'GET':
     
        $user = new User();
        if(!empty($_GET['id'])){
            $id = $_GET['id'];
            $data = array(
                'status'=> 200,
                'user'=> $user->findById($id)
            );
        } else {
            $data = array(
                'status'=> 200,
                'users'=> $user->findAll()
            );
        }
       
        echo json_encode($data);
        break;
    case 'POST':
        $post = json_decode(file_get_contents('php://input'), true);
        $username = $post['username'];
        $email = $post['email'];
        $pass = $post['pass'];

        $user = new User();
        $row = $user->findByUsername($username);
        if($row){
            $data = array(
                'status' => 203,
                'message' => "$username found"
            );

        } else {
            $user->create($username, $email, $pass);
            $data = array(
                'status' => 201,
                'message' => 'Created successfully'
            );
        }
       
   
        echo json_encode($data);
       
        break;
    case 'PUT':

        $input = json_decode(file_get_contents('php://input'), true);
        $id = $input['id'];
        $username = $input['username'];
        $email = $input['email'];
        $pass = $input['pass'];
   
        $user = new User();
        $user->update($username, $email, $pass, $id);
        $data = array(
            'status' => 200,
            'message' => 'Updated successfully'
        );
   
        echo json_encode($data);
        break;
    case 'DELETE':
       
        $id = $_GET['id'];
        $user = new User();
        $user->delete($id);
        $data = array(
            'status' => 200,
            'message' => 'Deleted successfully'
        );
       
        echo json_encode($data);
        break;
    default:
        http_response_code(405);
        echo json_encode(['error' => 'Method not allowed']);
        break;
}



 

Untuk menguji api bisa jalan atau tidak bisa buka menggunakan postman. Bagi yang belum mengistalnya silahkan download dulu di situs resminya https://www.postman.com/downloads/.  di api yang saya buat ada 5 Endpoin user seperti menampilkan semua data user, single user, create user baru, update user dan delete user.
  • CREATE USER




  • UPDATE USER


  • DELETE USER


  • FETCH ALL USERS


  • SINGLE USER

Baik cukup sampai di sini belajar membuat simple crud rest api menggunakan php nativenya. Semoga artikel ini bermanfaat bagi kalian yang ingin mencobanya, silahkan kalian explore sendiri untuk pembuatan endpoint lainnya. Terima kasih, Happy Coding!👌

2 komentar:

Kastemisasi tampilan terminal linux menjadi keren

Install Oh My Posh langkah pertama anda dapat menginstal Oh My Posh dan Unzip agar dapat mengekstraknya, ketikkan perintah di terminal. sudo...