Membuat Rest Api Server Dengan Code Igniter 3

 

Membuat Rest Api Server Dengan Code Igniter 3


Code igniter 3 adalah framework PHP yang masih cukup populer di Indonesia. Kalau kemarin aku  share membuat Rest Api dengan Slim PHP framework. Sekarang aku buat versi Code Igniter 3. Untuk koneksi dengan database rest api server dengan Code Igniter 3 lebih mudah ketimbang dengan Slim PHP.

Kelebihan menggunakan Code Igniter 3 adalah di handling file. Struktur filenya lebih lengkap dan lebih bagus, selain itu tersedianya active record yang memudahkan kita untuk koneksi dengan database. Tapi kalau dari segi kecepatan SLIM Framework lebih bagus.

Code Igniter 3 adalah framework PHP dengan konsep MVC, meskipun framework ini sudah kalah populer dibanding Laravel, tapi pemakai di Indonesia masih banyak, terutama kaum tua yang masih suka native. Kalau yang muda-muda dan energik lebih suka pakai laravel yang "Wow" banget. 

Code Igniter 3 bisa digunakan untuk membuat aplikasi apa saja, termasuk juga dengan rest service. namun supaya lebih mudah, kita perlu menambahkan library yang dibuat oleh mas Chris Kacerguis.

Kelebihan Menggunakan Code Igniter dan Library Rest Server

  1. Kodingan lebih terstruktur.
  2. Bisa mengikuti paradigma RESTFull Service
  3. Http Respon code Server bisa disesuaikan.

Kodingan Lebih Terstruktur

Kelebihan dari menggunakan framework adalah kodingan yang lebih terstruktur sehingga lebih mudah dikembangkan dan dimaintenance. Selama ini sih aku asik-asik saja dengan kesederhanaan Code Igniter 3. Dan karena kesederhanaannya itulah struktur file dan kodingnya lebih mudah dibaca.

Bisa Mengikuti Paradigma Restfull Service

RESTfull Service memiliki beberapa method diantaranya adalah GET, POST, PUT, DELETE. Method yang sering digunakan adalah GET dan POST. Seringkali apapun transaksinya, GET dan POST methodnya. Padahal kalau menggunakan pakem Restfull, seharusnya kita menggunakan method PUT dan Delete.

Respon Code Bisa Disesuaikan

Dengan Code Igniter 3 dan Rest Servernya, pengelolaan http response code menjadi lebih mudah. Dengan http response code yang baik, client maupun developer jadi lebih mudah mengelola dan memaintenance aplikasi.

PERSIAPAN

Sebelum memulai koding yang super simpel dan mudah, siapkan dulu bahan-bahan yang akan diolah:

Install Web Server

Code Igniter 3 bisa berjalan di server apapun yang support PHP.  Untuk proses dev di komputer lokal, kamu bisa menggunakan xampp. 
 

Install Composer 

Composer adalah depencies injection untuk PHP. Composer dapat di download di:
 
Pengguna windows yang males ribet bisa langsung mendownload installer versi windowsnya. Tapi kalau mau kelihatan keren pakai command sih nggak apa-apa. Kerenmu nggak ada yang lihat juga.
composer windows setup

Install Code Igniter 3

Versi terbaru Code Igniter adalah versi 4. Tapi, untuk sebagian orang Code Igniter 3 dengan segala kesederhanaanya sudah mampu memenuhi kebutuhan mereka. Dan di artikel ini aku menggunakan Code Igniter 3, jadi jangan salah download ya.
 
 1. Kunjungi laman download code igniter di https://codeigniter.com/download
 2. Pilih Code Igniter 3.
download code igniter 3

   3.Buat folder di folder htdocs, misalnya restapi.
   4. Extract file zip Code Igniter 3 tadi, pindahkan source codenya ke folder restapi yang sudah kita siapkan di htdocs.
folder restapi di htdocs
 
   4. Code Igniter 3 siap digunakan.

Install rest api library

langkah selanjutnya adalah menginstall rest api library dari Chris Kacerguis. Supaya terlihat kekinian,  kita install librarynya dari composer. 
Kebetulan aku menggunakan Visual Code buat koding, jujur saja aku suka dengan fitur terminalnya. Lebih mudah, ringkas dan terlihat expert, padahal masih beginer.

1. Buka folder source dengan Visual Code, cara yang mudah dan terlihat keren untuk membuka visual code adalah dengan membuka command prompt, kemudian ketikkan "code [pathfolder]". [path folder] diisi path lengkap folder restapi, misalnya c:\xampp\htdocs\restapi.
2. Ubah file composer.json. Bagian "require dev" dihilangkan saja, soalnya pas di composer update bikin error. Kalau kamu butuh nanti dinstall manual saja. Kemudian tambahkan 
"chriskacerguis/codeigniter-restserver": "dev-master" 
letakkan dibagian "require". 
File composer.jsonnya jadi seperti ini:
{
    "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": "dev-master"
    },
    "suggest": {
        "paragonie/random_compat": "Provides better randomness in PHP 5.x"
    }
}
 

2. Aktifkan terminal, klik menu "Terminal", pilih "New Terminal".
 
menu terminal visual code
3. Masuk ke jendela terminal di jendela paling bawah, kemudian ketikkan "composer update", tunggu prosesnya sampai selesai.
Install library rest-api
 

 4.Buat file Api.php di Application\controller, masukkan contoh kode berikut:

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

use chriskacerguis\RestServer\RestController;

class Api extends RestController {

    function __construct()
    {
        // Construct the parent class
        parent::__construct();
    }

    public function users_get()
    {
        // Users from a data store e.g. database
        $users = [
            ['id' => 0, 'name' => 'John', 'email' => 'john@example.com'],
            ['id' => 1, 'name' => 'Jim', 'email' => 'jim@example.com'],
        ];

        $id = $this->get( 'id' );

        if ( $id === null )
        {
            // Check if the users data store contains users
            if ( $users )
            {
                // Set the response and exit
                $this->response( $users, 200 );
            }
            else
            {
                // Set the response and exit
                $this->response( [
                    'status' => false,
                    'message' => 'No users were found'
                ], 404 );
            }
        }
        else
        {
            if ( array_key_exists( $id, $users ) )
            {
                $this->response( $users[$id], 200 );
            }
            else
            {
                $this->response( [
                    'status' => false,
                    'message' => 'No such user found'
                ], 404 );
            }
        }
    }
}
 
5. Pada contoh diatas kita membuat rest api untuk service get. Buka alamat api lengkap dengan endpointnya di browser, contoh kita memanggil service get users:
    http://localhost/restapi/index.php/api/users
Hasilnya seperti ini:
 
tampilan pertama rest api, halamannya error

Konfigurasi Awal Rest API

Sebelum bisa digunakan sebagai mestinya, kita perlu mengkonfigurasi code igniter dan library rest apimya terlebih dahulu. 

1. Buka file config.php di folder "application\config", kemudian lihat pada baris ke 139, tepatnya ke konfigurasi composer autoload.

ubah nilai FALSE menjadi:

$config['composer_autoload'= FCPATH . 'vendor/autoload.php';

2. Buka kembali alamat api lengkap dengan endpointtnya 

    http://localhost/restapi/index.php/api/users

Kalau tampilannya seperti dibawah ini, berarti rest apimu sudah berhasil.

rest api berhasil


Koneksi Rest Api Server Dengan Database

Kelebihan dari Code Igniter 3 dengan SLIM PHP salah satunya handling databasenya. Sebenarnya kita bisa menggunakan SLIM rest api skeleton yang sudah paket lengkap dengan ORM, template dan lain sebagainya. Tetapi karena aku sudah terlanjur nyaman dan mager dengan active record sederhana dari Code Igniter 3, maka aku lebih memilih Code Igniter 3.
 

Buat Database, tabel dan isi tabelnya

Seperti biasa, sebelum mengkonfigurasi database, kita buat dulu database, tabel beserta isinya.
Sebagai contoh buatlah database sekolah, kemudian buat tabel siswa yang berisi nama siswa dan nis (nomor induk sekolah).

Untuk memudahkan teman-teman, aku buatkan script sqlnya nih. 
 
/*
SQLyog Ultimate v11.33 (64 bit)
MySQL - 10.4.11-MariaDB : Database - sekolah
*********************************************************************
*/


/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`sekolah` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;

USE `sekolah`;

/*Table structure for table `siswa` */

CREATE TABLE `siswa` (
  `nis` varchar(30) DEFAULT NULL,
  `namasiswa` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

/*Data for the table `siswa` */

insert  into `siswa`(`nis`,`namasiswa`) values ('2021080100001','Eko'),('2021080100002','Sandy'),('2021080100003','Danang');

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

Config Database di Code Igniter 3

 File konfigurasi database code igniter 3 ada di file "application\config\database.php"

Letak file konfigurasi database

 Masukkan informasi database ke array database. Kalau diinstall di lokal, ubah nilai username, password dan databasenya.

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

$db['default'= array(
    'dsn'   => '',
    'hostname' => 'localhost',
    'username' => 'root',
    'password' => '',
    'database' => 'sekolah',
    '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
);

Aktifkan Autoload Library Database

Jangan lupa aktifkan library database di autoload Code igniter 3, letaknya ada di

"Application\config\autoload.php"

letak file autoload.php

 pada baris ke 61 kamu akan menemukan kode ini:

$autoload['libraries'= array();

Masukkan database ke dalam array, kodingannya jadi seperti ini:

$autoload['libraries'= array('database');

Oke, konfigurasi database sudah selesai, sekarang kita coba membuat service REST API.

MEMBUAT SERVICE REST API

Membuat service rest api dengan Code Igniter 3 dan library rest api ini sangat mudah. Perhatikan pada file Api.php di folder "application\controller".
 

Sekilas tentang REST API

API singkatan dari Aplication Programming Interface. Secara sederhana pengertian API adalah pintu yang disediakan oleh suatu aplikasi supaya aplikasi lainnya dapat berinteraksi dengan dirinya.

Sedangkan REST adalah singkatan dari Representational State Transfer. REST adalah method yang umum digunakan oleh sebuah browser dalam berkomunikasi. Metode yang umum digunakan oleh REST adalah method "GET" dan "POST". Kalian pasti sering menggunakan method ini ketika mengirim isi form atau pencarian dengan filter. 

Selain method "GET" dan "POST" ada juga methode "PUT" dan "DELETE". berikut ini standart penggunaan method-method diatas:

GET = Digunakan untuk mengambil data, ketika kalian membuka alamat suatu web. Secara tidak langsung kalian sudah menggunakan method "GET".
POST = Digunakan untuk mengirim data. Dalam RESTfull Web Service. Method "POST" digunakan untuk membuat data baru.
PUT = Method PUT dalam Restfull Web Service biasanya digunakan untuk perintah update/ubah data.
DELETE = Seperti namanya, method ini digunakan untuk menghapus data.

Aplikasi Untuk Mencoba REST API

Banyak sekali aplikasi yang bisa digunakan untuk mengakses web service, aplikasi ini disebut "REST Client". Sebenarnya kalian juga bisa menggunakan browser. Tetapi browser hanya bisa digunakan untuk "GET" saja. Aplikasi Rest Client yang umum digunakan diantaranya adalah:

  1. Insomnia
  2. Postman
  3. Advance Rest Client
  4. Dll 

Dalam web ini aku menggunakan POSTMAN sebagai rest client.

MEMBUAT METHOD GET

Method "GET" digunakan untuk melihat data. di Code Igniter 3 + library Rest Server ini. Untuk membuat perintah get sangat mudah. Kamu tinggal membuat fungsi baru yang dibelakang fungsinya ditambah "_get". 

Buka file Api.php di folder "Application\controllers\"

tambahkan fungsi baru dibawah fungsi __construct
contohnya seperti dibawah ini:
 
public function siswa_get(){
        $this->db->select('*');        
        $data = array ('data'=>$this->db->get('siswa')->result());        
        $this->response($data, 200 );
    }

Testing API

Buka Aplikasi POSTMAN, pilih mehod "GET", kemudian masukkan url lengkap dengan endpointnya:
Hasilnya seperti dibawah ini:
Hasil request get


  


MEMBUAT METHOD POST

Method POST digunakan untuk mengisi nilai baru, Sebenarnya para programmer web sudah sangat familiar dengan method "POST" ini. Method POST biasanya dipakai untuk mengirim isi form ke server. 
 
Hampir sama dengan perintah get, untuk membuat perintah post kita buat fungsi baru.

Buka file Api.php di folder "Application\controllers\"

tambahkan fungsi baru dibawah fungsi get yang tadi kita buat.
contoh perintah post adalah sebagai berikut:

public function siswa_post(){
        $isidata = array('nis'=>$this->input->post('nis'), 'namasiswa'=>$this->input->post('nama'));
        $this->db->insert('siswa', $isidata);
        $this->response(array("pesan"=>"berhasil"), 200);
    }
 
Coba lihat,  apa perbedaan antara fungsi GET dan POST?  Sudah dilihat kan? kalian pasti sudah tahu perbedaannya. Perbedaannya hanya di bagian belakang nama fungsi. 

pada fungsi get, penulisannya
namafungsi + "_get", sedangkan pada post
namafungsi + "_post".
Sangat mudah bukan. Hal yang sama juga berlaku pada method "PUT" dan "DELETE".
 
Eh iya, jangan lupa screenshot hasil test di POSTMAN. sebagai bukti kalau source code ini bukan hoax.
 
hasil postman berhasil insert data


MEMBUAT METHOD PUT

Ada sedikit perbedaan ketika membuat method PUT. Di Code Igniter, fungsi input hanya digunakan untuk method GET dan POST. Nah untuk PUT kita menggunakan fungsi $this->put.
 
Kode lengkapnya seperti berikut:
 
public function siswa_put(){                
        $isidata = array('namasiswa'=>$this->put('namasiswa'));
        $this->db->where(array('nis'=>$this->put('nis')));
        $this->db->Update('siswa', $isidata);
        $this->response(array("pesan"=>"Ubah Data Berhasil"), 200);        
    }

perbedaan juga ada di akses postmannya, kalau di POST kita bisa menggunakan form-data. di put kita menggunakan application/x-www-form-urlencoded

Bukti di POSTMAN

Ubah Data Dengan PUT

Hasil di method GET:

Hasil Method GET Setelah Ubah Data




MEMBUAT METHOD DELETE

Method terakhir yang kita bahas di artikel ini adalah method "DELETE". Huff akhirnya kelar juga. 
Langsung ke sourcenya saja ya.
Untuk method delete kodingannya seperti ini:
 public function siswa_delete(){                        
        $this->db->where('nis', $this->delete('nis'));
        $this->db->delete('siswa');
        $this->response(array("pesan"=>"data berhasil dihapus"), 200);        
    }

Sama seperti PUT, dipostman kita menggunakan  application/x-www-form-urlencoded

contohnya seperti ini:

Contoh akses service Delete di POSTMAN

Dan hasil di method get adalah

hasil hapus di cek dengan method GET


Bukan sulap bukan sihir, bukan pula buah duren. No NIS yang tadi dimasukkan ke method delete sudah terhapus. 

PENUTUP 

Akhirnya kelar juga pembahasan membuat Rest api dengan code igniter. Sepertinya yang dibahas disini lebih lengkap dari pada yang SLIM kemarin ya hehe. Jujur saja untuk Rest kedepannya kayaknya aku bakal pakai yang Code Igniter 3 deh. Apalagi kemarin baca-baca di githubnya Code Igniter 3, CI 3 bisa berjalan lancar di PHP 7. 
 
Peernya saat ini adalah mengaplikasikan JWT ke Api ini. Kapan-kapan kita bahas lagi OK. 
Thanks sudah mampir, feel free to ask, aku juga feel free to answer kok. Maaf aku tidak menyediakan source code langsung ya.  Budayakan ATM dengan menulis ulang atau mengikuti step-step yang telah dijelaskan. Kalau masih kurang jelas ya maafken, sebagai manusia aku punya banyak kekuranga. Tapi jika ada kelebihannya, sungguh itu karena Allah.

Tapi, aku kasih source code Api.php di controller deh

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

use chriskacerguis\RestServer\RestController;

class Api extends RestController {

    function __construct()
    {
        // Construct the parent class
        parent::__construct();
    }

    public function siswa_get(){
        $this->db->select('*');        
        $data = array ('data'=>$this->db->get('siswa')->result());        
        $this->response($data, 200 );
    }
    public function siswa_post(){
        $isidata = array('nis'=>$this->input->post('nis'), 'namasiswa'=>$this->input->post('nama'));
        $this->db->insert('siswa', $isidata);
        $this->response(array("pesan"=>"berhasil"), 200);
    }    
    public function siswa_put(){                
        $isidata = array('namasiswa'=>$this->put('namasiswa'));
        $this->db->where(array('nis'=>$this->put('nis')));
        $this->db->Update('siswa', $isidata);        
        $this->response(array("pesan"=>"Ubah Data Berhasil"), 200);        
    }
    public function siswa_delete(){                        
        $this->db->where('nis', $this->delete('nis'));
        $this->db->delete('siswa');
        $this->response(array("pesan"=>"data berhasil dihapus"), 200);        
    }
}

Di Artikel terbaru sudah kutambahkan pengamanan JWT, langsung cuss saja ke artikel terbaru,
sourcenya bisa kamu download di

Demikianlah artikel membuat rest api server dengan Code Igniter 3. pyuh panjang banget, asli capek. Soalnya nulis sambil ngoding juga wkwkwkw. Jangan lupa komen sebagai tanda kamu sudah mengunjungi blogku. Semoga Bermanfaat

4 comments for "Membuat Rest Api Server Dengan Code Igniter 3"

  1. sangat bermanfaat mas. terima kasih

    ReplyDelete
    Replies
    1. Pak Martin, bagai cara menampilkan data berdasarkan kriteria, misal nama siswa atau nomor induk siswa ? mohon bantuan nya pak.... terima kasih sebelum dan sesudahnya

      Delete
  2. mohon bantuannya Pak Martin, saya masih bingun dan ini perintah nya, tapi masih error, pesannya Message: Undefined array key 1953

    ini syntak saya pak :

    public function employer_get(){
    $this->db->select('*');
    $data = array ('data'=>$this->db->get('employer')->result());
    $nik = $this->get('NIK');
    $this->response( $data[$nik], 200 );
    }

    ReplyDelete

Post a Comment