REST dan HTTP sangat erat kaitannya. Ketika kita ingin membuat sebuat REST Server pasti kita akan menggunakan protokol HTTP. Sebelumnya mari kita tinjau pengertiannya.
Representational State Transfer (REST) is a software architectural style that defines a set of constraints to be used for creating Web services
REST API bisa dibilang merupakan Gaya arsitektural perangkat lunak yang di dalamnya mendefinisikan aturan-aturan untuk membuat web service.
Kita ambil contoh aplikasi yang umum digunakan di Indonesia, misal Traveloka. Kalau temen-temen pernah pesan tiket pesawat, tiket kereta, kamar hotel melalui traveloka pasti tau. Misal kita pesan tiket Air Asia di Traveloka, padahal Traveloka tidak punya Pesawat ya? dan padahal juga Air Asia sendiri punya aplikasi untuk pemesanan tiket kan?
Apakah Traveloka langsung mengakses database Air Asia? Tentu tidak ya. Karena Air Asia menyediakan API yang dapat diakses oleh pihak lain.
Lalu untuk apa Maskapai Penerbangan yang notabene sudah memiliki aplikasi sendiri malah membuat dan menyediakan API untuk diakses oleh pihak lain, Traveloka misalnya? Apakah semata untuk kemudahan? atau untuk uang? hehe. Bisa dijawab sendiri ya.
Pada video di atas dijelaskan bagaimana API bekerja. Dianalogikan dengan pemesanan makanan di restoran.
- Customer → Client
- Waiter → API, sebagai jalur penghubung kita sebagai Customer dan dapur yang membuat makanan yang kita pesan
- Menu → REST API, jadi aturan-aturan pemesanannya ada di menu. Kenapa ada menu? tentu saja agar customer bisa mengetahui apa yang bisa dipesan, dan tidak bisa memesan selain yang ada di menu walaupun memungkinkan. Misalnya ketika kita ada di Solaria, kita pesan ayam bakar, memungkinkan tidak? sangant memungkinkan karena Solaria punya stok ayam mentah yang bisa dibakar kapan saja, tapi kita tidak bisa pesan ayam bakar karena tidak tersedia di menu.
- Ada request dan response dengan data yang dikirim dan diterima berupa JSON
REST API
- REpresentational State Transfer
- Gaya perancangan / Architectural Style
- Stateless
- Karya dari Roy Fielding, pada disertasi PhD-nya
- Menggunakan protokol HTTP
- Memungkinkan interaksi mesin dengan mesin
The Hypertext Transfer Protocol (HTTP) is an application protocol for distributed, collaborative, hypermedia information systems
HTTP adalah protokol yang memungkinkan kita mengakses google, facebook, friendster, bukalapak, dan lain-lain.
Ketika kita ketik “facebook.com” di browser kemudian enter maka terbukalah halaman Facebook, lalu apa sih yang sebenarnya terjadi di balik layar?
Jadi yang kita ketik itu adalah yang disebut URL (Uniform Resource Locator), yaitu alamat yang digunakakan untuk mengakses sebuah resource menggunakan internet. Yang dimaksud dengan resource bisa berupa halaman html, script, css, maupun gambar.
Jadi ketika kita akses “facebook.com” yang sebenarnya kita akses adalah file index.php, yaitu lengkapnya https://www.facebook.com/index.php. Namun kita jarang menuliskan hingga ke nama filenya. Nama file index ini adalah default walaupun nanti perilaku default ini bisa diubah misal menggunakan mod_rewrite
atau .htaccess
. Intinya yang kita akses adalah sebuar resource.
Request yang dikirim menggunakan method GET. Kemudian user menerima respon berupa HTML, kenapa HTML? Karena yang minta manusia, manusia butuh text, gambar, warna, sesuatu yang menarik dan interaktif.
Kemudian ketika misalnya kita memposting sesuatu di Facebook misalnya, maka request yang kita kirim menggunakan method POST.
Contoh-contoh di atas adalah proses ketika kita manusia mengakses website secara umum. Sekarang kita persempit lagi dengan kasus misalnya Pengelolan Data Mahasiswa dengan codeigniter.
Lalu bagaimana dengan REST API?
Gambar di atas adalah aplikasi yang biasa, ada kita sebagai User yang mengakses ke web server.
Karena kita ingin mengakses REST API pasti ada suatu tempat di luar sana REST Servernya.
Kemudian Server akan mengirimkan request dan mengubah data menjadi JSON ke REST Server. Selanjutnya Server akan menerima respon berupa JSON beserta kode status.
Reference: https://youtu.be/dtpm5wwXEIY, https://en.wikipedia.org/wiki/Representational_state_transfer, https://youtu.be/s7wmiS2mSXY, https://www.ics.uci.edu/~fielding/pubs/dissertation/fielding_dissertation.pdf