Membuat RESTful API Method GET dengan Basic Authentication
Membuat RESTful API Method GET dengan Basic Authentication [docs/kuhomi.id].

Membuat RESTful API Method GET dengan Basic Authentication

Metode RESTful API adalah salah satu arsitektur yang umum digunakan oleh programmer sebagai media perantara pertukaran informasi dan data antara aplikasi, baik dalam platform yang sama maupun berbeda. Data yang dikirimkan melalui API ini terkadang data yang bukan untuk konsumsi publik. Maka dari itu, diperlukan proses authentikasi user yang request, dengan tujuan untuk membatasi akses user dan hanya user tertentu saja yang dapat mengakses data tersebut.

Ada beberapa metode yang dapat digunakan untuk proses authentikasi user untuk konsumsi API. Dari yang paling basic menggunakan username dan password, menggunakan token, dan/atau mungkin melakukan pengecekkan data user di database. 

Pada artikel kali ini, gua akan berbagi terlebih dahulu bagaimana cara menggunakan authentikasi API yang basic menggunakan username dan password.

Oke, sebelum lanjut ke proses koding, gua mau coba jelasin dulu batasan-batasan yang mungkin tidak dijelaskan pada artikel ini ya…

Batasan

  1. Menggunakan framework Codeigniter 3 serta MySQL untuk databasenya
  2. Untuk arsitektur RESTful API menggunakan Library codeigniter-restserver yang dikembangkan oleh Chriskaserguis yang diinstall melalui composer (pastikan kalian sudah install aplikasi composer di PC kalian dan asumsi gua, kalian sudah memahami mengenai composer ini ya). Untuk resource library ini bisa kalian akses repo git nya di sini
  3. Gua menggunakan vhost pada Windows saat running aplikasi RESTful ini. Jadi, gua saat running aplikasi RESTful ini di browser, tidak menggunakan localhost/folder_projek/controller/method melainkan gua menggunakan subdomain vhost dengan nama api.develop.id
  4. Dalam artikel ini, hanya membuat endpoint dengan method GET untuk mendapatkan list data dari database
  5. Database, table, table field dan data yang digunakan hanya data dummy. Silahkan nanti kalian sesuaikan dengan studi kasus kalian ya..

Lanjut, silahkan buat database pada lokal server kalian. Silahkan buat table baru dengan nama table ‘buku’ dan isikan data dummy nya. Atau supaya lebih cepat, jalankan syntax SQL dibawah ini di dalam database kalian.

CREATE TABLE `buku` (
  `id` int(11) NOT NULL,
  `judul` varchar(255) NOT NULL,
  `penulis` varchar(200) NOT NULL,
  `penerbit` varchar(200) NOT NULL,
  `tgl_terbit` date NOT NULL,
  `jml_halaman` int(11) DEFAULT NULL,
  `isbn` varchar(100) DEFAULT NULL,
  `tgl_ditambahkan` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
--
-- Dumping data for table `buku`
--
 
INSERT INTO `buku` (`id`, `judul`, `penulis`, `penerbit`, `tgl_terbit`, `jml_halaman`, `isbn`, `tgl_ditambahkan`) VALUES
(2, 'Pemrograman Scratch untuk Pemula', 'Ani Ismayani', 'Elex Media Komputindo', '2023-02-16', 224, '9786230046094', '2023-02-18 00:00:00'),
(3, 'Pengolahan Sinyal Digital', 'DR. IR. SUWADI, M.T.', 'Pt. Refika Aditama', '2021-01-25', 216, '9786237060772', '2023-02-20 00:00:00'),
(4, 'Mudah Membuat Game Dan Animasi Dengan Visual C# .NET, From Beginner To Master', 'Vivian Siahaan & R.H. Sianipar', 'Penerbit Andi', '2023-02-22', 578, '9786230131233', '2023-02-25 00:00:00');

Jika database sudah siap, silahkan download framework Codeigniter 3 di website resminya. Disini gua menggunakan versi terbaru dari Codeigniter 3. Silahkan lakukan config dasar Codeigniter 3 sampai folder projek Codeigniter tersebut bisa diakses melalui browser.

Jika sudah bisa diakses lewat browser, buka file composer.json yang ada didalam projek Codeigniter 3 kalian, misal nama projeknya “api.dev”, berarti file composer.json ada di api.dev/composer.json. Pada tahap ini, kita akan mencoba download package codeigniter-restserver melalui composer. Silahkan tambahkan "chriskacerguis/codeigniter-restserver": "^3.1" (pakai tanda kutip) pada bagian require. Atau silahkan copas syntax ini ke file composer.json kalian.

{
	"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": "^3.1"
	},
	"suggest": {
		"paragonie/random_compat": "Provides better randomness in PHP 5.x"
	},
	"scripts": {
		"test:coverage": [
			"@putenv XDEBUG_MODE=coverage",
			"phpunit --color=always --coverage-text --configuration tests/travis/sqlite.phpunit.xml"
		],
		"post-install-cmd": [
			"sed -i s/name{0}/name[0]/ vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStream.php"
		],
		"post-update-cmd": [
			"sed -i s/name{0}/name[0]/ vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStream.php"
		]
	}
}

Lalu, jalankan command “composer update” dan tunggu sampai proses download package selesai.

Selanjutnya, buka file /aplication/config/config.php projek Codeigniter 3 kalian, cari bagian $config['composer_autoload'] = ’’;, lalu ubah menjadi $config['composer_autoload'] = FCPATH . 'vendor/autoload.php';

Jika sudah, copy file /vendor/chriskacerguis/codeigniter-restserver/src/rest.php ke dalam folder /application/config/ pada folder projek kalian. Lalu, buka file rest.php yang ada di folder /application/config. Cari konfigurasi “$config['rest_auth']”. Lalu ubah valuenya menjadi “basic”. Konfigurasi ini berfungsi untuk mengaktifkan proses authentikasi basic pada API yang kita buat.

Config Basic Auth RESTful API 

Lalu, masih di file rest.php, silahkan scroll lagi kebawah dan cari konfigurasi “$config['rest_valid_logins']”. Secara default, value nya itu adalah ['admin' => '1234']. Artinya, username nya ‘admin’ dan passwordnya ‘1234’. Silahkan ubah username dan password sesuai keinginan Anda. Sebagai contoh menjadi ['kuhomi' => 'kuhomi123'].

Config Username dan Password Basic Auth RESTful API 

Selanjutnya, kita coba untuk membuat file controllers “Book”. Didalam file controller ini, kita akan coba buat fungsi method GET untuk mendapatkan list data buku.
atau bisa juga copykan kodingan satu file controllers ini dan paste/replace ke file controllers kalian.

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

//perbedaan 1: inisialisasi class RestController 
use chriskacerguis\RestServer\RestController;

class Book extends RestController {

    function __construct()
    {
        // Construct the parent class
        parent::__construct();
        // Load model
        $this->load->model('book_model');
    }

    public function list_get()
    {
        //START : get parameter offset dan limit
        //default offset=0 dan limit=10
        if (!$this->input->get('limit'))
        {
            $limit = 10;
        }else{
            $limit = $this->input->get('limit');
        }

        if (!$this->input->get('offset'))
        {
            $offset = 0;
        }else{
            $offset = $this->input->get('offset');
        }
        //END : get parameter

        //memanggil method get_data di class model untuk query data
        $res = $this->book_model->get_data($limit, $offset);

        if($res)
        {
            $this->set_response($res, RestController::HTTP_OK); // SUCCESS GET DATA (201)
            return;
        }else{
            $this->set_response(array(
                'status' => FALSE,
                'message' => 'Maaf, tidak ada data yang sesuai'
            ), RestController::HTTP_OK); // REQUEST SUCCESS BUT FAILED TO GET DATA (200)
            return;
        }
    }
}

Disini gua menamakan file atau class controller nya yaitu “Book”. Sebenarnya, ini bebas ya jadi silahkan disesuaikan saja.

Selanjutnya kita buat class models. Disini gua coba memberikan nama class model ini dengan nama “Book_model”. Class model ini berfungsi untuk melakukan koneksi ke database dan mengambil data ke database berdasarkan query yang kita buat.

Atau silahkan copy-kan keseluruhan kodingan class model dibawah ini

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
 
class Book_model extends CI_Model{

    function __construct(){
        parent::__construct();
        $this->db = $this->load->database('default',TRUE);
    }

    function get_data($limit=10, $offset=0)
    {
        //query select column and table
        $this->db->select('*')
                 ->from('buku')
                 ->limit($limit,$offset)
                 ->order_by('id', 'DESC');
      
        //query get data from DB
        $query = $this->db->get();
        $data['result'] = $query->result_array();
      
        //query for count data according parameter
        $this->db->select('*')
                 ->from('buku');

        //query get data from DB
        $query = $this->db->get();
        $data['total_data'] = $query->num_rows();

        //return data to controller  
        return $data;
    }

}

Untuk pengujian, disini gua menggunakan aplikasi POSTMAN. Silahkan ketikkan endpoint atau URL API-nya, disini karena gua pakai vhost, maka endpointnya menjadi http://api.develop.id/book/list, dan tipe method nya GET. Pada bagian tab “Authorization”, silahkan “Basic Auth”, lalu ketikkan username dan password yang telah kita definisikan pada file rest.php. 

Jika sudah, klik tombol SEND untuk mengirimkan request. Dan lihat return API yang diberikan. Jika berhasil, return nya akan seperti ini.

Test RESTful API dengan Basic Auth

Artikel Terkait