Membuat Crud Restful API OOP PHP dan MySQL

Membuat Crud Restful API OOP PHP dan MySQL

Pada kesempatan kali ini kita akan belajar mengenai membuat CRUD Restful API dengan OOP PHP dan mysql, penerapan CRUD Restful API dengan OOP PHP dan mysql tentunya memberi kemudah untuk mengakses fungsi-fungsi yang dibutuhkan. Tutorial CRUD Restful API OOP PHP ini merupakan tutorial lanjutan dari tutorial sebelumnya yaitu Membuat CRUD Restful API PHP dan MySQL.

Selanjutnya kita akan membuat struktur baru dengan menambahkan v2 (versi ke dua dari tutorial yang sebelumnya) bagi teman-teman yang belum mengikuti tutorial sebalumnya dapat mengunjungi link yang tertera diatas, Lalu bagaiman untuk memodifikasi struktur forder pada project restful_api? untuk struktur fordernya sendiri silahkan kalian perhatikan gambar dibawah ini:

Struktur Folder

Kita tentunya dapat melihat pada struktur folder diatas, yang pertama kita menambahkan terlebih dahulu folder dengan nama v2, selanjutnya pada folder v2 berisi tiga folder yaitu api, config dan model. Dimana pada file-file nya mempunyai fungsi yang berbeda-beda.

Pada file model->Produk.php, digunakan untuk menyimpan script yang dapat berinteraksi dengan database atau tabel-tabel yang terkait dengan menggunakan suatu koneksi yaitu pada file config->Database.php. Sedangkan untuk api->produk.php digunakan untuk menyimpan script yang digunakan untuk membuat dan meminta request restful api.

Tahap Pembuatan Struktur Restful API

Pada bagian ini admin akan membahas langsung mengenai bagaimana implementasi yang digunakan untuk membuat atau merubah struktur Restful api PHP biasa menjadi OOP.

1. Membuat Koneksi database

Pada bagian pertama ini kita akan membuat script koneksi yang tentunya untuk menghubungkan dengan database, untuk script koneksinya sendiri sedikit berbeda dengan sebelumnya, karena disini admin menambahkan beberapa kondisi. Untuk implementasi dari script koneksinya teman-teman dapat mengikut seperti dibawah ini:

<?php
	class Database{
	//pembuatan variabel
	private $host = "localhost"; 
	private $db_name = "dbrest";
	private $username ="root"; 
	private $password ="";
	public $conn;
	//get the data base connection 
	public function getConnection(){
		$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 "Connectionerror:" . $exception->getMessage();
	}return $this->conn;
    }
}
?>

Kita dapat melihat pada script diatas yaitu terdapat class Database, kalian harus sesuaikan class tersebut, dan membuat variabel untuk selanjutnya membuat kondisi untuk menghubungkan dengan database . Langkah selanjutnya kita akan mengisi folder Produk.php dengan kode program yang awalan.

2. Tahap Awal Mengisi Model Produk.php

Pada bagian ini kita akan mengisi model Produk.php yang terdapat pada folder model, untuk script awalan atau dapat dikatakan sebagai struktur dasar silahakan kalian ikuti script dibawah ini:

<?php 
    Class Produk{

        //database connection and table name
        private $conn;
        private $table_name = "produk";

        // object properties
        public $id;
        public $nama_produk;
        public $harga;
        public $tipe_produk;
        public $stok;

        // constructor with $db as database connection
        public function __construct($db)
        {
            $this->conn = $db;
        }

        // read all products
        function read(){
           
        }

        // read single products by id
        function readOne(){
           
        }

        //create products
        function create(){
        
         }

        //update the product
        function update(){
            //updatequery
            
        }

        // detela the products
        function delete(){
            //deletequery
       
        }
}
?>

Pada script diatas kita harus memperhatikan penamaan class yaitu dengannama Produk, selanjutnya kita membuat beberapa variabel dengan menggunakan akses publik (supaya dapat diakses oleh function yang mana saja), lalu kita juga membuat suatu constructor yang merupakan class pertama kali yang akan dieksekusi ketika program dijalankan. Selanjutnya membuat beberapa function yang nantunya function-function tersebut akan kita isi dengan script yang digunakan untuk mendukung dalam pembuatan restful API.

Oke langkah selanjutnya kita akan mengisi file produk.php yang terdapat pada folder api. silahkan simak dan pahami penjelasan berikut.

3. Tahap Awal Mengisi Api produk.php

Pada bagian ini kita juga akan mengisi script dasar atau dapat kita sebut dengan struktur script, dimana script ini akan menyimpan script-script lainnya yang berhubungan dengan request API. Untuk struktur dari file produk.php ini kalian dapat ikuti script dibawah ini:

<?php
	header("Access-Control-Allow-Origin:*");
	header("Content-Type:application/json;charset=UTF-8");
	header("Access-Control-Allow-Methods:POST,GET,PUT,DELETE");
	header("Access-Control-Max-Age:3600");
	header("Access-Control-Allow-Headers:Content-Type,Access-Control-Allow-Headers,Authorization,X-Requested-With");
	// get database connection
	include_once '../../v2/config/database.php';
	// instantiate product model 
	include_once '../../v2/model/produk.php';
	
	//Connection to databaser
	$database = new Database();
	$db = $database->getConnection();

	//create objek produk 
	$produk = new Produk($db);
	//get request method from client 
	$request = $_SERVER['REQUEST_METHOD'];

	//check request method client
	switch($request)
	{
		case 'GET' :
		//code if the client request method GET
        	
        break;

		case 'POST' :
		//code if the client request method is POST
        
		break;

		case 'PUT' :
		//code if the client request method is PUT
            //codeiftheclientrequestmethodisPUT
            
		break;

		case 'DELETE' :
		//code if the client request method is DELETE
            //codeiftheclientrequestmethodisDELETE
       
		break;

		default :
		//code if the client request is not GET ,POST ,PUT ,DELETE 
		http_response_code(404);

		echo "Request tidak diizinkan";
	}
?>

Pada script diatas kita melihat terdapat beberapa header, header tersebut digunakan untuk keperluan saat pembuatan restful api secara singkatnya kita tidak perlu mengatur atau mengkonfigurasi lagi bagian bagian tersebut baik pada aplikasi postman ataupun pada aplikasi apapun yang berhubungan dengan header tersebut.

Tidak lupa kita juga memasukan file koneksi kedalam file ini, terdapat tandaa ../ itu digunakan untuk keluar dari folder. Lalu kita membuat object dengan script $produk = new Produk($db); , Selanjutnya terdapat pengkondisian dengan menggunakn switch case. Untuk lebih memahami script diatas teman-teman dapat mencoba mengikuti dan menerapkannya.

Tahap Pembuatan CRUD Restful API OOP PHP dan MySQL

Pada tahapan ini kita akan membuat script CRUD Restful API dengan konsep OOP, Oke lansung saja kita bahas script dan penjelasannnya dibawahi ini, yang pertama yang akan kita buat adalah membuat script intuk menampilkan seluruh data.

1. Menampilkan seluruh data Produk

Untuk dapat menampilkan seluruh data yang terdapat dalam tabel produk silahkan kalian tambahkan script berikut pada fungsi read yang terdapat pada model Produk.php berlokasi di model:

 $query = "SELECT
                        id, nama_produk, harga, tipe_produk, stok
                     FROM
                        " . $this->table_name . "
                        ORDER BY id ASC";
            //prepare query statement
            $stmt = $this->conn->prepare($query);

            // execute query
            $stmt->execute();
            return $stmt;

Dari script ditas data yang akan ditampilkan yaitu (id, nama_produk, harga, tipe_produk, stok) dengan menggunkan ORDER By id yaitu perintah untuk urutan data yang akan ditampilkan pada respon JSON. Kemudian silahkan kalian buka file produk.php yang terdapat pada folder api, kemudian pada metode GET silahkan tambahkan kode berikut:

if(!isset($_GET['id'])){
            $stmt=$produk->read()
            ;$num = $stmt->rowCount();
        
            // check if more than 0 record found
            if($num>0){
                //products array
                $produks_arr=array();
                $produks_arr["records"]=array();
        
                // retrieve our table contents
                // fetch() is faster than fetch All()
                while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
                    // extract row 
                    // this will make $row['name']to
                    // just $name only
                    extract($row);
        
                    $produk_item=array(
                        "id" => $id,
                        "nama_produk" => $nama_produk,
                        "harga" => $harga,
                        "tipe_produk" => $tipe_produk,
                        "stok" => $stok
                    );
                    array_push($produks_arr["records"], $produk_item);
                }
                // set response code-200 OK 
                http_response_code(200);
        
                // show products data in json format 
                echo json_encode($produks_arr);
            }else{
                // no products found will be here
                // set response code - 404 Not found
                http_response_code(404);
        
                //tell the user no products found 
                echo json_encode(
                    array("message" => "No products found.")
                );
            }
            }
            elseif($_GET['id'] == NULL){
                echo json_encode(array("message" => "Parameter Id id tidak boleh kosong"));
            }else{
            //set ID property of record to read 
            $produk->id=$_GET['id'];
        
            // read the details of product to be edited
            $produk->readOne();
        
            if($produk->id!=null){
                //create array
                $produk_item=array(
                    "id" => $produk->id,
                    "nama_produk" => $produk->nama_produk,
                    "harga" => $produk->harga,
                    "tipe_produk" => $produk->tipe_produk,
                    "stok" => $produk->stok
                );
        
                //set response code- 200 OK 
                http_response_code(200);
        
                //make it json format 
                echo json_encode($produk_item);
            }else{
                //set response code-404 Not found 
                http_response_code(404);
        
                //tell the user product does notexis 
                echo json_encode(array("message" => "Productdoesnotexist."));
            }
            }

Script untuk menampilkan data seperti diatas memang berbeda dengan cara menampilkan data tampa menggunakan konsep OOP, terlihat lebih panjang scriptnya. Tetapi dengan menggunakan konsep OOP ini akan memudahkan kita dalam melakukan penggabungan tabel atau menampilkan data dari beberapa tabel yang berbeda tentunya. Silahkan teman-teman ikuti script diatas dan perhatikan baris perbaris dari sintak yang ditulis supaya tidak terdapat error atau kendala.

Selanjunya kita akan melakukan pengecekan pada aplikasi Postman, jika berhasil maka hasil yang diberikan oleh respon JSON seperti pada gambar dibawah ini:

Tampil All Produk

Pada gambar diatas merupakan respon yang diberikan ketika kita telah berhasil melakukan pengecekan menggunakan aplikasi Postman, maka hasil yang diberikan yaitu kita berhasil untuk membuat restful API pada merode menampilkan semua data produk. Oke langkah selanjutnya kita akan membuat scipt yang digunakan untuk menampilkan data berdsarkan id, silahkan teman-teman ikuti dan simak penjelasan dibawah ini.

2. Menampilkan data Produk berdasarkan Id

Pada bagian ini kita akan membuat script untuk menampilkan data produk berdasarkan id yang dipilih, tentunya pertama yang harus dilakukan adalah dengan membuka model Produk.php yang terdapat pada folder model, selanjutnya silahkan tambahkan script dibawah ini pada function readOne seperti berikut ini:

//query to read single record
            $query = "SELECT
            id, nama_produk, harga, tipe_produk, stok
            FROM
            " . $this->table_name . "
            WHERE
            id = ?";
            //prepare query statement
            $stmt = $this->conn->prepare($query);

            // bind id of product to be updated
            $stmt->bindParam(1, $this->id);

            // execute query
            $stmt->execute();

            // get retrieved row
            $row = $stmt->fetch(PDO::FETCH_ASSOC);

            //set values to object properties
            $this->nama_produk = $row['nama_produk'];
            $this->harga=$row['harga'];
            $this->tipe_produk=$row['tipe_produk'];
            $this->stok=$row['stok'];

Script diatas hampir sama dengan script sebelumnya, hanya saja ada sedikit perbedaan yaitu pada script diatas memerlukan suatu value atau id untuk dapat menampilkan data. Kita tentunya tidak perlu lagi mengisikan pada file api->produk.php karena script yang panjang tadi sudah mewakili script untuk menampilkan data berdasarkan id ini.

Selanjutnya kita akan langsung melakukan pengecekan dengan menggunakan aplikasi Postman, pada aplikasi tersebut kita akan memasukan parameter id pada bagian query string parameter, untuk contoh implementasinya silahkan teman-teman perhatikan gambar berikut:

tampil produk by id

Implementasi dari menampilkan data berdasarkan id sudah berhasil dilakukan, kita dapat melihat pada gambar.. admin memasukan id dengan nomor 2 maka data yang ditampilkan oleh respon JSON dengan id nomor 2. Pada tahapan selanjutnya kita akan membuat function create data atau insert data untuk implementasinya dapat memperhatikan pembahasan dibawah ini.

3. Insert data Produk

Pada bagian ketiga ini kita akan membuat function atau script insert data, yang digunakan untuk menambah data tentunya, metode yang digunakan yaitu dengan metode POST. Untuk dapat melakukan insert data silahkan kalian buka model Produk.php yang terdapat pada folder model, kemudian silahkan tambahkan function dibawah ini pada function create:

//query to insert record
            $query = "INSERT INTO
            " . $this->table_name . "
            SET
                nama_produk=:nama_produk,
                harga=:harga,
                tipe_produk=:tipe_produk,
                stok=:stok";

            // prepare query
            $stmt = $this->conn->prepare($query);

            // bind values 
            $stmt->bindParam(":nama_produk", $this->nama_produk);
            $stmt->bindParam(":harga", $this->harga);
            $stmt->bindParam(":tipe_produk", $this->tipe_produk);
            $stmt->bindParam(":stok", $this->stok);

            //execute query 
            if($stmt->execute())
            {
            return true;
            }
            return false;

Pada script diatas, ada beberapa field yang harus diisi diantanya, nama_produk, harga, tipe_produk, dan stok .. Untuk id sendiri kita tidak perlu memasukannya karena sudah otomatis terinput karena menggunakan autoincrement. Setelah kalian sudah menerapkan script diatas maka langkah selanjutnya adalah menambahkan script pada file produk.php pada bagian case POST seperti berikut ini

//code if the client request method is POST
        if(
            isset($_POST['nama_produk'])&&
            isset($_POST['harga'])&&
            isset($_POST['tipe_produk'])&&
            isset($_POST['stok'])
        )
        {
        //menerima kiriman data melalui method request POST
            $produk->nama_produk = $_POST['nama_produk'];
            $produk->harga = $_POST['harga'];
            $produk->tipe_produk = $_POST['tipe_produk'];
            $produk->stok = $_POST['stok'];
        
            //create the product 
            if($produk->create()){
        
                // set response code - 201 created
                http_response_code(201);
                //echo json_encode(array("kode_status"=>"201"));
        
                //telltheusere
                echo json_encode(array("pesan_kesalahan" => "Product was created."));
            }
            //ifunabletocreatetheproduct,telltheuser
            else{
                //setresponsecode-503serviceunavailable
                http_response_code(503);
        
                //telltheuser
                //echojson_encode(array("message"=>"Unabletocreateproduct."));
        
                $result=array(
                    "status_kode" => 503,
                    "status_massage" => "Unabletocreateproduct"
                );
                echo json_encode($result);
            }
        }
        //telltheuserdataisincomplete
        else{
            //setresponsecode-400badrequest
            http_response_code(400);
        
            $result=array(
                "status_kode" => 400,
                "status_massage" => "Unable to create product"
            );
            echo json_encode($result);
        }

Silakan teman-teman ikuti script diatas dan implementasikan pada case POST, selanjutnya kita akan kembali melakukan pengecekan dengan menggunakan aplikasi Postman, tentunya terdapat sedikit perbedaan pada bagian create data , silahkan teman-teman ikuti menu apa saja yang diklik pada aplikasi Postman seperti berikut.

Create produk

Pada gambar diatas kita melihat respon yang diberikan oleh json adalah “Product wa created” yang artinya kita telah berhasil menginputkan data produk kedalam tabel produk yang terdapat pada database. Untuk mengecek apakah sudah benar teman-teman dapat mengeceknya dengan mengunakan metode GET. Selanjutnya kita akan membuat script edit yang digunakan untuk mengubah dapat yang tedapat pada tabel produk. Siahkan simak kembali pembahasan dibawah ini:

4. Edit data Produk

Pada bagian keempat ini kita akan mengimplementasikan edit data dengan menggunakan konsep OOP, untuk membuat script edit kalian dapat mengikut script dibawah ini dengan membuat model Produk.php yang terdapat pada foldet model, pada bagian function update silahkan tambahkan script berikut ini:

//updatequery
            $query= "UPDATE
            " . $this->table_name . "
            SET
            nama_produk = :nama_produk,
            harga = :harga,
            tipe_produk = :tipe_produk,
            stok = :stok
            WHERE
            id = :id";

            //preparequerystatement
            $stmt = $this->conn->prepare($query);

            //bindnewvalues
            $stmt->bindParam(':nama_produk', $this->nama_produk);
            $stmt->bindParam(':harga', $this->harga);
            $stmt->bindParam(':tipe_produk', $this->tipe_produk);
            $stmt->bindParam(':stok', $this->stok);
            $stmt->bindParam(':id', $this->id);

            //executethequery
            if($stmt->execute()){
            return true;
            }

            return false;

Pada bagian update kita melakukan SET data terlebih dahulu untuk dapat mengubahnya, selanjut silahakan buka file produk.php, pada bagian case PUT tambahkan script berikut ini:

 //codeiftheclientrequestmethodisPUT
            $data = json_decode(file_get_contents("php://input"));
            $id = $data->id;
            //echo'parameterpost'.$_POST['id'];
            //echo'parameterpost'.$_PUT['id'];
            if($id==""||$id==null){
                echo json_encode(array("message" => "Parameter Id tidak boleh kosong"));
            }else{
                $produk->id = $data->id;
                $produk->nama_produk = $data->nama_produk;
                $produk->harga = $data->harga;
                $produk->tipe_produk = $data->tipe_produk;
                $produk->stok = $data->stok;

            if($produk->update()){
                //setresponsecode-200ok
                http_response_code(200);

                //telltheuser
                echo json_encode(array("message" => "Product was updated."));
            }
            //ifunabletoupdatetheproduct,telltheuser
            else{
                //setresponsecode-503serviceunavailable
                http_response_code(503);
                
                $result=array(
                    "status_kode" => 503,
                    "status_massage" => "Bad Request,Unable to update product"
                );
                echo json_encode($result);

                //telltheuserecho
                echo json_encode(array("message"=>"Unable to update product."));
            }
            }

Implementasi dari script update sudah diterapkan, langkah selanjutnya adalah melakuka pengecekan dengan menggunakan aplikasi Postman, untuk bagian edit berbeda juga dengan sebelumnya yaitu dengan menggunakan metode PUT. untuk lebih jelasnya silahkan perhatikan gambar dibawah ini:

produk edit

Pada gambar diatas kita sudah berhasil mengimplementasikan dari function edit data,disana terlihat data yang diubah adalah data yang mempunyai id 2 dengan menggunakan metode PUT. untuk selanjuntya kita akan mengimplementasikan Delete data produk. Silahakan teman-teman simak kembali bagian paling akhir ini:

5. Delete data Produk

Pada bagian ini kita akan membuat script untuk mendelete data produk, untuk dapat mendelete data produk silahkan kalian buka kembali model Produk.php yang terdapat pada fodel model, lalu pada bagian fungsi delete silahkan tambahkan script berikut:

   //deletequery
        $query = "DELETE FROM "
        . $this->table_name . 
        " WHERE id = ?";

        //prepare query
        $stmt = $this->conn->prepare($query);

        //sanitize//$this->id=htmlspecialchars(strip_tags($this->id));

        //bindidofrecordtodelete
        $stmt->bindParam(1,$this->id);

        //executequery
        if($stmt->execute()){
            return true;
        }
        return false;
        }

Jika sudah mengikuti dan menerapkan script diatas pada function delete, selanjutnya buka kembali file produk.php pada folder api. selanjutnya pada case DELETE tambahkan atau masukan script dibawah ini:

 //codeiftheclientrequestmethodisDELETE
        if(!isset($_GET['id'])){
            echo json_encode(array("message" => "Parameter Id id tidak ada"));
            }
            elseif($_GET['id'] == NULL){
                echo json_encode(array("message" => "Parameter Id id tidak boleh kosong"));
            }else{
                //setproductidtobedeleted
                $produk->id=$_GET['id'];
            
                //deletetheproduct
                if($produk->delete()){

                    //set response code-200ok
                    http_response_code(200);
                    //telltheuser
                    echo json_encode(array("message" => "Product was deleted."));
                }
                //ifunabletodeletetheproduct
                else{
                    //setresponsecode-503serviceunavailable
                    http_response_code(503);

                    $result=array(
                        "status_kode" => 503,
                        "status_massage" => "Bad Request,Unable to delete product");
                    echo json_encode($result);

                    //telltheuser
                    echo json_encode(array("message" => "Unable to delete product."));
                }
            }

Pastikan teman-teman tidak ada yang ketinggalan untuk setiap baris kode saat mengikut script diatas, Jika sudah selesai maka tahapan terakhir adalah melakukan pengecekan pada metode delete ini dengan menggunakan metode DELETE, untuk lebih jelasnya silahkan perhatikan gambar dibawah ini:

Delete Produk

Jika berhasil maka pada aplikasi Postman akan mengembalikan respon JSON dengan pesan “Product was deleted” yang berarti kita sudah berhasil melakukan delete data.

Oke mungkin sekian tutoorial yang dapat admin sampaikan mengenai Membuat Crud Restful API OOP PHP dan MySQL, mudah-mudahan artikel yang admin tulis dapat bermanfaat bagi para pembaca. Terimakasih sudah berkunjung dan membaca artikel ini.

Salam Success 🙂

By: Muhammad Rizal Supriadi

4 thoughts on “Membuat Crud Restful API OOP PHP dan MySQL”

Leave a Comment

Your email address will not be published. Required fields are marked *