Ilmu Coding Ilmucoding.com - Merupakan situs yang membantu Anda belajar coding lebih mudah, nyaman, interaktif dan profesional. Belajar sekarang di ilmu coding. GRATIS

Tutorial Cara Membuat CRUD REST API Codeigniter 4

6 min read

CRUD REST API Codeigniter 4

Inilah tutorial cara membuat CRUD Rest API Codeigniter 4. Pada tutorial kali ini, Anda akan belajar tentang Resource Controller, Resource Route, Rest Api dan lain-lain.

Apabila Anda sedang membutuhkan tutorial Rest API di Codeigniter 4, Anda berada pada artikel yang tepat.

Sebab, pada tutorial ini akan dibahas steb by step, disertai contoh dan source code.

Siap?

Let’s go!

Memahami Tentang Rest API

REST (REpresentational State Transfer) merupakan standar arsitektur komunikasi berbasis web yang sering diterapkan dalam pengembangan layanan berbasis web. Umumnya menggunakan HTTP (Hypertext Transfer Protocol) sebagai protocol untuk komunikasi data. REST pertama kali diperkenalkan oleh Roy Fielding pada tahun 2000.

Pada arsitektur REST, REST server menyediakan resources (sumber daya/data) dan REST client mengakses dan menampilkan resource tersebut untuk penggunaan selanjutnya. Setiap resource diidentifikasi oleh URIs (Universal Resource Identifiers) atau global ID. Resource tersebut direpresentasikan dalam bentuk format teks, JSON atau XML. Pada umumnya formatnya menggunakan JSON dan XML. (Sumber: Codepolitan)

Install Codeigniter 4

Kami sudah menulis artikel khusus mengenai cara menginstall Codeigniter 4. Anda bisa membaca tutorialnya pada link di bawah ini:

Baca: Tutorial Cara Install Codeigniter 4

Mempersiapkan Database dan Environment

Pada sub bab ini, Anda akan membuat database serta konfigurasi environment.

Berikut tahapannya:

Step #1 – Konfigurasi Environment

By default, saat pertama kali download enviromentnya yang aktif adalah production.

Oleh sebab itu, Anda perlu mengubah environmentnya terlebih dahulu ke development.

Tujuannya agar lebih mudah memanajement pada saat tahap development.

Baca: Cara Ubah Environment Production ke Development Codeigniter 4

Step # 2 –  Konfigurasi Database di Environment

Apabila sudah selesai mengubah environment ke development, silahkan uncomment kode di bawah ini (hapus tanda # nya):

# database.default.hostname = localhost
# database.default.database = ci4
# database.default.username = root
# database.default.password = root
# database.default.DBDriver = MySQLi

Ubah menjadi:

database.default.hostname = localhost
database.default.database = ci4_restapi
database.default.username = root
database.default.password = 
database.default.DBDriver = MySQLi

Step #3 – Buat Database Baru

Silahkan buat database baru bernama ci4_restapi.

Step #4 – Buat Table dan Model Categories

Melalui terminal, silahkan ketik kode command berikut:

php spark migrate:create categories

Kemudian, silahkan buka file yang berujung _categories.php pada direktori app/Database/Migrations.

Pada function up(), tambahkan kode berikut ini:

$this->forge->addField([
	'category_id'			=> [
		'type'           	=> 'BIGINT',
		'constraint'     	=> 20,
		'unsigned'       	=> TRUE,
		'auto_increment' 	=> TRUE
	],
	'category_name'       	=> [
		'type'           	=> 'VARCHAR',
		'constraint'     	=> '100',
	],
	'category_status' 		=> [
		'type'           	=> 'ENUM',
		'constraint' 		=> "'Active','Inactive'",
		'default' 			=> 'Active'
	],
]);
$this->forge->addKey('category_id', TRUE);
$this->forge->createTable('categories');

Simpan.

Lalu jalankan command berikut ini:

php spark migrate

Terakhir, silahkan buat file baru bernama Category_Model.php dan simpan di direktori app/Models.

Pada file Category_model, ketik kode berikut:

<?php

namespace App\Models;

use CodeIgniter\Model;

class Category_model extends Model {

    protected $table = 'categories';

    public function getCategory($id = false)
    {
        if($id === false){
            return $this->findAll();
        } else {
            return $this->getWhere(['category_id' => $id])->getRowArray();
        }  
    }
    
    public function insertCategory($data)
    {
        return $this->db->table($this->table)->insert($data);
    }

    public function updateCategory($data, $id)
    {
        return $this->db->table($this->table)->update($data, ['category_id' => $id]);
    }

    public function deleteCategory($id)
    {
        return $this->db->table($this->table)->delete(['category_id' => $id]);
    }
} 

Simpan.

Membuat Struktur Validasi Category

Silahkan buka file app/Config/Validation.php kemudian tambahkan kode berikut ini:

public $category = [
	'category_name'         => 'required',
	'category_status'      	=> 'required'
];

public $category_errors = [
	'category_name'=> [
		'required' 	=> 'Nama wajib diisi.'
	],
	'category_status'=> [
		'required' 	=> 'Status wajib diisi.'
	]
];

Simpan.

Menyusun CRUD Rest API Codeigniter 4

Inilah tahapan yang paling dinantikan.

Pada tahap ini kita akan mencoba step by step membuat REST API Codeigniter 4.

Let’s go!

Step #1 – Berkenalan dengan Resource Controller

Salah satu kelebihan Codeigniter 4 adalah kemudahan dalam membuat CRUD Rest API.

Ia sudah menyediakan controller yang khusus dibuat untuk menghandle REST API.

Resource ini menyediakan function new(), create(), edit($id = NULL), show($id = NULL), update($id = NULL) dan delete($id = NULL).

Dengan begitu, tentu akan lebih mudah memanajemen-nya.

Step #2 – Cara Menggunakan Resource Controller

Cara menggunakan Resource Controller sangat mudah.

Hal pertama yang perlu Anda lakukan adalah memanggilnya.

Tambahkan baris kode ini:

use CodeIgniter\RESTful\ResourceController; 

Baris kode tersebut akan menginclude Resource Controller yang akan Anda butuhkan.

Step #3 – Membuat Controller Extends Resource Controller

Silahkan buat file baru bernama Categories.php pada direktori app/Controllers.

Kemudian ketik kode berikut:

<?php namespace App\Controllers;

use CodeIgniter\RESTful\ResourceController;

class Categories extends ResourceController
{
    protected $format       = 'json';
    protected $modelName    = 'App\Models\Category_model';

	public function index()
	{
		return $this->respond($this->model->findAll(), 200);
    }
}

Penjelasan:

Variabel $format dan $modelName sudah tersedia di file system/RESTful/ResourceController.php

Fungsi $format untuk menentukan jenis output yang akan Anda inginkan.

Untuk REST API biasanya menggunakan format json.

Begitupun dengan $modelName merupakan variabel yang bisa dipanggil saat mengextends Resource Controller.

Fungsinya untuk memanggil model yang akan Anda gunakan.

Dalam kasus ini, menggunakan model Category_model.

Step #4 – Set Route Resource Categories

Langkah berikutnya Anda bisa menambahkan kode di bawah ini pada direktori app/Config/Routes.php:

$routes->resource('categories');

Simpan.

Penjelasan:

Kode 1 baris di atas jangan dianggap enteng.

Sebab 1 baris di atas sudah setara dengan route di bawah ini:

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

Menurut saya, ini keren banget dan benar-benar menyingkat waktu pengembangan aplikasi.

Codeigniter 4 menyediakan route ini khusus untuk menangani Resource Controller.

Step #5 – Buat Data Dummy Categories

Silahkan buat file baru bernama CategorySeeder.php dan simpan di direktori app/Database/Seeds.

Kemudian ketik kode barikut ini:

<?php namespace App\Database\Seeds;
 
class CategorySeeder extends \CodeIgniter\Database\Seeder
{
    public function run()
    {
        $data1 = [
            'category_name'     => 'Masakan',
            'category_status'   => 'Active'
        ];
        $data2 = [
            'category_name'     => 'Minuman',
            'category_status'   => 'Active'
        ];
        $this->db->table('categories')->insert($data1);
        $this->db->table('categories')->insert($data2);
    }
} 

Simpan.

Agar data tersebut bisa diinsert ke database, ketik command berikut ini:

php spark db:seed CategorySeeder

Hasilnya:

rest api codeigniter 4 gambar 1

Step #6 – Testing Index Categories dengan Postman

Jika Anda belum memiliki software Postman, sebaiknya install terlebih dahulu.

Jika sudah, silahkan buka aplikasinya.

Kemudian ketik command di bawah ini untuk menjalankan aplikasi:

php spark serve

Jika aplikasi sudah siap, silahkan masukan link di bawah ini dengan method GET pada Postman:

localhost:8080/categories

Klik send.

Hasilnya:

rest api codeigniter 4 gambar 2

Step #7 – Menambahkan Function Create

Tambahkan function berikut ini tepat di bawah function index() pada direktori app/Controller/Categories.php

public function create()
{
    $validation =  \Config\Services::validation();

    $name   = $this->request->getPost('category_name');
    $status = $this->request->getPost('category_status');
    
    $data = [
        'category_name' => $name,
        'category_status' => $status
    ];
    
    if($validation->run($data, 'category') == FALSE){
        $response = [
            'status' => 500,
            'error' => true,
            'data' => $validation->getErrors(),
        ];
        return $this->respond($response, 500);
    } else {
        $simpan = $this->model->insertCategory($data);
        if($simpan){
            $msg = ['message' => 'Created category successfully'];
            $response = [
                'status' => 200,
                'error' => false,
                'data' => $msg,
            ];
            return $this->respond($response, 200);
        }
    }
}

Simpan.

Penjelasan:

Selain menambahkan validasi, saya pun menambahkan custom response seperti pada baris ke 7 – 11.

Step #8 – Testing Insert Category

Tambahkan tab baru di aplikasi Postman.

Set method POST.

Kemudian masukan URL berikut ini:

localhost:8080/categories/create

Jika error dan terjadi validasi (karena field tidak diisi) hasilnya adalah:

rest api codeigniter 4 gambar 3

Jika berhasil, hasilnya:

rest api codeigniter 4 gambar 4

Step #9 – Menambahkan Function Show dan Edit

Tambahkan kode di bawah ini tepat di bawah function insert:

public function show($id = NULL)
{
    $get = $this->model->getCategory($id);
    if($get){
        $code = 200;
        $response = [
            'status' => $code,
            'error' => false,
            'data' => $get,
        ];
    } else {
        $code = 401;
        $msg = ['message' => 'Not Found'];
        $response = [
            'status' => $code,
            'error' => true,
            'data' => $msg,
        ];
    }
    return $this->respond($response, $code);
}

public function edit($id = NULL)
{
    $get = $this->model->getCategory($id);
    if($get){
        $code = 200;
        $response = [
            'status' => $code,
            'error' => false,
            'data' => $get,
        ];
    } else {
        $code = 401;
        $msg = ['message' => 'Not Found'];
        $response = [
            'status' => $code,
            'error' => true,
            'data' => $msg,
        ];
    }
    return $this->respond($response, $code);
}

Simpan.

Step #10 – Testing Show Category

Tambahkan tab baru di aplikasi Postman.

Set method GET.

Kemudian masukan URL berikut ini:

localhost:8080/categories/1

Hasilnya:

Step #11 – Testing Edit Category

Tambahkan tab baru di aplikasi Postman.

Set method GET.

Kemudian masukan URL berikut ini:

localhost:8080/categories/2/edit

Hasilnya:

rest api codeigniter 4 gambar 5

Step #12 – Menambahkan Function Update Category

Tambahkan kode di bawah ini tepat di bawah function edit:

public function update($id = NULL)
{
    $validation =  \Config\Services::validation();
    $name   = $this->request->getRawInput('category_name');
    $status = $this->request->getRawInput('category_status');
    $data = [
        'category_name' => $name,
        'category_status' => $status
    ];
    if($validation->run($data, 'category') == FALSE){
        $response = [
            'status' => 500,
            'error' => true,
            'data' => $validation->getErrors(),
        ];
        return $this->respond($response, 500);
    } else {
        $simpan = $this->model->updateCategory($data,$id);
        if($simpan){
            $msg = ['message' => 'Updated category successfully'];
            $response = [
                'status' => 200,
                'error' => false,
                'data' => $msg,
            ];
            return $this->respond($response, 200);
        }
    }
}

Simpan.

Step #13 – Testing Update Category

Tambahkan tab baru di aplikasi Postman.

Set method PUT.

Kemudian masukan URL berikut ini:

localhost:8080/categories/1

Jika terjadi error validasi hasilnya adalah:

rest api codeigniter 4 gambar 6

Jika berhasil update, hasilnya adalah:

rest api codeigniter 4 gambar 7

Step #14 – Menambahkan Function Delete Category

Tambahkan kode di bawah ini tepat di bawah function update:

public function delete($id = NULL)
{
    $hapus = $this->model->deleteCategory($id);
    if($hapus){
        $code = 200;
        $msg = ['message' => 'Deleted category successfully'];
        $response = [
            'status' => $code,
            'error' => false,
            'data' => $msg,
        ];
    } else {
        $code = 401;
        $msg = ['message' => 'Not Found'];
        $response = [
            'status' => $code,
            'error' => true,
            'data' => $msg,
        ];
    }
    return $this->respond($response, $code);
}

Simpan.

Step #15 – Testing Delete Category

Tambahkan tab baru di aplikasi Postman.

Set method DELETE.

Kemudian masukan URL berikut ini:

localhost:8080/categories/1

Hasilnya:

crud rest api codeigniter 4 gambar 8

Download Source Code REST API Codeigniter 4

Silahkan download source code tutorial CRUD REST API Codeigniter 4 melalui link berikut ini:

Apa Selanjutnya?

Alhamdulillah tutorial membuat CRUD REST API Codeigniter 4 sudah selesai.

… eits, tapi jangan puas dulu.

Sebab masih ada yang perlu dipelajari lagi, misalnya multiple upload codeigniter 4.

Selamat belajar …

Update Issue

Beberapa berkomentar kalau pas bagian update sering terjadi error. Lalu saya coba untuk menyelesaikan permasalahan tersebut. Akhirnya saya ketemu dokumentasi ini => https://codeigniter4.github.io/userguide/incoming/incomingrequest.html#retrieving-input . Silahkan baca dokumentasinya pada bagian getRawInput.

Setelah saya pahami dan coba menerapkannya. Ternyata function getRawInput() akan menghasilkan nilai array sebagaimana $data di function update() sebelumnya.

Jadi, kita tidak membutuhkan $data dalam bentuk array lagi. Cukup kita berikan $data = $this->request->getRawInput() saja. Nah, kesimpulannya yang perlu kita ubah adalah function update($id = null).

Silahkan ubah dengan kode berikut:

public function update($id = NULL)
{
    $validation =  \Config\Services::validation();

    // $name   = $this->request->getRawInput('category_name');
    // $status = $this->request->getRawInput('category_status');

    $data = $this->request->getRawInput();

    // $data = [
    //     'category_name' => $name,
    //     'category_status' => $status 
    // ];

    if($validation->run($data, 'category') == FALSE){

        $response = [                                                                                       
            'status' => 500,
            'error' => true,
            'data' => $validation->getErrors(),
        ];
        return $this->respond($response, 500);

    } else {

        $simpan = $this->model->updateCategory($data,$id);
        if($simpan){
            $msg = ['message' => 'Updated category successfully'];
            $response = [
                'status' => 200,
                'error' => false,
                'data' => $msg,
            ];
            return $this->respond($response, 200);
        } 
        
    }
}

… dan setelah saya coba alhamdulillah berhasil.

Coba lihat gambar di bawah ini:

Semoga bermanfaat …

Ilmu Coding Ilmucoding.com - Merupakan situs yang membantu Anda belajar coding lebih mudah, nyaman, interaktif dan profesional. Belajar sekarang di ilmu coding. GRATIS

32 Replies to “Tutorial Cara Membuat CRUD REST API Codeigniter 4”

  1. bang kok punya saya eror yg bagian create pesan erornya “message”: “Call to undefined method CodeIgniter\\HTTP\\IncomingRequest::getPut()”,
    “file”: “C:\\xampp\\htdocs\\ci4\\app\\Controllers\\Categories.php”,
    “line”: 19,
    itu kenapa yg bang?

    1. Coba ganti baris ke 19 dan 20 dari getPut jadi getPost.

      Sama pas bagian update kan ada function getPost, ganti jadi getRawInput.

      Atau coba baca lagi artikel bagian create dan update controller, sudah saya update isinya

      1. udah bang tapi yg bagian testing insert malah mucul {
        “status”: 500,
        “error”: true,
        “data”: {
        “category_name”: “Nama wajib diisi.”,
        “category_status”: “Status wajib diisi.”
        }
        }
        padahal sudah saya isi database tablenya

        1. Saya sudah coba melakukan insert dengan method getPost, alhamdulillah berhasil mas. Coba lagi diteliti bagian mana proses errornya.

  2. Halo,

    Saya udah set format json, tapi kenapa respondnya selalu dalam xml ya?
    Saya coba cek Format.php di dalam Config/Format.php, di beberapa forum ada yang bilang comment aja options xml di dalam Format.php, tapi kok rasanya itu bukan cara yang benar ya
    Ada input untuk hal ini?

    Terima kasih

    1. Kalau dibuka lewat browser, emang hasilnya xml Mas.

      Tapi kalau dibuka by Postman, hasilnya akan json.

      Saya juga merasakan hal yang sama kaya mas.

  3. ketika update ke 2 field, yaitu field category_name & category_status akan terjadi error mas, tolong di perbaiki…

  4. om klo di update harus pilih salah satu ga bisa dua ketika saya update field category_name & category_status yg category_status malah kosong dan categroy namenya yg berhasil
    pesan eror
    “message”: “Operand should contain 1 column(s)”,
    “file”: “C:\\xampp\\htdocs\\ci4_restapi\\app\\Models\\Category_Model.php”,
    “line”: 27
    “file”: “C:\\xampp\\htdocs\\ci4_restapi\\app\\Controllers\\Categories.php”,
    “line”: 105,
    “function”: “updateCategory”

    1. di awal, saya pakai enum untuk category status, Mas. Jadi fieldnya harus “Active” atau “Inactive”.

      Mesti huruf besar di awal: Active dan Inactive.

      Terkadang, pembaca input category_statusnya “active” atau “inactive”. Ini salah. Sebab saya set di awal “Active” atau “Inactive” aja yang diijinkan.

      Kecuali kalau mau, field category_status kasih varchar aja. Jangan enum.

      1. Klo semuanya saya ganti varchar kecuali id apa yg terjadi bang bisa diupdate dua duanya kah

  5. saya sangat sengan sekali dengan artikel ini. maaf, saya ingin bertanya mengapa ketika saya melakukan update data untuk 2 field category_name & category status mengapa muncul error query seperti ini ya?
    “args”: [
    “UPDATE `categories` SET `category_name` = (‘kopi’,’active’),`category_status` = (‘sabun’,’active’)\nWHERE `id` = ‘2’”
    ]

    1. di awal, saya pakai enum untuk category status, Mas. Jadi fieldnya harus Active atau Inactive.

      Mesti huruf besar di awal: Active dan Inactive.

      Saya ngeliat dari error, mas set data category_statusnya “active”. Ini salah. Sebab saya set di awal “Active” atau “Inactive aja yang diijinkan.

  6. Assalamualaikum…

    Maaf mas mau tanya pas method put error nya spt ini

    trace”: [
    {
    “file”: “C:\\xampp\\htdocs\\RestApi\\system\\Database\\MySQLi\\Connection.php”,
    “line”: 330,
    “function”: “query”,
    “class”: “mysqli”,
    “type”: “->”,
    “args”: [
    “UPDATE `categories` SET `category_name` = (‘ATK’,’Active’), `category_status` = (‘ATK’,’Active’)\nWHERE `category_id` = ‘1’”
    ]
    },

    padahal sudah mengikuti parameter sesuai dengan yang diberikan.. terima kasih

  7. mas saya update cuma muncul berhasil aja tapi klo get datanya malah tetap ga ke update itu cuma muncul tulisan berhasil update saya udah cek di phpmyadmin datanya ga berubah yg category_name sama status itu kenapa ya mas?

    1. Saya udah nyoba di local, Mas. Hasilnya keubah datanya kok. Coba Mas clone atau cek kode saya di Github atau cek update issue pada artikel ini. Barangkali ada yang beda.

    1. Tetap bisa, Mas. Tinggal panggil nama prosedurnya di query SQL. Pada CI4 masih banyak kemiripan dengan CI3 kok. Semangat.

  8. gan itu kan di migrate tbnya, klo langsung ngambil tb yang sudah ada gmna?

  9. Assalamualaikum

    saya punya case di bagian delete,
    status delete hanya menampilkan ” Deleted User successfully “, tidak bisa menampilkan ” Not Found “.

    mohon bantuannya.

    1. Wa’alaikum salam.

      Menampilkan Not Found itu cukup mudah mas.

      Intinya sebelum melakukan delete, kita cek dulu ada nggak data kategori berdasarkan id tersebut.

      Jika ada, maka lakukan hapus, jika tidak baru not found.

      Contoh kodenya:

      public function delete($id = NULL)
      {
          // cek data kategori berdasarkan id
          $data = $this->model->getCategory($id);
      
          if(empty($data)){ // jika data kosong atau tidak tersedia
              
              $code = 401;
              $msg = ['message' => 'Not Found'];
              $response = [
                  'status' => $code,
                  'error' => true,
                  'data' => $msg,
              ];
      
          } else { // jika data ditemukan
      
              $hapus = $this->model->deleteCategory($id);
              if($hapus){
                  $code = 200;
                  $msg = ['message' => 'Deleted category successfully'];
                  $response = [
                      'status' => $code,
                      'error' => false,
                      'data' => $msg,
                  ];
              } else {
                  $code = 401;
                  $msg = ['message' => 'Gagal Menghapus Data'];
                  $response = [
                      'status' => $code,
                      'error' => true,
                      'data' => $msg,
                  ];
              }
          }
          return $this->respond($response, $code);
      }

Leave a Reply

Your email address will not be published. Required fields are marked *

Jika terbantu dengan artikel ini, silahkan share, beri komentar dan "klik" 1 kali pada iklan ya.