Tutorial CRUD CodeIgniter 4 & Vue JS #2 - Membuat Restful API di CodeIgniter 4


Fika Ridaul Maulayya
I'm a Full-Stack Web Developer, Content Creator and CO-Founder Santri Koding. I share everything i know with Articles, Screencasts and E-Books at SantriKoding.com

Halo teman-teman semuanya, pada tahap kali ini kita akan membuat Restful API di CodeIgniter untuk proses CRUD yang nanti akan di lakukan dengan Vue Js.

Setelah sebelumnya kita sudah berhasil membuat project CodeIgniter baru dan sekaligus membuat migration table, maka sekarang kita akan membuat sebuah controller, model dan route untuk Rest API tersebut. Langsung saja kita mulai.

Langkah 1 - Membuat Model

Silahkan buat sebuah model baru dengan nama PostModel.php di dalam folder app/Models/ kemudian masukkan kode berikut ini :

PostModel.php
<?php namespace App\Models;

use CodeIgniter\Model;

class PostModel extends Model
{
    /**
     * table name
     */
    protected $table = "posts";


    /**
     * allowed Field
     */
    protected $allowedFields = [
        'title',
        'content'
    ];
}

Di atas kita membuat sebuah Model baru dengan nama PostModel, kemudian di dalam Model tersebut kita menambahkan beberapa protected properties, diantaranya :

  • $table - ini di gunakan untuk memberi tahu Model bahwa kita akan menggunakan table dengan nama posts
  • $allowedFields - ini digunakan sebagai mass assigment, jadi column mana saja yang diizinan untuk melakukan manipulasi data.

Langkah 2 - Membuat Controller

Selanjutnya kita akan membuat controller untuk proses CRUD nantinya, silahkan buat file baru dengan nama Post.php di dalam folder app/Controllers/ kemudian masukkan kode berikut ini :

Post.php

<?php

namespace App\Controllers;

use CodeIgniter\RESTful\ResourceController;

class Post extends ResourceController
{
    protected $modelName = 'App\Models\PostModel';
    protected $format = 'json';

    /**
     * index function
     * @method : GET
     */
    public function index()
    {
        return $this->respond([
            'statusCode' => 200,
            'message'    => 'OK',
            'data'       => $this->model->orderBy('id', 'DESC')->findAll()
        ], 200);
    }

    /**
     * show function
     * @method : GET with params ID
     */
    public function show($id = null)
    {
        return $this->respond([
            'statusCode' => 200,
            'message'    => 'OK',
            'data'       => $this->model->find($id)
        ], 200);
    }

    /**
     * create function
     * @method : POST
     */
    public function create()
    {
        if ($this->request)
        {
            //get request from Vue Js
            if($this->request->getJSON()) {

                $json = $this->request->getJSON();

                $post = $this->model->insert([
                    'title'     => $json->title,
                    'content'   => $json->content
                ]);

            } else {

                //get request from Postman and more
                $post = $this->model->insert([
                    'title'     => $this->request->getPost('title'),
                    'content'   => $this->request->getPost('content')
                ]);
            }
            
            return $this->respond([
                'statusCode' => 201,
                'message'    => 'Data Berhasil Disimpan!',
            ], 201);
        }
    }

    /**
     * update function
     * @method : PUT or PATCH
     */
    public function update($id = null)
    {
        //model
        $post = $this->model;

        if ($this->request)
        {
            //get request from Vue Js
            if($this->request->getJSON()) {
            
                $json = $this->request->getJSON();
                
                $post->update($json->id, [
                    'title'     => $json->title,
                    'content'   => $json->content
                ]);

            } else {

                //get request from Postman and more
                $data = $this->request->getRawInput();
                $post->update($id, $data);
            }

            return $this->respond([
                'statusCode' => 200,
                'message'    => 'Data Berhasil Diupdate!',
            ], 200);
        }
    }


    /**
     * edit function
     * @method : DELETE with params ID
     */
    public function delete($id = null)
    {
        $post = $this->model->find($id);

        if($post) {

            $this->model->delete($id);

            return $this->respond([
                'statusCode' => 200,
                'message'    => 'Data Berhasil Dihapus!',
            ], 200);

        }
    }
}

Di atas kita menambahkan 5 function/method yang akan kita gunakan untuk proses membuat CRUD dengan Vue Js nanti, berikut ini beberapa penjelasan untuk 5 function/method di atas.

Sebelumnya di atas kita mengimport ResourcesController terlebih dahulu, ResourcesController ini kita akan gunakan untuk membangun sebuah Rest API di CodeIgniter menjadi lebih mudah.

use CodeIgniter\RESTful\ResourceController;

Kemudian kita juga membuat 2 protected properties, yaitu :

protected $modelName = 'App\Models\PostModel';
protected $format = 'json';

Untuk propreties $modelName adalah model mana yang akan kita gunakan di dalam coontroller ini, di atas kita memanggil dari path app/Models/PostModel.php.

Kemudian untuk $format adalah return response yang akan kita gunakan untuk menampilkan data, disini kita menggunakan format JSON, kita juga bisa merubahnya ke dalam format XML. Sesuai dengan kebutuhan.

Kemudian untuk function index di atas kita return data posts dengan di urutkan berdaasarkan ID posts yang paling terbaru dan tentunya ke dalam format JSON.

Untuk function show di atas kita membutuhkan sebuah parameters ID dari data post, fungsi ini akan kita gunakan untuk menampilkan detail data post dan untuk implementasi di Vue Js kita akan gunakan fungsi ini untuk menampilkan data yang akan di edit.

Selanjutnya ada function create, disini kita membuat fungsi ini memiliki 2 kondisi yaitu menyimpan data dari request Vue Js dan menyimpan data dari request Postman atau yang lainnya. Karena hasil request dari Vue Js berupa Object JSON jadi kita menangkap request tersebut dengan $this->request->getJSON(). Dan untuk request dari Postman atau yang lain kita cukup menangkap request tersebut menggunakan $this->request->getPost().

Dan untuk function update di atas kita juga membutuhkan parameters ID dari data post, karena ID ini akan dijadikan acuan untuk meng-update data ke dalam database. Sama seprti function create, disini kita membuat 2 kondisi request yaitu dari Vue Js dan Postman atau yang lain.

Untuk request dari Vue Js karena data yang dikirim berupa Object JSON kita bisa mengkapnya menggunakan $this->request->getJSON() dan untuk request dari Postman atau yang lain kita harus menggunakan seperti berikut ini $this->request->getRawInput, request ini kusus digunakan jika kita menggunakan Resources Route dan function update saja.

Kemudian yang terakhir ada function delete, fungsi ini juga membutuhkan sebuah parameters ID dari post, karena ID tersebut akan di jadikan acuan untuk melakukan delete data berdasarkan ID.

Langkah 3 - Menambahkan Route

Setelah kita berhasil membuat controller, sekarang kita lanjutkan menambahkan sebuah routes, nah kali ini kita akan implementasikan yang namanya Resources Route.

Dengan Resources Route kita bisa membuat RESTFul routes dengan lebih cepat hanya dengan method resources(). Dengan menggunakan ini kita akan dibuatkan 5 route yang bisa menghandle full CRUD, seperti menampilkan data, input data, edit dan update data sampai hapus data. langsung saja kita mulai.

Silahkan buka file app/Config/Routes.php kemudian masukkan kode berikut ini di bawah route home.

$routes->resource('api/post', ['controller' =>'Post']);

Route di atas maka secara otomatis akan membuatkan route seperti berikut ini di dalam aplikasi kita.

$routes->get('api/post/new',             'Post::new');
$routes->post('api/post',                'Post::create');
$routes->get('api/post',                 'Post::index');
$routes->get('api/post/(:segment)',      'Post::show/$1');
$routes->get('api/post/(:segment)/edit', 'Post::edit/$1');
$routes->put('api/post/(:segment)',      'Post::update/$1');
$routes->patch('api/post/(:segment)',    'Post::update/$1');
$routes->delete('api/post/(:segment)',   'Post::delete/$1');

Langkah 4 - Uji Coba Restful API

Untuk pengujian Restful API kali ini kita akan menggunakan tools yang bernama Postman, silahakn teman-teman bisa meengunduhnya di https://www.postman.com/ langsung saja kita mulai tahap uji cobanya.

Menambah / Input Data ke Database

Untuk menambahkan data silahkan masukkan http://localhost:8080/api/post dan untuk methodnya silahkan menggunakan POST, karena kita akan mengirimkan sebuah data ke server, sekarang sliahkan klik tab body pada Postman dan pilih form-data, dan tambahkan key dengan nama title dan content beserta valunya. kurang lebih seperti berikut ini :

Jika berhasil maka kurang lebih kita akan mendapatkan response format seeprti berikut ini :

{
    "statusCode": 201,
    "message": "Data Berhasil Disimpan!",
}

Menampilkan Data dari Database

Silahkan masukkan http://localhost:8080/api/post dan menggunakan method GET di dalam Postman, kurang lebih seperti berikut ini :

Jika berhasil teman-teman akan mendapatkan response data dalam bentuk JSON kurang lebih seperti berikut ini :

{
    "statusCode": 200,
    "message": "OK",
    "data": [
        {
            "id": "1",
            "title": "Judul Post 1",
            "content": "Konten Post 1"
        }
    ]
}

Update Data ke Database

Sekarang teman-teman bisa mencobanya langsung dengan Postman, silahkan masukkan http://localhost:8000/api/post/1 pada bagian URL dan jangan lupa menggunakan method PUT.

Di atas kita mencoba meng-update data post dengan ID 1. Sebelum kita klik Send, silahkan klik tab body pada Postman dan pilih x-www-form-urlencode, dan tambahkan key dengan nama, title dan content beserta valunya yang ingin di update. Atau seperti gambar berikut ini :

Jika berhasil, teman-teman akan melihat response dengan format JSON seperti berikut ini :

{
    "statusCode": 200,
    "message": "Data Berhasil Diupdate!",
}

Hapus Data dari Database

Sekarang kita akan mencoba uji coba untuk hapus data dari Database, sekarang teman-teman bisa mencobanya langsung dengan Postman, silahkan masukkan http://localhost:8000/api/posts/1 pada bagian URL dan jangan lupa menggunakan method DELETE.

Di atas kita mencoba menghapus data post dengan ID 1, kurang lebih seperti gambar berikut ini :

Jika berhasil, teman-teman akan melihat response dengan format JSON seperti berikut ini :

{
    "statusCode": 200,
    "message": "Data Berhasil Dihapus!",
}

Source Code

CodeIgniter Restful API : https://github.com/SantriKoding-com/CodeIgniter4-Restful-API

Vue Js : https://github.com/SantriKoding-com/Vue-Js-CodeIgniter


Fika Ridaul Maulayya
I'm a Full-Stack Web Developer, Content Creator and CO-Founder Santri Koding. I share everything i know with Articles, Screencasts and E-Books at SantriKoding.com
KEBIJAKAN KOMENTAR

Saat memberikan komenatar silahkan memberikan informasi lengkap tentang error, seperti: screenshot, link kode, dll. Baca aturan komentar kami

KOMENTAR