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.
Web service adalah standar yang digunakan untuk melakukan
pertukaran data antar aplikasi atau sistem, karena aplikasi yang melakukan
pertukaran data bisa ditulis dengan bahasa pemrograman yang berbeda atau
berjalan pada platform yang berbeda. Contoh implementasi dari web service
antara lain adalah SOAP dan REST.
Pada kali ini saya akan memberikan sedikit tutorial mengenai
“Cara membuat REST API dengan Codeigniter dan JWT (Json Web Token), bahan-bahan
yang diperlukan adalah sebagai berikut:
Membuat dan Konfigurasi Codeigniter
Unduh semua file yang digunakan lalu gabungkan file Codeigniter
dengan Library Rest Server dalam satu folder.
Kemudian, install php-jwt
menggunakan composer
dengan cara klik kanan pada folder project codeigniter yang
dibuat tadi lalu Open Command Window Here
, atau
buka cmd dan ketik seperti gambar dibawah ini.
composer require firebase/php-jwt
Hubungkan codeigniter dengan database yang
sudah anda sediakan lalu ubah konfigurasi database pada application/config/database.php.
Buat file Rest.php didalam folder controller
dan salin baris kode berikut ini:
Rest.php
defined('BASEPATH') OR exit('No direct script access
allowed');
require APPPATH . '../vendor/autoload.php';
require APPPATH . '/libraries/REST_Controller.php';
use \Firebase\JWT\JWT;
class Rest extends REST_Controller {
private $secretkey
= 'kode_rahasia_kamu'; //ubah dengan kode rahasia apapun
public function
__construct(){
parent::__construct();
$this->load->library('form_validation');
}
// method untuk
melihat token pada user
public function
generate_post(){
$this->load->model('loginmodel');
$date = new
DateTime();
$username =
$this->post('username',TRUE); //ini adalah kolom username pada database yang
saya berinama username.
$pass =
$this->post('password',TRUE); //ini adalah kolom password pada database yang
saya berinama password.
$dataadmin =
$this->loginmodel->is_valid($username);
if
($dataadmin) {
if
(password_verify($pass,$dataadmin->password)) {
$payload['id'] = $dataadmin->id_user;
$payload['username'] = $dataadmin->username;
$payload['iat'] = $date->getTimestamp(); //waktu di buat
$payload['exp'] = $date->getTimestamp() + 3600; //satu jam
$output['token'] = JWT::encode($payload,$this->secretkey);
return
$this->response($output,REST_Controller::HTTP_OK);
} else {
$this->viewtokenfail($username);
}
} else {
$this->viewtokenfail($username);
}
}
// method untuk
jika generate token diatas salah
public function
viewtokenfail($username){
$this->response([
'status'=>FALSE,
'username'=>$username,
'message'=>'Invalid!'
],REST_Controller::HTTP_BAD_REQUEST);
}
// method untuk
mengecek token setiap melakukan post, put, etc
public function
cektoken(){
$this->load->model('loginmodel');
$jwt =
$this->input->get_request_header('Authorization');
try {
$decode =
JWT::decode($jwt,$this->secretkey,array('HS256'));
if
($this->loginmodel->is_valid_num($decode-> username)>0) {
return
true;
}
} catch
(Exception $e) {
exit('Wrong Token');
}
}
}
?>
Buat file Api.php didalam folder controller dan
salin baris kode berikut:
Api.php
defined('BASEPATH') OR exit('No direct script access
allowed');
require APPPATH . 'controllers/Rest.php';
class api extends Rest {
function
__construct($config = 'rest') {
parent::__construct($config);
$this->load->database();
$this->cektoken();
}
/* index page */
function
index_get($table = '', $id = '') {
if ($table ==
'') {
redirect(base_url());
} else {
$get_id =
'id_'.$table;
if ($id ==
'') {
// baseurl/?table=nama_table (semua data)
$data
= $this->db->get($table)->result();
} else {
//
baseurl/?table=nama_table&id=id (satu data)
$this->db->where($get_id, $id);
$data
= $this->db->get($table)->result();
}
$this->response($data, 200);
}
}
function
index_post($table = '') { // baseurl/?table=nama_table
$insert =
$this->db->insert($table, $this->post());
$id =
$this->db->insert_id();
if ($insert) {
$response
= array(
'data'
=> $this->post(),
'table' => $table,
'id'
=> $id,
'status' => 'success'
);
$this->response($response,
200);
} else {
$this->response(array('status' => 'fail', 502));
}
}
function
index_put($table = '', $id = '') { // baseurl/nama_table/id
$get_id =
'id_'.$table;
$this->db->where($get_id, $id);
$update =
$this->db->update($table, $this->put());
if ($update) {
$response
= array(
'data'
=> $this->put(),
'table' => $table,
'id'
=> $id,
'status' => 'success'
);
$this->response($response, 200);
} else {
$this->response(array('status' => 'fail', 502));
}
}
function
index_delete($table = '', $id = '') {
$get_id =
'id_'.$table;
$this->db->where($get_id, $id);
$delete =
$this->db->delete($table);
if ($delete) {
$response
= array(
'table' => $table,
'id'
=> $id,
'status' => 'success'
);
$this->response($response, 201);
} else {
$this->response(array('status' => 'fail', 502));
}
}
}
?>
Buat file Loginmodel.php pada folder models dan
salin baris code berikut
Loginmodel.php
defined('BASEPATH') OR exit('No direct script access
allowed');
class Loginmodel extends CI_Model{
public function
__construct()
{
parent::__construct();
$this->load->database();
}
public function
is_valid($username){
$this->db->select('*');
$this->db->from('user_fadil');
$this->db->where('username',$username);
$query =
$this->db->get();
return
$query->row();
}
public function
is_valid_num($username){
$this->db->select('*');
$this->db->from('user_fadil');
$this->db->where('username',$username);
$query =
$this->db->get();
return
$query->num_rows();
}
}
Uji coba REST API dengan Postman
Disini saya akan menguji cobanya dengan Postman.
Generate token
Salin
token lalu ke Headers dan tambahkan headers Authentication lalu isikan valuenya
dengan token yang anda salin tadi.
Method GET dengan authentication header
Method POST
Method PUT
Method DELETE