Bekerja dengan RESTful dalam CodeIgniter : Part 1



CodeIgniter menjadi terkenal karena kekuatannya sebagai framework aplikasi web berbasis PHP, namun tidak jarang kita melihat contoh penggunaannya untuk hal lain. Hari ini kita akan belajar bagaimana kita bisa menggunakan CodeIgniter untuk membuat RESTful API untuk aplikasi web Anda yang sudah ada, dan menunjukkan bagaimana berinteraksi dengan API Anda sendiri atau layanan web RESTful lainnya, seperti Facebook dan Twitter.

Yang akan kita gunakan dalam tutorial kali ini, yaitu Program: CodeIgniter, server REST CodeIgniter dan klien REST CodeIgniter

 
Jika Anda telah mengikuti seri CodeIgniter  di Blog MATA PANDA ini, Anda akan tahu sekarang bahwa ini relatif cepat dan mudah untuk membuat simple web applications, seperti blog, sistem CMS, situs brosur, dll. Satu hal yang mungkin tidak Anda pikirkan adalah menggunakan CodeIgniter untuk membuat API interaktif. Setelah mencoba beberapa implementasi REST yang ada, saya menemukan bahwa mereka tidak hanya kekurangan kesederhanaan namun kehilangan sebagian besar fitur yang Anda harapkan dari implementasi RESTful; jadi saya membangunnya sendiri. Tutorial ini akan menunjukkan cara menggunakan kode ini untuk menyiapkan REST API Anda, dan memberikan contoh bagaimana cara berinteraksi dengannya dari aplikasi web Anda.

Baca Juga : Pengenalan Codeigniter

  1. Anda memiliki server web yang sudah siap, lokal atau online dan mengetahui bagaimana mengelola file di dalamnya.
  2. Anda telah membaca beberapa tutorial CodeIgniter
l.
  • Anda tahu cara mengatur CodeIgniter.
  • Anda tahu sedikit tentang RESTful.

  • Baca Juga : Cara Installasi dan Konfigurasi Codeigniter

    Tutorial ini dibagi menjadi dua bagian. Kita akan mulai dengan mempelajari bagaimana membuat layanan RESTful, kemudian melanjutkan, kita akan belajar bagaimana berinteraksi dengannya dalam beberapa cara yang berbeda.

    Pertama, Anda perlu mendownload kode codeigniter-restserver dari GitHub dan mengekstraknya dan memindahkan kode ke server Anda.

    Baca Juga : Membangun Aplikasi React dengan Laravel RESTful Back End

    Ketika Anda membuka folder tersebut, Anda akan melihat seluruh instalasi CodeIgniter, yang berada disana untuk menjalankan demonya. Ini memungkinkan orang bermain dengan demo REST sebelum mengintegrasikannya dengan aplikasi yang ada.

    Buka "application/config/config.php" dan tetapkan base_url agar link bekerja. Base_url ini akan berbeda pada semua orang dan sepenuhnya bergantung di mana Anda mengupload file Anda.



    Dengan file yang diekstrak dan base_url sudah ditetapkan, kita siap untuk memuat instalasi RESTful CodeIgniter, dan melihat demo yang disertakan dengannya. Jelajahi URL dasar, yang secara default adalah:
    http://localhost/restserver
    Di sini Anda akan menemukan beberapa contoh link ke controller example_api, yang dapat ditemukan di "application/controllers/example_api.php". Mari kita membedah URL dari contoh-contoh ini untuk melihat apa yang sedang terjadi. URL pertama adalah URL yang sangat sederhana.



    URL ini terlihat sangat mirip dengan URL CodeIgniter lainnya dengan controller dan metode, namun Anda akan melihat di diagram ini bahwa metodenya diberi nama "Resource". REST adalah semuanya tentang Resource dan mereka pada dasarnya adalah kata benda dalam aplikasi Anda, yang berinteraksi dengan (yaitu added, deleted, edited, queried) berdasarkan header HTTP dan string query URL atau argumen HTTP.

    Format default untuk output adalah XML yang merupakan apa yang kita lihat dalam contoh dasar ini. Link lainnya sedikit lebih besar dan menunjukkan bagaimana cara melewatkan parameter dan bagaimana menunjukkan format output dapat dimodifikasi di URL:




    Biasanya di CodeIgniter, Anda hanya melewatkan nilai parameter, namun controller REST menerima sejumlah parameter dalam urutan apapun. Agar bisa bekerja, kita harus melewatkan nama dari parameter yang diikuti dengan value berpasangan.

    Di akhir URL adalah parameter "format". Ini adalah  reserved parameter yang akan memodifikasi format output dari data yang diminta seperti:




    Dengan memberikan pilihan format data yang akan digunakan kepada pengembang API dan aplikasi klien, API dibuka untuk audiens yang jauh lebih luas dan dapat digunakan dengan lebih banyak bahasa dan sistem pemrograman. Ketiganya bukanlah satu-satunya format yang didukung, di luar kotaknya REST API Anda dapat digunakan:

    • xml - hampir semua bahasa pemrograman bisa membaca XML
    • json - berguna untuk JavaScript dan semakin banyak pada aplikasi PHP.
    • csv - dibuka dengan program spreadsheet
    • html - tabel HTML sederhana
    • php - Representasi kode PHP yang bisa di-eval()
    • serialize - Data terstruktur yang dapat dipilah dalam PHP
    Meskipun menambahkan format ke URL secara teknis bukanlah cara kebanyakan RESTful untuk mengubah format, namun memungkinkan pengujian browser yang mudah dan memungkinkan pengembang melakukan permintaan GET sederhana pada API tanpa cURL. Cara kebanyakan RESTful adalah mengirim header HTTP Content-type ke controller REST menggunakan cURL, namun akan dijelaskan nanti.

    Sekarang jika Anda membuka application/controllers/example_api.php Anda akan segera menemukan beberapa perbedaan dari controller CodeIgniter normal.

    Dalam pola MVC, sebuah controller adalah titik pusat logika. Ini dipanggil ketika pengguna membuat permintaan dan kemudian berdasarkan logika di controller itu mengambil data dan output dilihat. CodeIgniter berisi logikanya sendiri agar bagaimana Controller bekerja, tapi karena kita melakukan sesuatu yang berbeda, kita memerlukan library REST_Controller kita sendiri untuk mengandung logika terkait REST sendiri. Jadi, bukannya hanya menggunakan:


    1:  <?php  
    2:  class Example_api extends Controller {  
    3:  }  
    

    ...Anda akan perlu menggunakan:

    1:  <?php  
    2:  require(APPPATH'.libraries/REST_Controller.php');  
    3:  class Example_api extends REST_Controller {  
    4:  }  
    

    Sekarang controller kosong Anda sudah diatur, berikutnya adalah metode atau "resource". Ini mungkin adalah bagian tutorial yang paling membingungkan jika Anda terbiasa dengan cara kerja CodeIgniter. Pada dasarnya, Anda mengambil kata kerja Resource dan HTTP dan menggabungkannya untuk membuat nama metode. Jadi dua contoh yang kita lihat sebelumnya memiliki Resource pengguna user dan users. Karena keduanya dimuat di browser, kita tahu itu menggunakan permintaan GET dan dua metode di bawah ini digunakan:

    1:  <?php  
    2:  require(APPPATH'.libraries/REST_Controller.php');  
    3:  class Example_api extends REST_Controller {  
    4:    function user_get()  
    5:    {  
    6:    // respond with information about a user  
    7:    }  
    8:    function users_get()  
    9:    {  
    10:      // respond with information about several users  
    11:    }  
    12:  }  
    

    Ini mungkin tampak sedikit aneh, namun memberi Anda kemampuan untuk menggunakan URL yang sama dan menanggapi permintaan tersebut tergantung pada kata kerja HTTP yang telah digunakan. Jika seseorang mencoba mengakses API Anda dengan cara yang tidak diizinkan (dalam contoh ini PUT atau DELETE), itu akan meresponnya dengan 404 saja. Jika Anda tidak yakin tentang kata kerja HTTP, mari saya jelaskan.

    Digunakan untuk mengambil informasi tentang resource yang ada. Ini digunakan oleh browser saat Anda memasukkan URL dan menekan go, atau saat Anda mengklik link, jadi sangat cocok untuk mengambil informasi tentang salah satu resource REST Anda (seperti pengguna).

    Digunakan untuk memperbarui resource yang ada dengan informasi. Browser menggunakan ini untuk mengirimkan sebagian besar jenis form di internet, walaupun beberapa menggunakan GET juga dengan mengirimkan form dengan string query yang berisi data dari field.

    Yang kurang umum digunakan dan tidak didukung oleh sebagian besar browser, PUT biasanya digunakan untuk membuat resource baru.

    Juga tidak digunakan oleh banyak browser, kata kerja HTTP ini agak jelas digunakan untuk menghapus resource.

    Jika kita memasukkannya ke dalam kode dan mengijinkan setiap kata kerja pada resource user akan terlihat seperti ini:

    1:  <?php  
    2:  require(APPPATH'.libraries/REST_Controller.php');  
    3:  class Example_api extends REST_Controller {  
    4:    function user_get()  
    5:    {  
    6:      // respond with information about a user  
    7:    }  
    8:    function user_put()  
    9:    {  
    10:      // create a new user and respond with a status/errors  
    11:    }  
    12:    function user_post()  
    13:    {  
    14:      // update an existing user and respond with a status/errors  
    15:    }  
    16:    function user_delete()  
    17:    {  
    18:      // delete a user and respond with a status/errors  
    19:    }  
    20:  }  
    

    Jadi sekarang API telah diberi strukturnya dengan menetapkan resource dan menentukan metode untuk setiap kata kerja HTTP yang ingin kita dukung; kita membutuhkan parameter sehingga kita bisa menggunakan model dan library CodeIgniter kita. Inilah salah satu manfaat utama penggunaan CodeIgniter untuk API kita, karena kita dapat menggunakan model dan library kita yang ada dan tidak perlu me re-code mereka.

    1:  <?php  
    2:  require(APPPATH'.libraries/REST_Controller.php');  
    3:  class Example_api extends REST_Controller {  
    4:    function user_get()  
    5:    {  
    6:      $data = array('returned: '. $this->get('id'));  
    7:      $this->response($data);  
    8:    }  
    9:    function user_post()  
    10:    {      
    11:      $data = array('returned: '. $this->post('id'));  
    12:      $this->response($data);  
    13:    }  
    14:    function user_put()  
    15:    {      
    16:      $data = array('returned: '. $this->put('id'));  
    17:      $this->response($data;  
    18:    }  
    19:    function user_delete()  
    20:    {  
    21:      $data = array('returned: '. $this->delete('id'));  
    22:      $this->response($data);  
    23:    }  
    24:  }  
    

    Contoh ini berisi lima potongan kode baru:

    Digunakan untuk mengembalikan variabel GET baik dari string query seperti index.php/ example_api/user?id=1 ini atau bisa di atur dengan cara lebih CodeIgniter dengan index.php/example_api/user/id/1.

    Adalah alias untuk $this->input->post() yang merupakan metode CodeIgniter untuk mengakses variabel $_POST dengan perlindungan XSS.

    Membaca argumen PUT yang ada di header HTTP atau melalui cURL.

    Anda bisa menebaknya, ini membaca dalam argumen DELETE, juga ditetapkan di header HTTP atau melalui cURL.

    Mengirim data ke browser dalam format data mana pun yang diminta, atau defaultnya adalah XML. Anda dapat secara opsional melewatkan kode status HTTP agar menunjukkan apakah berhasil atau gagal. Misalnya jika ID yang diberikan tidak ada dalam database, Anda bisa menggunakan $this->response(array('error' => 'User not found.'), 404);


    Sampai sekarang, kita sudah bekerja dengan contoh API pada instalasi bersih. Jadi langkah selanjutnya adalah menjalankan REST API yang berjalan dari basis kode yang ada.




    Meskipun file yang kita download tadi dilengkapi dengan instalasi CodeIgniter lengkap untuk demo dan untuk memungkinkan API dibangun dari nol, hanya dua file penting adalah:
    1. application/config/rest.php
    2. application/libraries/REST_Controller.php
    Letakkan kedua file tersebut ke dalam aplikasi CodeIgniter Anda dan buatlah controller API baru.

    1:  <?php  
    2:  require(APPPATH.'/libraries/REST_Controller.php');  
    3:  class Api extends REST_Controller  
    4:  {  
    5:    function user_get()  
    6:    {  
    7:      if(!$this->get('id'))  
    8:      {  
    9:        $this->response(NULL, 400);  
    10:      }  
    11:      $user = $this->user_model->get( $this->get('id') );  
    12:      if($user)  
    13:      {  
    14:        $this->response($user, 200); // 200 being the HTTP response code  
    15:      }  
    16:      else  
    17:      {  
    18:        $this->response(NULL, 404);  
    19:      }  
    20:    }  
    21:    function user_post()  
    22:    {  
    23:      $result = $this->user_model->update( $this->post('id'), array(  
    24:        'name' => $this->post('name'),  
    25:        'email' => $this->post('email')  
    26:      ));  
    27:      if($result === FALSE)  
    28:      {  
    29:        $this->response(array('status' => 'failed'));  
    30:      }  
    31:      else  
    32:      {  
    33:        $this->response(array('status' => 'success'));  
    34:      }  
    35:    }  
    36:    function users_get()  
    37:    {  
    38:      $users = $this->user_model->get_all();  
    39:      if($users)  
    40:      {  
    41:        $this->response($users, 200);  
    42:      }  
    43:      else  
    44:      {  
    45:        $this->response(NULL, 404);  
    46:      }  
    47:    }  
    48:  }  
    49:  ?>  
    

    Ini menunjukkan contoh API dengan beberapa nama model generik. Pada metode pertama, kita mengambil sebuah ?id=XX dan menyampaikannya ke model. Jika data ditemukan, kita mengirimkannya ke fungsi $this->response() dengan status 200. Jika tidak ada yang ditemukan, mengembalikan bukan body dan 404 mengatakan tidak ada yang ditemukan. Anda bisa membayangkan bagaimana hal ini dapat diperluas untuk menjalankan semua jenis aktivitas API untuk aplikasi web Anda.

    Sekarang API Anda dibangun yang perlu pengamanan sehingga hanya pengguna yang diberikan akses yang dapat berinteraksi dengan API. Untuk mengatur jenis login, nama pengguna dan kata sandi, bukalah "application/config/rest.php" di dalam basis kode Anda.

    1:  /*  
    2:  |--------------------------------------------------------------------------  
    3:  | REST Login  
    4:  |--------------------------------------------------------------------------  
    5:  |  
    6:  | Is login required and if so, which type of login?  
    7:  |  
    8:  |  '' = no login required, 'basic' = relatively secure login, 'digest' = secure login  
    9:  |  
    10:  */  
    11:  $config['rest_auth'] = 'basic';  
    

    Siapa pun dapat berinteraksi dengan salah satu dari controller API Anda.

    Metode login yang relatif tidak aman yang seharusnya hanya digunakan pada jaringan internal/aman.

    Metode login yang jauh lebih aman yang mengenkripsi usernames and password. Jika Anda ingin memiliki API terlindungi yang bisa digunakan siapa saja, gunakan digest.


    1:  *  
    2:  |--------------------------------------------------------------------------  
    3:  | REST Login usernames  
    4:  |--------------------------------------------------------------------------  
    5:  |  
    6:  | Array of usernames and passwords for login  
    7:  |  
    8:  |  array('admin' => '1234')  
    9:  |  
    10:  */  
    11:  $config['rest_valid_logins'] = array('admin' => '1234');  
    


    Menyiapkan pengguna sangat sederhana. Setiap login adalah item array, dengan kunci dan nilai. Kuncinya adalah username dan nilainya adalah password. Tambahkan sebanyak yang Anda suka ke array ini dan sajikan mereka untuk siapa saja yang akan menggunakan API.

    Oke mungkin sampai disini dulu tutorial tentang  Bekerja dengan RESTful dalam CodeIgniter, akan kita lanjutkan kembali di Part 2 nanti, See You Next Time  :)