Tutorial Membuat API dengan JWT dan Codeigniter - informatika tik

Breaking

Post Top Ad

Responsive Ads Here

Post Top Ad

Responsive Ads Here

Kamis, 03 Agustus 2017

Tutorial Membuat API dengan JWT dan Codeigniter

Tutorial Membuat API dengan JWT dan Codeigniter


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.
Tutorial Membuat REST API dengan Codeigniter dan JWT
Download semua yang diperlukan
·         Framework Codeigniter 3.1.5 (https://codeigniter.com/download)
·         Library PHP-JWT  (https://github.com/firebase/php-jwt)
·         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

 
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.



Tidak ada komentar:

Posting Komentar

Post Top Ad

Responsive Ads Here