Membuat RESTful API Method PUT Tanpa Authentication di Codeignier 3
Membuat RESTful API Method PUT Tanpa Authentication di Codeignier3 [docs/kuhomi.id].

Membuat RESTful API Method PUT Tanpa Authentication di Codeignier 3

Metode RESTful API adalah salah satu arsitektur yang umum digunakan oleh programmer sebagai media perantara pertukaran informasi dan data antara aplikasi, baik dalam platform yang sama maupun berbeda. Saat ini, ada banyak framework yang support untuk membuat atau mengembangkan RESTful API. Salah satunya adalah framework Codeigniter.

Pada artikel sebelumnya, gua udah pernah sharing ke kalian mengenai Membuat RESTful API Method POST Tanpa Authentication di Codeignier3. Kemudian gua lanjutkan ke RESTful API method GET dengan judul Artikel Membuat RESTful API Method GET Tanpa Authentication di Codeignier3.

Pada artikel ini, gua akan mencoba share ke kalian bagaimana cara membuat endpoint RESTful API method PUT dengan menggunakan framework Codeiginiter 3.

Oke, sebelum lanjut ke proses koding, gua mau coba jelasin dulu batasan-batasan yang mungkin tidak dijelaskan pada artikel ini.

Batasan


1.    Menggunakan framework Codeigniter 3 serta MySQL untuk databasenya
2.    Untuk arsitektur RESTful API menggunakan Library codeigniter-restserver yang dikembangkan oleh Chriskaserguis yang diinstall melalui composer (pastikan kalian sudah install aplikasi composer di PC kalian dan asumsi gua, kalian sudah memahami menegnai composer ini ya). Untuk resource library ini bisa kalian akses repo git nya di sini
3.    Gua menggunakan vhost pada Windows saat running aplikasi RESTful ini. Jadi, gua saat running aplikasi RESTful ini di browser, tidak menggunakan localhost/folder_projek/controller/method melainkan gua menggunakan subdomain vhost dengan nama api.develop.id
4.    Dalam artikel ini, hanya membuat endpoint dengan method PUT untuk mengubah baris data yang sudah tersimpan di database
5.    Seperti judulnya, pada artikel ini belum menerapkan proses authentication user  pada saat user mengakses endpoint RESTful API ini. Jadi, masih menggunakan config RESTful API secara default
6.    Database, table, table field dan data yang digunakan hanya data dummy. Silahkan nanti kalian sesuaikan dengan studi kasus kalian ya.. 

Buat Database

Lanjut, silahkan buat database pada lokal server kalian. Jika kalian ingin menggunakan database yang sudah ada di lokal server kalian, silahkan buat table baru dengan nama table buku dan isikan data dummy nya, atau bisa insert lewat method POST sesuai dengan artikel yang gua buat sebelumnya tentang RESTful method POST. Atau supaya lebih cepat, jalankan syntax SQL dibawah ini di dalam database kalian.

CREATE TABLE `buku` (
  `id` int(11) NOT NULL,
  `judul` varchar(255) NOT NULL,
  `penulis` varchar(200) NOT NULL,
  `penerbit` varchar(200) NOT NULL,
  `tgl_terbit` date NOT NULL,
  `jml_halaman` int(11) DEFAULT NULL,
  `isbn` varchar(100) DEFAULT NULL,
  `tgl_ditambahkan` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
--
-- Dumping data for table `buku`
--
 
INSERT INTO `buku` (`id`, `judul`, `penulis`, `penerbit`, `tgl_terbit`, `jml_halaman`, `isbn`, `tgl_ditambahkan`) VALUES
(2, 'Pemrograman Scratch untuk Pemula', 'Ani Ismayani', 'Elex Media Komputindo', '2023-02-16', 224, '9786230046094', '2023-02-18 00:00:00'),
(3, 'Pengolahan Sinyal Digital', 'DR. IR. SUWADI, M.T.', 'Pt. Refika Aditama', '2021-01-25', 216, '9786237060772', '2023-02-20 00:00:00'),
(4, 'Mudah Membuat Game Dan Animasi Dengan Visual C# .NET, From Beginner To Master', 'Vivian Siahaan & R.H. Sianipar', 'Penerbit Andi', '2023-02-22', 578, '9786230131233', '2023-02-25 00:00:00');

Download Framework Codeigniter 3

Jika database sudah siap, silahkan download framework Codeigniter 3 di website resminya. Disini gua menggunakan versi terbaru dari Codeigniter 3. Silahkan lakukan config dasar Codeigniter 3 sampai folder projek Codeigniter tersebut bisa diakses melalui browser.

Konfigurasi Dasar Framework Codeigniter 3 untuk RESTful API Package 'codeigniter-restserver'

Jika sudah bisa diakses lewat browser, buka file composer.json yang ada didalam projek Codeigniter 3 kalian, misal nama projeknya “api.dev”, berarti file composer.json ada di api.dev/composer.json. Pada tahap ini, kita akan mencoba download package codeigniter-restserver melalui composer. Silahkan tambahkan "chriskacerguis/codeigniter-restserver": "^3.1" (pakai tanda kutip) pada bagian require. Atau silahkan copas syntax ini ke file composer.json kalian. 

{
	"description": "The CodeIgniter framework",
	"name": "codeigniter/framework",
	"type": "project",
	"homepage": "https://codeigniter.com",
	"license": "MIT",
	"support": {
		"forum": "http://forum.codeigniter.com/",
		"wiki": "https://github.com/bcit-ci/CodeIgniter/wiki",
		"slack": "https://codeigniterchat.slack.com",
		"source": "https://github.com/bcit-ci/CodeIgniter"
	},
	"require": {
		"php": ">=5.3.7",
		"chriskacerguis/codeigniter-restserver": "^3.1"
	},
	"suggest": {
		"paragonie/random_compat": "Provides better randomness in PHP 5.x"
	},
	"scripts": {
		"test:coverage": [
			"@putenv XDEBUG_MODE=coverage",
			"phpunit --color=always --coverage-text --configuration tests/travis/sqlite.phpunit.xml"
		],
		"post-install-cmd": [
			"sed -i s/name{0}/name[0]/ vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStream.php"
		],
		"post-update-cmd": [
			"sed -i s/name{0}/name[0]/ vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStream.php"
		]
	}
}

Lalu, jalankan command “composer update” dan tunggu sampai proses download package selesai.

Selanjutnya, buka file /aplication/config/config.php projek Codeigniter 3 kalian, cari bagian “$config['composer_autoload'] = ’’;”, lalu ubah menjadi $config['composer_autoload'] = FCPATH . 'vendor/autoload.php';

Jika sudah, copy file /vendor/chriskacerguis/codeigniter-restserver/src/rest.php ke dalam folder /application/config/ pada folder projek kalian. Silahkan lewati tahapan ini jika kalian melanjutkan daripada artikel gua sebelumnya.

Buat File Controller

Selanjutnya, kita coba untuk membuat atau update file controllers “Book” yang telah kita buat pada artikel sebelumnya. Jika sudah pernah membuat file controllers “Book” pada artikel sebelumnya, silahkan tambahkan fungsi method PUT dibawah fungsi method GET yang telah kita buat sebelumnya, atau bisa juga copykan kodingan satu file controllers ini dan paste/replace ke file controllers kalian

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

//perbedaan 1: inisialisasi class RestController 
use chriskacerguis\RestServer\RestController;

//perbedaan 2: biasanya class extends ke nama class CI_Controller,
//untuk RESTful API, terutama yang menggunakan package chriskacerguis/RestServer, 
//extends ke class RestController
class Book extends RestController {

    function __construct()
    {
        // Construct the parent class
        parent::__construct();
        // Load model
        $this->load->model('book_model');
    }

    //perbedaan 3: setiap nama fungsi method, diikuti dengan tipe method (GET,POST, DELETE, PUT)
    //ex: nama method "add", tipe method POST, jadi nama fungsi nya add_post.

    public function edit_put()
    {

        // START: Proses cek data PUT
        if (!$this->put('id'))
        {
            $this->set_response(array(
                'status' => FALSE,
                'message' => 'Id Buku tidak boleh kosong'
            ), RestController::HTTP_BAD_REQUEST); // BAD REQUEST (400)
            return;
        }
        else
        {
            $id = $this->put('id');
        }

        if ($this->put('judul'))
        {
            $data['judul'] = $this->put('judul');
        }

        if ($this->put('penulis'))
        {
            $data['penulis'] = $this->put('penulis');
        }

        if ($this->put('penerbit'))
        {
            $data['penerbit'] = $this->put('penerbit');
        }

        if ($this->put('tgl_terbit'))
        {
            $data['tgl_terbit'] = $this->put('tgl_terbit');
        }

        if ($this->put('jml_halaman'))
        {
            $data['jml_halaman'] = $this->put('jml_halaman');
        }

        if ($this->put('isbn'))
        {
            $data['isbn'] = $this->put('isbn');
        }
        
        // END : Proses cek data PUT

        // Memanggil method edit pada model untuk proses update data ke database
        $res = $this->book_model->edit($id, $data);

        // Return result proses insert data
        if($res)
        {
            $this->set_response(array(
                'status' => TRUE,
                'message' => 'Data buku berhasil diubah'
            ), RestController::HTTP_CREATED); // SUCCESS UBAH DATA (201)
            return;
        }else{
            $this->set_response(array(
                'status' => FALSE,
                'message' => 'Data buku gagal diubah'
            ), RestController::HTTP_OK); // REQUEST SUCCESS BUT FAILED TO UPDATE (200)
            return;
        }
    }
}

Disini gua menamakan file atau class controller nya yaitu “Book”. Sebenarnya, ini bebas ya jadi silahkan disesuaikan saja

Buat File Model

Selanjutnya kita buat atau update class models. Disini gua coba memberikan nama class model ini dengan nama “Book_model”. Untuk class models ini, jika kalian sudah pernah membuat class model “Book_model” pada artikel sebelumnya, silahkan tambahkan saja fungsi model di bawah ini

 function edit($id, $data=array())
  {
  
    if(!empty($data)){
      $this->db->where('id', $id);
      $res = $this->db->update('buku', $data);
    }

    return $res;
  }

Atau silahkan copy-kan keseluruhan kodingan class model dibawah ini

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
 
class Book_model extends CI_Model{

	function __construct(){
		parent::__construct();
		$this->db = $this->load->database('default',TRUE);
	}

  function edit($id, $data=array())
  {
  
    if(!empty($data)){
      $this->db->where('id', $id);
      $res = $this->db->update('buku', $data);
    }

    return $res;
  }
 
}

Testing

Untuk pengujian, disini gua menggunakan aplikasi POSTMAN. Silahkan ketikkan endpoint atau URL API-nya, disini karena gua pakai vhost, maka endpointnya menjadi http://api.develop.id/book/edit, dan tipe method nya PUT. Pada bagian body, pilih yang x-www-form-urlencoded. Lalu, masukan fild dan value data yang ingin diubah, atau silahkan ikuti seperti capture dibawah ini. 

Testing API Method PUT di Postman

Jika sudah, klik tombol SEND untuk mengirimkan request. Dan lihat return API yang diberikan. Jika berhasil, return nya akan seperti ini. Untuk lebih memastikan apakah data berhasil beubah atau tidak, silahkan cek pada database langsung atau jalankan method GET yang sudah kalian buat sebelumnya.

Return Testing API Method PUT

Artikel Terkait