Membangun Rest API Client Dengan Codeigniter 3

Rest API Client, Codeigniter 3 , Curl, Rest API PHP

REST server menyediakan resources atau sumber data sedangkan REST client adalah sebuah aplikasi yang akan mengakses ,menggunakan dan menampilkan  dari resource tersebut untuk penggunaan sesuai dengan kebutuhan.  Rest client dapat dibuat dengan berbagai platform dengan bahasa pemrograman yang berbeda yang mendukung pembacaann Rest API. aplikasi dapat berupa aplikasi web, mobile dan desktop.

Pada artikel berikut yang akan kita buat adalah sebuah aplikasi client dengan menggunakan bahasa pemrograman PHP dengan framework codeigniter, codeigniter sudah menyediakan library tambahan berupa library curl.

Curl adalah sebuah libarary  yang dapat kita gunakan untuk mengakses sebuah REST API dari atau ke sebuah server. berikut adalah penggunaan library Curl untuk memnakses resource / REST api yang telah kita buat sebelumnya.

# Persiapan File


Dalam pembuatan Rest api client ini diperlukan :
  1. Webserver yang digunakan kami adalah XAMPP, tetapi boleh juga menggunakan web server yang lainnya.
  2. REST API Server yang telah kita buat sebelumnya, jika belum silahkan buka halaman berikut : Disini
  3. Codeigniter 3.1.11 yang dapat didownload  Disini.
  4. Library curl yang akan kita gunakan adalah library pihak ketiga yang  dapat didownload Disini untuk versi terbaru atau versi yang akan kita gunakan bisa didownload Disini.

Setelah file yang dibutuhkan didownload saat nya kita ekstrak dan rename file framewrok codeiniter menjadi ci-client dan masukan File Curl.php kedalam folder application/libraries. sebelum dilanjutkan pastikan dahulu project ci-client dapat diakses melalui browser ( jangan lupa hidupkan apache yang ada di Xampp ya..) sehingga hasilnya seperti berikut.

contohapps-codeigniter
Jika sudah sesuai saatnya kita lanjutkan proses berikutnya yaitu mengakses Rest API untuk :
  1. Menampilkan data
  2. Mebambah data
  3. Mengubah data
  4. Menghapus data
Untuk membuat perintah diatas kita perlu menambahkan sebuah file pada controller dengan nama Produk.php pada folder application/controller/Produk.php dan sebuga view buat folder baru dengan nama produk didalam folder produk tersebut berisi file sebagai berikut :
  1. v_list.php, digunakan untuk menampilkan data
  2. v_form.php, digunakan untuk menyimpan data
  3. v_edit.php, digunakan untuk mengubah data.

Setelah membuat file Produk.php pada controller kita akan membuat Constructor yang berguna untuk memanggil library yang akan kita aktifkan saat halaman diload. sehingga file Produk.php seperti berikut :

<?php
Class Produk extends CI_Controller{
    var $api ="";
    function __construct() {
        parent::__construct();
        $this->api="http://localhost/rest-server/index.php";
        $this->load->library('session');
        $this->load->library('curl');
        $this->load->helper('form');
        $this->load->helper('url');
    }

 # Menampilkan data dari Rest API

Tambahkan sebuah fungsi dibawah Construktor diatas untuk menampilkan data sebagai berikut :

 function index(){
        $data['data_produk'] = json_decode($this->curl->simple_get($this->api.'/produk'));
        $this->load->view('produk/v_list',$data);
    }

# Menyimpan data Produk 


function simpan() {
        if (isset($_POST['submit'])) {
            $data = array(
                'nama_produk' => $this->input->post('nama_produk'),
                'tipe_produk' => $this->input->post('tipe_produk'),
                'harga' => $this->input->post('harga'),
                'stok' => $this->input->post('stok'));
            $insert = $this->curl->simple_post($this->api . '/produk', $data, array(CURLOPT_BUFFERSIZE => 10));
            if ($insert) {
                $this->session->set_flashdata('info', 'data berhasil disimpan.');
            } else {
                $this->session->set_flashdata('info', 'data gagal disimpan.');
            }
            redirect('produk');
        } else {
            $this->load->view('produk/v_form');
        }
    }

# Ubah Data Produk


// edit data produk
    function edit() {
        if (isset($_POST['submit'])) {
            $data = array(
                'id' => $this->input->post('id'),
                'nama_produk' => $this->input->post('nama_produk'),
                'tipe_produk' => $this->input->post('tipe_produk'),
                'harga' => $this->input->post('harga'),
                'stok' => $this->input->post('stok'));
            $update = $this->curl->simple_put($this->api . '/produk', $data, array(CURLOPT_BUFFERSIZE => 10));
            if ($update) {
                $this->session->set_flashdata('info', 'Data Berhasil diubah');
            } else {
                $this->session->set_flashdata('info', 'Data Gagal diubah');
            }
            redirect('produk');
        } else {
            $params = array('id' => $this->uri->segment(3));
            $data['data_produk'] = json_decode($this->curl->simple_get($this->api . '/produk', $params));
            $this->load->view('produk/v_edit', $data);
        }
    }

# Hapus Data Produk


 // hapus data produk berdasarkan id
    function delete($id) {
        if (empty($id)) {
            redirect('produk');
        } else {
            $delete = $this->curl->simple_delete($this->api . '/produk', array('id' => $id), array(CURLOPT_BUFFERSIZE => 10));
            if ($delete) {
                $this->session->set_flashdata('info', 'Data Berhasil dihapus');
            } else {
                $this->session->set_flashdata('info', 'Data Gagal dihapus');
            }
            redirect('produk');
        }
    }

Sehingga coding lengkap pada controller Produk.php adalah sebagai berikut :
<?php
Class Produk extends CI_Controller {
    var $api = "";
    function __construct() {
        parent::__construct();
        $this->api = "http://localhost/rest-server/index.php";
        $this->load->library('session');
        $this->load->library('curl');
        $this->load->helper('form');
        $this->load->helper('url');
    }
    // menampilkan data produk
    function index() {
        $data['data_produk'] = json_decode($this->curl->simple_get($this->api . '/produk'));
        $this->load->view('produk/v_list', $data);
    }
    // simpan data produk
    function simpan() {
        if (isset($_POST['submit'])) {
            $data = array(
                'nama_produk' => $this->input->post('nama_produk'),
                'tipe_produk' => $this->input->post('tipe_produk'),
                'harga' => $this->input->post('harga'),
                'stok' => $this->input->post('stok'));
            $insert = $this->curl->simple_post($this->api . '/produk', $data, array(CURLOPT_BUFFERSIZE => 10));
            if ($insert) {
                $this->session->set_flashdata('info', 'data berhasil disimpan.');
            } else {
                $this->session->set_flashdata('info', 'data gagal disimpan.');
            }
            redirect('produk');
        } else {
            $this->load->view('produk/v_form');
        }
    }
    // edit data produk
    function edit() {
        if (isset($_POST['submit'])) {
            $data = array(
                'id' => $this->input->post('id'),
                'nama_produk' => $this->input->post('nama_produk'),
                'tipe_produk' => $this->input->post('tipe_produk'),
                'harga' => $this->input->post('harga'),
                'stok' => $this->input->post('stok'));
            $update = $this->curl->simple_put($this->api . '/produk', $data, array(CURLOPT_BUFFERSIZE => 10));
           
            if ($update) {
                $this->session->set_flashdata('info', 'Data Berhasil diubah');
            } else {
                $this->session->set_flashdata('info', 'Data Gagal diubah');
            }
            redirect('produk');
        } else {
            $params = array('id' => $this->uri->segment(3));
            $data['data_produk'] = json_decode($this->curl->simple_get($this->api . '/produk', $params));
            $this->load->view('produk/v_edit', $data);
        }
    }
    // hapus data produk berdasarkan id
    function delete($id) {
        if (empty($id)) {
            redirect('produk');
        } else {
            $delete = $this->curl->simple_delete($this->api . '/produk', array('id' => $id), array(CURLOPT_BUFFERSIZE => 10));
            if ($delete) {
                $this->session->set_flashdata('info', 'Data Berhasil dihapus');
            } else {
                $this->session->set_flashdata('info', 'Data Gagal dihapus');
            }
            redirect('produk');
        }
    }
}


Selanjutnya kita akan membuat coding pada file v_list.php untuk menampilkan data produk, coding pada file tersebut adalah sebagai berikut :

<font color="orange">
<?php echo $this->session->flashdata('info'); ?>
</font>
<h1>DATA PRODUK</h1>
<table border="1">
    <tr>
        <th>ID</th>
        <th>NAMA</th>
        <th>TIPE PRODUK</th>
        <th>HARGA</th>
        <th>STOK</th>
        <th>AKSI</th>
    </tr>
    <?php
    foreach ($data_produk as $produk) {
        echo "<tr>
              <td>$produk->id</td>
              <td>$produk->nama_produk</td>
              <td>$produk->tipe_produk</td>
              <td>$produk->harga</td>
              <td>$produk->stok</td>
              <td>" . anchor('produk/edit/' . $produk->id, 'Edit') . "
                  " . anchor('produk/delete/' . $produk->id, 'Delete') . "</td>
              </tr>";
    }
    ?>
</table>
<a href=<?=base_url()?>index.php/produk/simpan>+ Tambah data</a>


Berikutnya adalah coding pada file v_form.php untuk input data produk, coding pada file tersebut adalah sebagai berikut :

<?php echo form_open_multipart('produk/simpan'); ?>
<h1>TAMBAH DATA</h1>
<table>
    <tr>
        <td>NAMA PRODUK</td><td><?php echo form_input('nama_produk'); ?></td>
    </tr>
    <tr>
        <td>TIPE PRODUK</td><td><?php echo form_input('tipe_produk'); ?></td>
    </tr>        
    <tr>
        <td>HARGA</td><td><?php echo form_input('harga'); ?></td>
    </tr> 
    <tr>
        <td>STOK</td><td><?php echo form_input('stok'); ?></td>
    </tr> 
    <tr>
        <td></td>
        <td colspan="2">
            <?php echo form_submit('submit', 'Simpan'); ?>
            <?php echo anchor('produk', 'Kembali'); ?></td></tr>
</table>
<?php
echo form_close();
?>

Berikutnya adalah coding pada file v_edit.php yang akan digunakan untuk edit data produk, coding pada file tersebut adalah sebagai berikut :
<?php echo form_open('produk/edit'); ?>
<?php echo form_hidden('id', $data_produk[0]->id); ?>
<h1>EDIT PRODUK</h1>
<table>
    <tr><td>ID</td><td><?php echo form_input('', $data_produk[0]->id, "disabled"); ?></td></tr>
    <tr><td>NAMA</td><td><?php echo form_input('nama_produk', $data_produk[0]->nama_produk); ?></td></tr>
    <tr><td>TIPE PRODUK</td><td><?php echo form_input('tipe_produk', $data_produk[0]->tipe_produk); ?></td></tr>
    <tr><td>HARGA</td><td><?php echo form_input('harga', $data_produk[0]->harga); ?></td></tr>
    <tr><td>STOK</td><td><?php echo form_input('stok', $data_produk[0]->stok); ?></td></tr>
    <tr><td colspan="2">
            <?php echo form_submit('submit', 'Simpan'); ?>
            <?php echo anchor('produk', 'Kembali'); ?></td></tr>
</table>
<?php
echo form_close();
?>

coding kita telah selesai saat nya mencoba jalankan project yang sudah kita kerjakan pada url berikut:
http://localhost/ci-client/index.php/produk jika data berhasil tampil lanjutkan dengan mencoba menambahkan data,edit data dan hapus data.
sekian, terimakasih.