Tentang Codeigniter

Codeigniter adalah framework php yang bersifat open source dan menggunakan metode MVC (Model, View, Controller). Codeigniter adalah salah satu framework php yang tetap eksis keberadaannya karena konsep-konsep kesederhanaan dan kemudahan yang dia usung. Adapun kelebihan Codeigniter dibandung framework php lainnya adalah sebagai berikut:

  1. Berukuran sangat kecil, file package dasarnya hanya sekitar 2.5MB, itupun sudah termasuk dokumentasi (user_guide) yang sangat lengkap.
  2. Dokumentasi yang rapi dan lengkap.
  3. Kompatibilitas dengan hosting, Codeigniter mampu berjalan dengan baik dihampir semua platform hosting, Codeigniter tidak membutuhkan spesifikasi khusus untuk berjalan dengan baik
  4. Mendukung berbagai macam database (MySQL, Oracle, SQL Server, PostgreSQL dst)
  5. Tidak ada aturan coding yang ketat, artinya Codeigniter hanya menyediakan sebuah panduan kerangka kerja yang baik, namun pada implementasinya dikembalikan ke programmer bagaimana mereka melakukan pengkodean. Misalnya, programmer dapat saja hanya memanfaatkan Controller tanpa adanya Model atau View, namun karena framework ini berkonsep MVC maka menggunakan ketiga komponen MVC adalah pilihan yang sangat bijak.
  6. Tidak mengenal view templating layaknya Laravel dengan template bladenya, sehingga tidak membutuhkan waktu belajar yang lebih untuk mempelajari hal yang relatif baru
  7. Kinerja yang baik, Codeigniter sangat cepat bahkan mungkin bisa dibilang framework yang paling cepat saat ini
  8. Sangat mudah diintegrasikan. Codeigniter sangat mengerti tentang pengembangan berbagai library saat ini, oleh karena itu Codeigniter memberikan kemudahan untuk diintegrasikan dengan library-library lainnya.
  9. Sedikit konfigurasi dan tidak membutuhkan konfigurasi yang rumit.
  10. Selain memiliki dukungan dokumentasi yang baik, Codeigniter mempunyai komunitas aktif yang sangat luas diseluruh dunia, jadi tidak perlu khawatir saat mengalami kesulitan saat mengembangkan suatu aplikasi.

Tidak ada satu halpun yang sempurna dalam dunia sistem informasi, termasuk Codeigniterpun juga memiliki kekurangan, yang antara lain:

  1. Codeigniter tidak ditujukan untuk pembuatan aplikasi berbasis web dengan skala besar
  2. Library yang sangat terbatas, Codeigniter tidak mempunyai repository library/plugin yang terverifikasi secara resmi.

Tidak mendukung Restful baik sebagai server maupun client secara default, untuk selanjutnya nanti akan menggunakan library dari pihak ketiga yaitu CI-RestServer sebagai Restful Server dan menggunakan CURL atau GuzzleHttp sebagai Restful Client.

Back To Top

Setup Codeigniter

Untuk install Codeigniter, lakukan mengunduh source Codeigniter melalui alamat berikut https://codeigniter.com/en/download, pada tutorial ini menggunakan Codeigniter versi 3.1.1. Setelah source terdownload, maka ekstrak dan taruh di direktori htdocs, sehingga terdapat struktur project seperti di bawah ini:

Pada file application/config/config.php lakukan perubahan pada baris berikut:
$config[‘index_page’] = ‘index.php’;
menjadi:
$config[‘index_page’] = ”;

Buat satu file bernama .htaccess dan letakkan file tersebut pada root directory dari k7api, kemudian isilah file tersebut dengan beberapa baris scriipt dibawah ini:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/$1 [L]

Kemudian melalui web browser, cobalah akses ke alamat http://localhost/k7api, jika terlihat tampilan seperti di bawah ini, maka proses instalasi Codeigniter telah berhasil dilakukan.

Back To Top

Sekilas Tentang RESTful

API merupakan singkatan dari Application Programming Interface, yaitu sebuah aplikasi interface yang berfungsi sebagai jembatan atau penghubung yang memungkinkan suatu aplikasi dapat saling berkomunikasi atau berbagi data satu dengan lainnya tanpa harus menggunakan bahasa pemrograman yang sama.

Sedangkan REST merupakan singkatan dari Representational State Transfer yaitu merupakan arsitektur pertukaran data (web service), sedangkan RESTful merupakan protokol/aturan untuk melakukan pertukaran data (REST) yang berjalan di atas protokol HTTP. Sehingga, RESTful adalah REST, namun REST belum tentu RESTful.

Output API/RESTful adalah berupa data dengan format XML atau JSON (JavaScript Object Notation). Semenjak format JSON mulai dikenalkan, format XML adalah format yang lazim digunakan dalam urusan pertukaran data, namun era pemrograman modern lazimnya menggunakan format JSON. Terdapat beberapa alasan kenapa JSON lebih dipilih sebagai format output dari RESTful API yang antara lain:

  1. Mudah diurai, lebih ringkas dan ukuran data yang lebih kecil
  2. Tidak menggunakan penanda (tag) data layaknya XML
  3. Lebih cepat untuk dibaca dan ditulis
  4. Data transport lebih kecil

Untuk setiap request dilayani oleh REST API akan mendapatkan response balasan, response lazimnya berupa data dengan format JSON atau XML, nah response data inilah yang kemudian dapat digunakan atau diolah sesuai kebutuhan client.

Komponen RESTful API
RESTful API memiliki 4 komponen utama, yaitu:

1. Desain URL
RESTful API diakses melalui teknologi www, sehingga sangat penting untuk memiliki format URL yang baik (well form). Contoh penulisan URL yang baik:

2. HTTP Verbs
Ketika client melakukan request, client harus mendefinisikan metode request yang diminta, sehingga server mengerti apa yang sedang di request. Metodenya antara lain:

  • GET: Untuk mendapatkan informasi atau data
  • POST: Untuk membuat data baru atau insert pada database
  • PUT: Untuk melakukan update data tertentu
  • DELETE: Untuk menghapus data tertentu pada database

Selain empat metode request tersebut, sebenarnya masuh terdapat metode lainnya seperti: HEAD, PATCH, OPTION, namun metode tersebut jarang sekali digunakan.

3. HTTP Status Code
Selain response yang berupa data, setiap request yang dilakukan akan mendapatkan status code. Beberapa status code response RESTful adalah sebagai berikut:

  • 200 OK
  • 201 Created
  • 400 Bad Request
  • 401 Unauthorized
  • 404 Not Found
  • 405 Method Not Allowed
  • 409 Conflict
  • 500 Internal Server Error

4. Format Response
Format response dari setiap request yang dilakukan berupa data berformat JSON atau XML. Pada awalnya penggunaan XML sangat populer namun terus mengalami penurunan seiring dengan semakin berkembangnya pemrograman Javascript. Contoh response datanya adalah sebagai berikut:

GET /pengguna/5
HTTP/1.1 200 OK
Content-Type: application/vnd.api+json

{
“id”: “5”,
“username”:”k7admin”,
“email”:k7info@krestujuh.com
}

Back To Top

Setup Restful API dengan RestServer

Salah satu kekurangan dari Codeigniter adalah tidak menyediakan dukungan Restful secara default, sehingga saat akan membangun engine back-end sebuah aplikasi maka harus menggunakan library pihak ketiga yang bernama RestServer hasil karya dari Chriskacerguis. Untuk setup RestServer sebenarnya terdapat 2 cara yaitu melalui source yang tersedia di github dan cara dengan cara melalui composer. Untuk lebih memudahkan proses setup, maka pada tutorial ini akan menggunakan composer.

Untuk setup RestServer melalui composer dapat langsung dijalankan perintah berikut pada terminal (Linux/MacOS) atau CMD (Windows)

#composer require chriskacerguis/codeigniter-restserver

Tunggu sampai instalasi RestServer melalaui composer selesai

Jika proses instalasi RestServer melalui composer telah selesai dilakukan maka masuklah ke folder vendor/chriskacerguis/codeigniter-restserver, dimana struktur filenya kurang lebih seperti berikut:

Kemudian copy beberapa file/folder yang dibutuhkan ke dalam project k7api dengan aturan berikut:

  1. File src/rest.php , src/auth/ldap.php > application/config
  2. Folder src/language/english dan indonesia > application/language
  3. File src/Format.php, src/RestController.php > application/libraries

Setelah meng-copy file yang dibutuhkan ke dalam project k7api langkah selanjutnya adalah melakukan pengujian instalasi RestServer.

Back To Top

Pengujian Instalasi RestServer

Untuk menguji apakah project k7api sudah siap digunakan sebagai server Restful atau belum, maka buatlah satu file controller dengan nama Helloapi.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
require APPPATH . 'libraries\RestController.php';
require APPPATH . 'libraries\Format.php';

use chriskacerguis\RestServer\RestController;

class Helloapi extends RestController {

  function __construct(){
      parent::__construct();
  }

  public function index_get(){
    $this->response(['status'=>true, 'message'=>'Haloooo.....'], RestController::HTTP_OK);
  }

  public function pengguna_get(){
    $data['pengguna'] = ['username'=>'k7study',
                        'email'=>'k7info@krestujuh.com',
                        'fullname'=>'K7 Administrator'];
    $this->response(['status'=>true, 'data'=>$data], RestController::HTTP_OK);
  }
}
?>

Gunakan aplikasi Postman untuk melakukan pengujian terhadap suatu API, jika Anda belum memasangnya maka anda dapat menginstallnya dengan melakukan pengunduhan melalui alamat https://www.getpostman.com/downloads/.

Jalankan aplikasi Postman kemudian pilih method GET dan alamat http://localhost/k7api/helloapi.

Yang kedua, pengujian terhadap API function pengguna, pilih method GET dan alamat http://localhost/k7api/helloapi/pengguna

Jika hasil pengujian terlihat seperti pada tampilan di atas, maka Codeigniter telah siap difungsikan sebagai Restful Server.

Back To Top

Codeigniter RestServer - Latihan

Untuk lebih menunjang pemahaman tentang implimentasi RestServer di Codeigniter, berikut adalah latihan nyata implementasinya.

1. Buat database baru dengan nama “karyawan_db”

CREATE DATABASE karyawan_db;

2. Buatlah tabel sebagai berikut

CREATE TABLE `karyawan` (
`id_karyawan` int(11) NOT NULL,
`username` varchar(100) NOT NULL,
`password` varchar(50) NOT NULL,
`namalengkap` varchar(50) NOT NULL,
`email` varchar(50) NOT NULL,
`nohp` varchar(15) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

ALTER TABLE `karyawan`
ADD PRIMARY KEY (`id_karyawan`);

ALTER TABLE `karyawan`
MODIFY `id_karyawan` int(11) NOT NULL AUTO_INCREMENT;
COMMIT;

3. Setup database di file application/config/database.php

$active_group = 'default';
$query_builder = TRUE;

$db['default'] = array(
	'dsn'	=> '',
	'hostname' => 'localhost',
	'username' => 'root',
	'password' => '',
	'database' => 'karyawan_db',
	'dbdriver' => 'mysqli',
	'dbprefix' => '',
	'pconnect' => FALSE,
	'db_debug' => (ENVIRONMENT !== 'production'),
	'cache_on' => FALSE,
	'cachedir' => '',
	'char_set' => 'utf8',
	'dbcollat' => 'utf8_general_ci',
	'swap_pre' => '',
	'encrypt' => FALSE,
	'compress' => FALSE,
	'stricton' => FALSE,
	'failover' => array(),
	'save_queries' => TRUE
);

4. Setup application/autoload.php
Temukan baris berikut:
$autoload[‘libraries’] = array();
Ubah menjadi:
$autoload[‘libraries’] = array(‘database’);

5. Pemrograman Inti
Buat satu file application/controller/Api_karyawan.php, kemudian isi file tersebut dengan identifikasi nama kelas dan tambahkan satu buah function bernama tambah_post. Perlu diketahui bahwa untuk membuat sebuah API pada RestServer, suatu nama function harus ditambahkan identifikasi method requestnya, sebagai contoh:

REQUEST FUNCTION NAME
POST tambah_post()
PUT update_put()
GET seleksidata_get()
DELETE hapus_delete()

Lengkapi file Api_karyawan.php dengan script kode di bawah ini:

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

require APPPATH . 'libraries/RestController.php';
require APPPATH . 'libraries/Format.php';

use chriskacerguis\RestServer\RestController;

class Api_karyawan extends RestController{

  function __construct(){
    parent::__construct();
    $this->load->model('karyawan_model');
  }

  function tambah_post(){
    $username = $this->input->post('username');
    $password = md5($this->input->post('password'));
    $namalengkap = $this->input->post('namalengkap');
    $email = $this->input->post('email');
    $nohp = $this->input->post('nohp');

    $data = ['username' => $username,
             'password' => $password,
             'namalengkap' => $namalengkap,
             'email' => $email,
             'nohp' => $nohp
            ];

    $insertdata = $this->karyawan_model->insertData('karyawan', $data);

    if ($insertdata == true){
      $this->response(['status'=>true, 'message'=>'Data berhasil ditambahkan'], RestController::HTTP_OK);
    }else{
      $this->response(['status'=>false, 'message'=>'Data gagal ditambahkan'], RestController::HTTP_NOT_FOUND);
    }
  }
}

Kemudian buat satu file baru application/model/karyawan_model.php, lalu tambahkan baris kode seperti di bawah ini:

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

class Karyawan_model extends CI_Model{

  function __construct(){
    parent::__construct();
  }

  function insertData($tabel, $data){
    $this->db->trans_begin();
    $result = $this->db->insert($tabel, $data);

    if ($this->db->trans_status() == false){
      $this->db->trans_rollback();
      return false;
    }else{
      $this->db->trans_commit();
      return $result;
    }
  }
}

Langkah selanjutnya adalah mencoba API yang baru saja dibuat dengan menggunakan Postman, dan ikuti caranya persis seperti terlihat pada gambar di bawah ini.

Langkah selanjutnya adalah lengkapi file application/controller/Api_karyawan.php dengan kode di bawah ini:

function lihatkaryawan_get(){
    $dtkaryawan = $this->karyawan_model->getAllEmployee();

    if ($dtkaryawan->num_rows() > 0){
      $this->response(['status'=>true, 'data'=>$dtkaryawan->result()], RestController::HTTP_OK);
    }else{
      $this->response(['status'=>false, 'data'=>'Tidak ditemukan data karyawan'], RestController::HTTP_NOT_FOUND);
    }
  }

  function lihatkaryawansatu_get(){
    $idkaryawan = $this->input->get('id');
    $dtkaryawan = $this->karyawan_model->getEmployee($idkaryawan);

    if ($dtkaryawan->num_rows() > 0){
      $this->response(['status'=>true, 'data'=>$dtkaryawan->row()], RestController::HTTP_OK);
    }else{
      $this->response(['status'=>false, 'data'=>'Tidak ditemukan data karyawan'], RestController::HTTP_NOT_FOUND);
    }
  }

  function updatekaryawan_post(){
    $id_karyawan = $this->input->post('id');
    $username = $this->input->post('username');
    $password = md5($this->input->post('password'));
    $namalengkap = $this->input->post('namalengkap');
    $email = $this->input->post('email');
    $nohp = $this->input->post('nohp');

    $data = ['username' => $username,
             'password' => $password,
             'namalengkap' => $namalengkap,
             'email' => $email,
             'nohp' => $nohp
            ];
    $kondisi = ['id_karyawan' => $id_karyawan];
    $updatedata = $this->karyawan_model->updateData('karyawan', $data, $kondisi);

    if ($updatedata == true){
      $this->response(['status'=>true, 'message'=>'Data berhasil diupdate'], RestController::HTTP_OK);
    }else{
      $this->response(['status'=>false, 'message'=>'Data gagal diupdate'], RestController::HTTP_NOT_FOUND);
    }
  }

  function hapuskaryawan_delete(){
    $id_karyawan = $this->input->get('id');

    $cekdata = $dtkaryawan = $this->karyawan_model->getEmployee($id_karyawan);
    if ($cekdata->num_rows() > 0){
      $kondisi = ['id_karyawan' => $id_karyawan];
      $deletedata = $this->karyawan_model->deleteData('karyawan', $kondisi);

      $this->response(['status'=>true, 'message'=>'Data berhasil dihapus'], RestController::HTTP_OK);
    }else{
      $this->response(['status'=>false, 'message'=>'Data gagal dihapus'], RestController::HTTP_NOT_FOUND);
    }
  }

Dan lengkapi pula file application/model/karyawan_model.php dengan baris kode di bawah ini:

function getAllEmployee(){
    $this->db->select('*');
    $this->db->from('karyawan');
    $this->db->order_by('username', 'ASC');
    $query = $this->db->get();

    return $query;
  }

  function getEmployee($id){
    $this->db->select('*');
    $this->db->from('karyawan');
    $this->db->where('id_karyawan', $id);
    $query = $this->db->get();

    return $query;
  }

  function updateData($tabel, $data, $kondisi){
    $this->db->trans_begin();
		$this->db->where($kondisi);
		$result = $this->db->update($tabel, $data);

		if ($this->db->trans_status() == FALSE){
			$this->db->trans_rollback();
			return false;
		}else{
			$this->db->trans_commit();
			return $result;
		}
  }

  function deleteData($tabel, $kondisi){
    $this->db->trans_begin();

		$this->db->where($kondisi);
		$result = $this->db->delete($tabel);

		if ($this->db->trans_status() == FALSE){
			$this->db->trans_rollback();
			return false;
		}else{
			$this->db->trans_commit();
			return $result;
		}
  }

Langkah yang terakhir adalah mencobanya dengan Postman.

 

Back To Top