Pengertian
Rest API
RESTful
API / REST API merupakan implementasi dari API (Application Programming
Interface). REST (Representional State Transfer) adalah suatu arsitektur metode
komunikasi yang menggunakan protokol HTTP untuk pertukaran data dan metode ini
sering diterapkan dalam pengembangan aplikasi. Dimana tujuannya adalah untuk
menjadikan sistem yang memiliki performa yang baik, cepat dan mudah untuk di
kembangkan (scale) terutama dalam pertukaran dan komunikasi data.
Membuat
Database
Tutorial
Membuat REST API dengan Codeigniter dan JWT
Download
semua yang diperlukan
·
Framework Codeigniter 3.1.5 (https://codeigniter.com/download)
·
Library REST Server (https://github.com/chriskacerguis/codeigniter-restserver)
Satukan
file Codeigniter dengan Library Rest Server, lalu install PHP JWT dengan
composer didalam folder ci kamu dengan cara “composer require
firebase/php-jwt” tanpa tanda kutip atau bisa lihat gambar dibawah ini.
Lalu buat file bernama Rest.php didalam folder controller
<?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');
}
}
}
?>
Lalu buat
file Api.php di folder controller
<?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));
}
}
}
?>
Dan terakhir
buat file Loginmodel.php di folder models
<?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');
$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');
$this->db->where('username',$username);
$query = $this->db->get();
return $query->num_rows();
}
}
Setelah
ketiganya telah dibuat lakukan konfigurasi database di config/database.php
Lakukan test
dengan menggunakan postman.
Dan lakukan
login dengan username password di index.php/rest/generate
Salin token
yang muncul lalu pasti di bagian header dan tambahkan authentication dengan
value token yang kamu salin tadi.