Bekerja dengan RESTful dalam CodeIgniter : Part 2

Entah itu API yang baru saja Anda bangun atau layanan publik seperti Twitter, Anda pasti ingin bisa berinteraksi dengannya. Melihat layanan RESTful bekerja dengan permintaan HTTP dasar, sangat mudah melakukannya dengan sejumlah cara yang berbeda.

Baca Juga :  Membangun Aplikasi React dengan Laravel RESTful Back End

Masing-masing metode interaksi yang berbeda ini akan ditunjukkan dengan kode yang ditempatkan secara langsung dalam metode Controller. Ini murni sehingga demo lebih mudah dibaca dan biasanya akan ditempatkan di dalam model atau pustaka untuk pemisahan MVC yang benar.

Dengan menggunakan fungsi file_get_contents() PHP yang sederhana, Anda dapat melakukan permintaan GET dasar. Ini adalah metode yang paling mendasar dari semua metode namun perlu disebutkan untuk momen "quick and dirty".


1:  $user = json_decode(  
2:    file_get_contents('http://example.com/index.php/api/user/id/1/format/json')  
3:  );  
4:  echo $user->name;  


Perlu dicatat bahwa, sementara metode ini tidak akan bekerja menggunakan otentikasi HTTP Digest, jika Anda menggunakan otentikasi HTTP Basic, Anda dapat menggunakan sintaks berikut untuk mendapatkan data dari RESTful API yang dilindungi password Anda:

1:  $user = json_decode(  
2:    file_get_contents('http://admin:1234@example.com/index.php/api/user/id/1/format/json')  
3:  );  
4:  echo $user->name;  


Ada beberapa masalah dengan menggunakan metode ini: satu-satunya cara menetapkan header HTTP tambahan adalah dengan mengaturnya secara manual menggunakan fungsi PHP stream_context_create(), yang bisa sangat rumit bagi pengembang yang baru mengenal cara kerja internal permintaan HTTP. Kelemahan lainnya adalah Anda hanya menerima body dari respons HTTP dalam format aslinya, yang berarti Anda perlu menangani konversi dari permintaan tunggal.

cURL adalah cara paling fleksibel untuk berinteraksi dengan REST API karena dirancang untuk hal yang persis seperti ini. Anda dapat mengatur header HTTP, parameter HTTP dan banyak lagi. Berikut adalah contoh bagaimana cara memperbarui pengguna dengan example_api dan cURL kita untuk membuat permintaan POST:

1:  function native_curl($new_name, $new_email)  
2:  {  
3:    $username = 'admin';  
4:    $password = '1234';  
5:    // Alternative JSON version  
6:    // $url = 'http://twitter.com/statuses/update.json';  
7:    // Set up and execute the curl process  
8:    $curl_handle = curl_init();  
9:    curl_setopt($curl_handle, CURLOPT_URL, 'http://localhost/restserver/index.php/example_api/user/id/1/format/json');  
10:    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);  
11:    curl_setopt($curl_handle, CURLOPT_POST, 1);  
12:    curl_setopt($curl_handle, CURLOPT_POSTFIELDS, array(  
13:      'name' => $new_name,  
14:      'email' => $new_email  
15:    ));  
16:    // Optional, delete this line if your API is open  
17:    curl_setopt($curl_handle, CURLOPT_USERPWD, $username . ':' . $password);  
18:    $buffer = curl_exec($curl_handle);  
19:    curl_close($curl_handle);  
20:    $result = json_decode($buffer);  
21:    if(isset($result->status) && $result->status == 'success')  
22:    {  
23:      echo 'User has been updated.';  
24:    }  
25:    else  
26:    {  
27:      echo 'Something has gone wrong';  
28:    }  
29:  }  


Berinteraksi dengan API Anda dengan cara ini boleh-boleh saja, namun ada dua masalah dengan metode ini:
  1. Menggunakan sintaks yang jelek dan membingungkan - bayangkan membuat beberapa aplikasi berdasarkan itu.
  2. cURL tidak diinstal pada semua server secara default.
Untuk mengatasi sintaks yang elek ini, sebuah  cURL library telah dikembangkan untuk CodeIgniter yang menyederhanakan banyak hal.

Permintaan yang sama persis yang dibuat dengan library cURL akan terlihat seperti ini:


1:  function ci_curl($new_name, $new_email)  
2:  {  
3:    $username = 'admin';  
4:    $password = '1234';  
5:    $this->load->library('curl');  
6:    $this->curl->create('http://localhost/restserver/index.php/example_api/user/id/1/format/json');  
7:    // Optional, delete this line if your API is open  
8:    $this->curl->http_login($username, $password);  
9:    $this->curl->post(array(  
10:      'name' => $new_name,  
11:      'email' => $new_email  
12:    ));  
13:    $result = json_decode($this->curl->execute());  
14:    if(isset($result->status) && $result->status == 'success')  
15:    {  
16:      echo 'User has been updated.';  
17:    }  
18:    else  
19:    {  
20:      echo 'Something has gone wrong';  
21:    }  
22:  }  


Jauh lebih baik untuk melihatnya kan? Nah, ada metode yang lebih mudah lagi untuk bekerja dengan REST di aplikasi CodeIgniter Anda yang ini.

Sebuah REST client library telah dikembangkan yang berada di atas cURL library ini yang menangani konversi format, login HTTP dan beberapa aspek lain dari REST API Anda.

1:  function rest_client_example($id)  
2:  {  
3:    $this->load->library('rest', array(  
4:      'server' => 'http://localhost/restserver/index.php/example_api/',  
5:      'http_user' => 'admin',  
6:      'http_pass' => '1234',  
7:      'http_auth' => 'basic' // or 'digest'  
8:    ));  
9:    $user = $this->rest->get('user', array('id' => $id), 'json');  
10:    echo $user->name;  
11:  }  


Di sini Anda bisa melihat kita membuat permintaan GET, mengirim id sebagai parameter dan memberi tahu library bahwa kita ingin 'json' sebagai format kontennya. Ini menangani pengaturan Content-type untuk Anda, dan mengubah data menjadi objek PHP untuk Anda. Anda dapat mengubah nilai ini menjadi 'xml', 'json', 'serialize', 'php', 'csv' atau jenis MIME kustom yang Anda suka, misalnya:


1:  $user = $this->rest->get('user', array('id' => $id), 'application/json');  


Seperti yang mungkin Anda duga dan juga $this->rest->get(), library juga mendukung $this->rest->post(), $this->rest->put(), $this->rest->delete() untuk mencocokkan semua metode REST_Controller Anda.

Anda perlu hasil var_dump() yang berasal dari REST client library untuk memastikan Anda mendapatkan kembali format data yang benar. Konversi kadang-kadang akan menjadi array dan terkadang menjadi objek, tergantung bagaimana konversi oleh PHP. Jika jenis MIME yang dikembalikan tidak didukung maka hanya akan mengembalikan format sebagai teks biasa.

Dengan menggunakan REST library ini Anda bisa berbicara dengan layanan RESTful lainnya seperti Twitter dan Facebook. Berikut adalah contoh sederhana bagaimana Anda bisa mendapatkan detail untuk user tertentu berdasarkan ID mereka, dengan menggunakan format XML default Twitter.

Baca Juga : Grab Twitter User Data Menggunakan Python


1:  $this->load->library('rest', array('server' => 'http://twitter.com/'));  
2:  $user = $this->rest->get('users/show', array('screen_name' => 'philsturgeon'));  


1:  $this->load->library('rest', array(  
2:    'server' => 'http://twitter.com/',  
3:    'http_user' => 'username',  
4:    'http_pass' => 'password',  
5:    'http_auth' => 'basic'  
6:  ));  
7:  $user = $this->rest->post('statuses/update.json', array('status' => 'Using the REST client to do stuff'));  


Melihat ini, Anda akan melihat bahwa berinteraksi dengan API Twitter sedikit berbeda dalam beberapa cara.
  1. Mereka mendukung format berbasis URL yang berganti dalam bentuk .json bukannya /format/json. Beberapa memerlukan ekstensi, beberapa tidak; jadi yang terbaik adalah selalu menambahkannya.
  2. Mereka kebanyakan hanya mendukung GET/POST, namun mulai menambahkan lagi metode DELETE.
  3. Mereka tidak selalu hanya memiliki resource di URL mereka, misalnya: users/search adalah satu metode REST, namun lists adalah yang lainnya.
Awasi perbedaan ini karena mereka bisa menjebak Anda. Jika Anda terjebak, cukup echo $this->rest->debug() untuk keseluruhan rentang informasi tentang permintaan REST Anda.

Menggabungkan apa yang sekarang Anda ketahui tentang layanan RESTful, REST client library CodeIgniter dan dokumentasi API Twitter - atau dokumentasi RESTful API lain dalam hal ini - Anda dapat membuat beberapa aplikasi hebat yang terintegrasi dengan layanan web kustom atau publik menggunakan REST. Anda dapat memperpanjang API Anda dengan membuat lebih banyak REST_Controller dan bahkan membuat API modular dengan menggunakan Matchbox atau Modular Separation untuk membuat controller api.php untuk setiap modul agar membantu API Anda tetap tertata rapi sebagai aplikasi Anda.

Oke saya rasa cukup untuk Tutorial tentang  bagaimana Bekerja dengan RESTful dalam CodeIgniter kali ini .. jika ada pertanyaan silahkan bisa kalian ajukan dikolom komentar dibawah, and See You Next Time :)