Membedah RESTful API: Bahasa Universal Pengembang Web
Halo sobat Jurnal Coding! Pernahkah kalian membayangkan bagaimana aplikasi transportasi *online* di HP Android kalian bisa menampilkan data saldo atau lokasi pengemudi yang sama persis dengan yang ada di HP iPhone milik teman kalian? Padahal, kedua perangkat tersebut memiliki sistem operasi (OS) yang benar-benar berbeda. Android menggunakan bahasa pemrograman seperti Java atau Kotlin, sedangkan iPhone menggunakan bahasa eksklusif buatan Apple yaitu Swift. Tidak berhenti di situ, kalian juga bisa melihat data yang sama jika membuka situs web transportasi tersebut melalui *browser* laptop kalian. Lalu, bagaimana caranya server pusat yang berlokasi di markas perusahaan bisa melayani ketiga jenis *platform* (Android, iOS, dan Web) ini sekaligus tanpa kebingungan? Inilah momen yang paling tepat bagi kita untuk berkenalan dengan sebuah teknologi ajaib bernama API (Application Programming Interface), dan lebih spesifik lagi, kita akan membedah secara mendalam gaya arsitektur yang paling populer serta menjadi standar industri saat ini, yaitu RESTful API.
Mari kita mulai petualangan ini dengan sebuah analogi santai yang sangat humanis agar kalian mudah memahaminya. Bayangkan kalian sedang berada di sebuah restoran mewah yang sangat sibuk. Di restoran ini, pelanggan yang duduk di meja adalah Aplikasi *Frontend* (seperti aplikasi di HP kalian atau desain visual website di *browser* yang sedang kalian tatap). Koki yang sibuk memasak di dapur adalah Server *Backend* (tempat pangkalan data MySQL dan logika pemrograman PHP kalian berada). Pertanyaannya, apakah pelanggan yang lapar boleh nyelonong masuk begitu saja ke dapur, membuka-buka kulkas, dan mengambil sendiri makanannya dari panci koki? Tentu saja tidak! Jika hal liar itu terjadi, dapur akan menjadi kacau balau, privasi resep rahasia restoran akan terbongkar, keamanan bahan makanan terancam, dan koki akan kebingungan setengah mati. Di sinilah peran seorang Pelayan Restoran menjadi sangat krusial. Pelayan ini bertugas membawa buku menu ke meja kalian, mencatat pesanan kalian dengan ramah, membawanya ke dapur, lalu mengantarkan makanan yang sudah matang kembali ke meja kalian dengan selamat. Nah, di dunia pemrograman, Pelayan Restoran yang sangat berjasa ini adalah API.
API secara harfiah adalah jembatan komunikasi. Ia adalah sekumpulan aturan ketat yang memungkinkan dua aplikasi yang benar-benar berbeda untuk saling mengobrol dan bertukar data dengan aman dan efisien. Lalu, apa arti dari embel-embel *RESTful* di depannya? REST (Representational State Transfer) sebenarnya bukanlah sebuah bahasa pemrograman atau *software* yang harus kalian pelajari secara terpisah, melainkan sebuah gaya atau aturan main yang disepakati oleh seluruh insinyur perangkat lunak (*programmer*) di seluruh dunia agar pelayan restoran (API) ini bekerja dengan sangat rapi, mudah ditebak, dan seragam di mana pun ia berada. Jika sebuah API dibangun dengan secara ketat mengikuti aturan main REST ini, maka ia akan diberi gelar kehormatan sebagai RESTful API.
Aturan pertama dan paling mendasar dari RESTful API adalah konsep *Stateless* atau tidak memiliki ingatan. Artinya, setiap kali klien (pelanggan) meminta sesuatu ke server, klien harus menyertakan semua informasi identitas yang dibutuhkan, seperti nomor meja, kata sandi, atau token identitas rahasia. Server tidak akan pernah mengingat pesanan apa yang baru saja kalian lakukan lima menit yang lalu. Mengapa desain ini dipilih? Agar server tidak cepat lelah karena harus mengingat jutaan data riwayat pelanggan yang sedang aktif. Jika pengunjung aplikasi sedang membeludak dan server mulai kelebihan beban, perusahaan cukup membeli mesin server baru, dan pelayan (API) tetap bisa langsung melayani pelanggan dari server baru tersebut tanpa harus repot-repot memindahkan memori ingatan dari server yang lama. Konsep *Stateless* ini adalah kunci utama mengapa aplikasi raksasa seperti Instagram atau Netflix jarang sekali tumbang karena lonjakan pengguna.
Aturan kedua adalah penggunaan Metode HTTP yang baku dan memiliki tujuan yang jelas. Jika sebelumnya saat membuat formulir HTML kita hanya mengenal metode GET (untuk mengambil data) dan POST (untuk mengirim data baru), dalam arsitektur RESTful API kita akan berkenalan dengan dua saudara kandung mereka yang sangat penting, yaitu PUT (untuk mengubah atau *update* data yang sudah ada secara keseluruhan) dan DELETE (untuk menghapus data secara permanen). Dengan memanfaatkan keempat metode ini (GET, POST, PUT, DELETE), kita bisa mewujudkan siklus CRUD (Create, Read, Update, Delete) yang sangat sempurna dan terstruktur melalui satu URL atau *Endpoint* yang sama persis.
Sebagai contoh nyata, mari kita bayangkan kita memiliki *endpoint* atau jalur URL bernama /artikel. Jika kita mengirimkan permintaan GET ke /artikel, server akan secara otomatis mengembalikan daftar panjang seluruh artikel yang ada. Jika kita mengubah permintaannya menjadi POST ke /artikel dengan membawa ketikan teks baru, server akan menyimpan artikel baru tersebut ke dalam pangkalan data. Jika kita mengirim permintaan DELETE ke /artikel/107, server akan mencari dan menghapus artikel dengan ID 107 tersebut. Sangat rapi dan intuitif, bukan? Kalian tidak perlu lagi membuat desain URL yang panjang dan berantakan.
Lalu, bagaimana bentuk fisik dari makanan (data) yang diantarkan oleh pelayan (API) ini ke meja pelanggan? Di sinilah format teks JSON (JavaScript Object Notation) mengambil peran utama sebagai pahlawan. JSON adalah format pertukaran data yang sangat ringan, terstruktur rapi, dan mudah dibaca, baik oleh mata manusia maupun oleh mesin bahasa pemrograman apa pun di dunia ini (baik itu PHP, Python, Java, Go, maupun Swift). JSON ibarat bahasa Inggris di dunia nyata; ia adalah bahasa universal yang bisa menjembatani perbedaan. Server PHP kalian di dapur akan mengambil data mentah dari pangkalan data MySQL, mengubahnya menjadi format JSON yang cantik, lalu memberikannya kepada aplikasi Android. Selanjutnya, aplikasi Android akan menerima dan menerjemahkan JSON tersebut menjadi tampilan visual yang penuh warna di layar kaca *smartphone* kalian.
Mari kita lihat contoh sederhana bagaimana logika *backend* PHP kalian bertindak sebagai RESTful API yang melayani pesanan data dalam bentuk JSON. Perhatikan kode di bawah ini:
Jika kode PHP di atas diakses melalui *browser*, alih-alih menampilkan desain visual HTML yang warna-warni dan elegan seperti biasanya, ia hanya akan menampilkan teks murni yang kaku berupa kurung kurawal seperti { "id": 107, "judul": "Membedah RESTful API: Bahasa Universal Pengembang Web" ... }. Walaupun terlihat sangat kaku dan membosankan bagi mata manusia, teks murni inilah yang sebenarnya sangat dirindukan dan ditunggu-tunggu oleh aplikasi *frontend*. Aplikasi *frontend* akan mengambil teks kurung kurawal tersebut, memecahnya, dan mendandaninya menggunakan CSS atau komponen antarmuka *mobile* mereka sendiri sehingga terlihat sangat cantik di mata pengguna.
Bagi *programmer* pemula, momen saat pertama kali benar-benar memahami arsitektur RESTful API adalah momen *Aha!* yang sangat mencerahkan dan akan mengubah jalan karir mereka selamanya. Kalian tiba-tiba menyadari bahwa untuk membuat aplikasi web, aplikasi Android, dan aplikasi iOS secara bersamaan, kalian tidak perlu bersusah payah membangun tiga *database* atau tiga mesin server yang berbeda-beda. Kalian cukup membangun satu buah *Dapur Server* yang sangat kuat, sangat aman, dan sangat terstruktur, lalu membiarkan pasukan RESTful API melayani semua platform tersebut secara adil, cepat, dan seragam. Inilah rahasia utama mengapa perusahaan *startup* teknologi masa kini bisa berekspansi ke berbagai platform seluler dengan sangat cepat, murah, dan efisien. Mulai sekarang, setiap kali kalian menggunakan fitur *Login* ke dalam akun sosial media atau menekan tombol *Checkout* barang di aplikasi *e-commerce* kesayangan kalian, kalian sudah tahu pasti bahwa di balik layar yang menawan tersebut, ada seorang pelayan RESTful API yang sedang berlari kencang mengantarkan nampan berisi data JSON dari genggaman *smartphone* kalian menuju ke dapur server raksasa yang berada di benua lain!
Mari kita mulai petualangan ini dengan sebuah analogi santai yang sangat humanis agar kalian mudah memahaminya. Bayangkan kalian sedang berada di sebuah restoran mewah yang sangat sibuk. Di restoran ini, pelanggan yang duduk di meja adalah Aplikasi *Frontend* (seperti aplikasi di HP kalian atau desain visual website di *browser* yang sedang kalian tatap). Koki yang sibuk memasak di dapur adalah Server *Backend* (tempat pangkalan data MySQL dan logika pemrograman PHP kalian berada). Pertanyaannya, apakah pelanggan yang lapar boleh nyelonong masuk begitu saja ke dapur, membuka-buka kulkas, dan mengambil sendiri makanannya dari panci koki? Tentu saja tidak! Jika hal liar itu terjadi, dapur akan menjadi kacau balau, privasi resep rahasia restoran akan terbongkar, keamanan bahan makanan terancam, dan koki akan kebingungan setengah mati. Di sinilah peran seorang Pelayan Restoran menjadi sangat krusial. Pelayan ini bertugas membawa buku menu ke meja kalian, mencatat pesanan kalian dengan ramah, membawanya ke dapur, lalu mengantarkan makanan yang sudah matang kembali ke meja kalian dengan selamat. Nah, di dunia pemrograman, Pelayan Restoran yang sangat berjasa ini adalah API.
API secara harfiah adalah jembatan komunikasi. Ia adalah sekumpulan aturan ketat yang memungkinkan dua aplikasi yang benar-benar berbeda untuk saling mengobrol dan bertukar data dengan aman dan efisien. Lalu, apa arti dari embel-embel *RESTful* di depannya? REST (Representational State Transfer) sebenarnya bukanlah sebuah bahasa pemrograman atau *software* yang harus kalian pelajari secara terpisah, melainkan sebuah gaya atau aturan main yang disepakati oleh seluruh insinyur perangkat lunak (*programmer*) di seluruh dunia agar pelayan restoran (API) ini bekerja dengan sangat rapi, mudah ditebak, dan seragam di mana pun ia berada. Jika sebuah API dibangun dengan secara ketat mengikuti aturan main REST ini, maka ia akan diberi gelar kehormatan sebagai RESTful API.
Aturan pertama dan paling mendasar dari RESTful API adalah konsep *Stateless* atau tidak memiliki ingatan. Artinya, setiap kali klien (pelanggan) meminta sesuatu ke server, klien harus menyertakan semua informasi identitas yang dibutuhkan, seperti nomor meja, kata sandi, atau token identitas rahasia. Server tidak akan pernah mengingat pesanan apa yang baru saja kalian lakukan lima menit yang lalu. Mengapa desain ini dipilih? Agar server tidak cepat lelah karena harus mengingat jutaan data riwayat pelanggan yang sedang aktif. Jika pengunjung aplikasi sedang membeludak dan server mulai kelebihan beban, perusahaan cukup membeli mesin server baru, dan pelayan (API) tetap bisa langsung melayani pelanggan dari server baru tersebut tanpa harus repot-repot memindahkan memori ingatan dari server yang lama. Konsep *Stateless* ini adalah kunci utama mengapa aplikasi raksasa seperti Instagram atau Netflix jarang sekali tumbang karena lonjakan pengguna.
Aturan kedua adalah penggunaan Metode HTTP yang baku dan memiliki tujuan yang jelas. Jika sebelumnya saat membuat formulir HTML kita hanya mengenal metode GET (untuk mengambil data) dan POST (untuk mengirim data baru), dalam arsitektur RESTful API kita akan berkenalan dengan dua saudara kandung mereka yang sangat penting, yaitu PUT (untuk mengubah atau *update* data yang sudah ada secara keseluruhan) dan DELETE (untuk menghapus data secara permanen). Dengan memanfaatkan keempat metode ini (GET, POST, PUT, DELETE), kita bisa mewujudkan siklus CRUD (Create, Read, Update, Delete) yang sangat sempurna dan terstruktur melalui satu URL atau *Endpoint* yang sama persis.
Sebagai contoh nyata, mari kita bayangkan kita memiliki *endpoint* atau jalur URL bernama /artikel. Jika kita mengirimkan permintaan GET ke /artikel, server akan secara otomatis mengembalikan daftar panjang seluruh artikel yang ada. Jika kita mengubah permintaannya menjadi POST ke /artikel dengan membawa ketikan teks baru, server akan menyimpan artikel baru tersebut ke dalam pangkalan data. Jika kita mengirim permintaan DELETE ke /artikel/107, server akan mencari dan menghapus artikel dengan ID 107 tersebut. Sangat rapi dan intuitif, bukan? Kalian tidak perlu lagi membuat desain URL yang panjang dan berantakan.
Lalu, bagaimana bentuk fisik dari makanan (data) yang diantarkan oleh pelayan (API) ini ke meja pelanggan? Di sinilah format teks JSON (JavaScript Object Notation) mengambil peran utama sebagai pahlawan. JSON adalah format pertukaran data yang sangat ringan, terstruktur rapi, dan mudah dibaca, baik oleh mata manusia maupun oleh mesin bahasa pemrograman apa pun di dunia ini (baik itu PHP, Python, Java, Go, maupun Swift). JSON ibarat bahasa Inggris di dunia nyata; ia adalah bahasa universal yang bisa menjembatani perbedaan. Server PHP kalian di dapur akan mengambil data mentah dari pangkalan data MySQL, mengubahnya menjadi format JSON yang cantik, lalu memberikannya kepada aplikasi Android. Selanjutnya, aplikasi Android akan menerima dan menerjemahkan JSON tersebut menjadi tampilan visual yang penuh warna di layar kaca *smartphone* kalian.
Mari kita lihat contoh sederhana bagaimana logika *backend* PHP kalian bertindak sebagai RESTful API yang melayani pesanan data dalam bentuk JSON. Perhatikan kode di bawah ini:
<?php
// Mengatur penanda (header) agar browser tahu ini adalah data JSON
header("Content-Type: application/json");
// Simulasi data yang diambil dari database MySQL
$data_artikel = [
"id" => 107,
"judul" => "Membedah RESTful API: Bahasa Universal Pengembang Web",
"penulis" => "Jurnal Coding",
"status" => "Aktif"
];
// Mengubah array PHP menjadi format JSON yang universal
$respons_json = json_encode($data_artikel);
// Mengirimkan makanan (data) ke klien!
echo $respons_json;
?>
// Mengatur penanda (header) agar browser tahu ini adalah data JSON
header("Content-Type: application/json");
// Simulasi data yang diambil dari database MySQL
$data_artikel = [
"id" => 107,
"judul" => "Membedah RESTful API: Bahasa Universal Pengembang Web",
"penulis" => "Jurnal Coding",
"status" => "Aktif"
];
// Mengubah array PHP menjadi format JSON yang universal
$respons_json = json_encode($data_artikel);
// Mengirimkan makanan (data) ke klien!
echo $respons_json;
?>
Jika kode PHP di atas diakses melalui *browser*, alih-alih menampilkan desain visual HTML yang warna-warni dan elegan seperti biasanya, ia hanya akan menampilkan teks murni yang kaku berupa kurung kurawal seperti { "id": 107, "judul": "Membedah RESTful API: Bahasa Universal Pengembang Web" ... }. Walaupun terlihat sangat kaku dan membosankan bagi mata manusia, teks murni inilah yang sebenarnya sangat dirindukan dan ditunggu-tunggu oleh aplikasi *frontend*. Aplikasi *frontend* akan mengambil teks kurung kurawal tersebut, memecahnya, dan mendandaninya menggunakan CSS atau komponen antarmuka *mobile* mereka sendiri sehingga terlihat sangat cantik di mata pengguna.
Bagi *programmer* pemula, momen saat pertama kali benar-benar memahami arsitektur RESTful API adalah momen *Aha!* yang sangat mencerahkan dan akan mengubah jalan karir mereka selamanya. Kalian tiba-tiba menyadari bahwa untuk membuat aplikasi web, aplikasi Android, dan aplikasi iOS secara bersamaan, kalian tidak perlu bersusah payah membangun tiga *database* atau tiga mesin server yang berbeda-beda. Kalian cukup membangun satu buah *Dapur Server* yang sangat kuat, sangat aman, dan sangat terstruktur, lalu membiarkan pasukan RESTful API melayani semua platform tersebut secara adil, cepat, dan seragam. Inilah rahasia utama mengapa perusahaan *startup* teknologi masa kini bisa berekspansi ke berbagai platform seluler dengan sangat cepat, murah, dan efisien. Mulai sekarang, setiap kali kalian menggunakan fitur *Login* ke dalam akun sosial media atau menekan tombol *Checkout* barang di aplikasi *e-commerce* kesayangan kalian, kalian sudah tahu pasti bahwa di balik layar yang menawan tersebut, ada seorang pelayan RESTful API yang sedang berlari kencang mengantarkan nampan berisi data JSON dari genggaman *smartphone* kalian menuju ke dapur server raksasa yang berada di benua lain!