Membuat RESTful API Method POST Tanpa Authentication di Codeignier3
Membuat RESTful API Method POST Tanpa Authentication di Codeignier3 [docs/kuhomi.id].

Membuat RESTful API Method POST Tanpa Authentication di Codeignier3

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 ini, gua akan mencoba share ke kalian bagaimana cara membuat endpoint RESTful API 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.    Hanya membuat endpoint dengan method POST untuk insert data
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". 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;

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';

Config Codeiginter 3 Autoload Composer

Jika sudah, copy file /vendor/chriskacerguis/codeigniter-restserver/src/rest.php ke dalam folder /application/config/ pada folder projek kalian

Buat File Controller

Selanjutnya, kita coba untuk membuat file controllers. Sebenarnya, tidak banyak perbedaan antara file controller biasa dengan file controller untuk RESTful API, terutama untuk package codeigniter-restserver . Untuk mengetahui perbedaanya antara controller biasa dengan controller RESTful API codeigniter-restserver, bisa dilihat bagian text komentar di setiap baris kode program file controller dibawah ini ya..

<?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 add_post()
    {

    	// START: Proses validasi parameter yang dikirimkan dari request API
        if (!$this->input->post('judul'))
        {
            $this->set_response(array(
                'status' => FALSE,
                'message' => 'Data judul tidak boleh kosong'
            ), RestController::HTTP_BAD_REQUEST); // BAD REQUEST (400)
            return;
        }

        if (!$this->input->post('penulis'))
        {
            $this->set_response(array(
                'status' => FALSE,
                'message' => 'Data penulis tidak boleh kosong'
            ), RestController::HTTP_BAD_REQUEST); // BAD REQUEST (400)
            return;
        }

        if (!$this->input->post('penerbit'))
        {
            $this->set_response(array(
                'status' => FALSE,
                'message' => 'Data penerbit tidak boleh kosong'
            ), RestController::HTTP_BAD_REQUEST); // BAD REQUEST (400)
            return;
        }

        if (!$this->input->post('tgl_terbit'))
        {
            $this->set_response(array(
                'status' => FALSE,
                'message' => 'Data tanggal terbit tidak boleh kosong'
            ), RestController::HTTP_BAD_REQUEST); // BAD REQUEST (400)
            return;
        }
        // END : Proses validasi parameter yang dikirimkan dari request API

        // Memanggil method add pada model untuk proses insert data ke database
        $res = $this->book_model->add();

        // Return result proses insert data
        if($res){
        	$this->set_response(array(
                'status' => TRUE,
                'message' => 'Data buku berhasil ditambahkan'
            ), RestController::HTTP_CREATED); // SUCCESS INSERT DATA (201)
            return;
        }else{
        	$this->set_response(array(
                'status' => FALSE,
                'message' => 'Data buku gagal ditambahkan'
            ), RestController::HTTP_OK); // REQUEST SUCCESS BUT FAILED TO INSERT (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 class models. Disini gua coba memberikan nama class model ini dengan nama “Book_model”. Untuk class models ini, bisa kalian langsung copy aja kodenya dibawah ini ya, karena kode di class model ini, sama dengan class model pada umumnya.

<?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 add()
  {
    $data = array(
                    'judul'       => $this->input->post('judul'),
                    'penulis'     => $this->input->post('penulis'),
                    'penerbit'    => $this->input->post('penerbit'),
                    'tgl_terbit'  => $this->input->post('tgl_terbit'),
                    'jml_halaman' => ($this->input->post('jml_halaman'))?$this->input->post('jml_halaman'):NULL,
                    'isbn'        => ($this->input->post('isbn'))?$this->input->post('isbn'):NULL,
                    'tgl_ditambahkan' => date('Y-m-d, H:i:s')
            );
    $res = $this->db->insert('buku', $data);

    return $res;
  }
 
}

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/add, dan tipe method nya POST. Lalu, pada bagian Body->form-data silahkan masukkan field beserta value dari masing-masing field. Jika sudah, klik tombol SEND untuk mengirimkan request. Dan lihat return API yang diberikan. Jika berhasil, akan muncul tulisan “'message' => 'Data buku berhasil ditambahkan'”.

Postman Test Endpoint POST tanpa auth

Oke, sekian artikel gua mengenai cara membuat RESTful API di Codeigniter method POST tanpa AUTH. Semoga bermanfaat ya..

Artikel Terkait