REST API, atau representational state transfer application programming interface, adalah gaya arsitektur yang umumnya dianggap sebagai standar untuk mendesain dan membangun aplikasi jaringan yang mendukung web. REST API menyediakan serangkaian aturan dan batasan yang, jika diikuti, akan menghasilkan layanan web yang sederhana, skalabel, dan mudah diintegrasikan.
REST API adalah API yang sesuai dengan prinsip desain gaya arsitektur REST. Pada intinya, REST berputar di sekitar gagasan resource, yang dapat berupa informasi apa pun seperti pengguna, produk, dokumen, atau kumpulan item.
REST API menyediakan cara bagi aplikasi klien untuk mengakses dan memanipulasi resource ini menggunakan serangkaian operasi stateless yang telah ditentukan sebelumnya.
Aplikasi klien (seperti aplikasi seluler, browser web, atau server lain) memulai permintaan ke API untuk melakukan suatu tindakan. Permintaan ini dikirim ke URL tertentu dan mencakup metode HTTP, header dengan metadata, dan terkadang isi permintaan dengan data.
Server menerima dan memvalidasi permintaan, yang mengonfirmasi bahwa klien telah diautentikasi dan diotorisasi untuk melakukan tindakan yang diminta. Kemudian, server memproses permintaan tersebut, yang dapat melibatkan pengambilan data dari database, pembuatan resource baru, atau update resource yang sudah ada.
Setelah memproses permintaan, server mengirimkan respons kembali ke klien. Respons ini mencakup kode status HTTP yang menunjukkan hasil (misalnya, 200 OK untuk keberhasilan, 404 Not Found jika resource tidak ada, 401 Unauthorized untuk masalah keamanan), beserta data yang diminta di isi respons.
Data yang ditransfer antara klien dan server adalah "representasi" status resource. JSON (JavaScript Object Notation) adalah format yang paling umum untuk data ini karena ringan, mudah dibaca manusia, dan mudah diurai oleh bahasa pemrograman.
Kekuatan dan skalabilitas REST berasal dari serangkaian batasan arsitektur yang memandu desainnya. Sistem yang mematuhi batasan ini dianggap "RESTful".
Resource adalah konsep dasar dalam REST. Resource adalah objek yang memiliki jenis, data terkait, hubungan dengan resource lain, dan serangkaian metode yang beroperasi di dalamnya. Misalnya, dalam API e-commerce, "produk" atau "pelanggan" akan menjadi resource.
Setiap resource diidentifikasi secara unik oleh URI. API yang dirancang dengan baik menggunakan URI yang bersih, deskriptif, dan konsisten untuk mengidentifikasi resource-nya. Misalnya, /users dapat mengidentifikasi kumpulan pengguna, dan /users/123 akan mengidentifikasi pengguna tertentu dengan ID 123.
Klien tidak berinteraksi dengan resource secara langsung, tetapi dengan representasi resource tersebut. Format representasi yang paling umum adalah JSON, tetapi format lain seperti XML atau HTML juga dapat digunakan. Hal ini memberikan cara yang fleksibel untuk merepresentasikan status resource.
Setiap permintaan dari klien ke server harus berisi semua informasi yang diperlukan server untuk memahami dan memproses permintaan tersebut. Server tidak menyimpan konteks klien atau status sesi apa pun di antara permintaan. Batasan ini membuat REST API sangat skalabel karena server mana pun dapat menangani permintaan apa pun.
Klien dan server dipisahkan, dengan API bertindak sebagai antarmuka di antara keduanya. Pemisahan masalah ini memungkinkan aplikasi sisi klien dan aplikasi sisi server berkembang secara independen.
REST memerlukan antarmuka yang konsisten dan seragam antara klien dan server. Hal ini dicapai melalui penggunaan metode HTTP standar, URI untuk identifikasi resource, dan hypermedia as the engine of application state (HATEOAS).
Respons dari server harus ditentukan sebagai dapat di-cache atau tidak dapat di-cache. Jika respons dapat di-cache, klien atau perantara dapat menggunakan kembali respons tersebut untuk permintaan berikutnya yang identik, sehingga dapat meningkatkan performa dan mengurangi beban server secara signifikan.
Klien yang terhubung ke REST API biasanya tidak dapat mengetahui apakah mereka terhubung langsung ke server akhir atau ke perantara di sepanjang jalur. Server perantara, seperti gateway API atau load balancer, dapat diperkenalkan ke arsitektur untuk meningkatkan skalabilitas, keamanan, dan performa.
URI harus merepresentasikan resource, sehingga harus menggunakan kata benda (jamak untuk koleksi, tunggal atau ID untuk item tertentu), bukan kata kerja. Misalnya, gunakan /users untuk mewakili semua pengguna, bukan /getAllUsers.
Gunakan kata kerja HTTP standar untuk merepresentasikan tindakan: GET untuk pengambilan, POST untuk pembuatan, PUT untuk update, dan DELETE untuk penghapusan. Hal ini menciptakan antarmuka yang konsisten dan dapat diprediksi.
Prinsip utama REST adalah bahwa respons harus menyertakan link ke tindakan atau resource terkait lainnya. Hal ini memungkinkan klien menavigasi API secara dinamis tanpa harus meng-hardcode pola URI.
Saat Anda perlu membuat perubahan yang dapat menyebabkan gangguan pada API, perkenalkan versi baru. Praktik yang paling umum adalah menyertakan nomor versi dalam URI, seperti /api/v2/users. Hal ini memungkinkan klien yang ada untuk terus menggunakan versi lama, sementara klien baru dapat mengadopsi versi baru.
Saat permintaan gagal, berikan pesan error yang jelas dan berguna di isi respons beserta kode status HTTP yang sesuai (misalnya, 400 Bad Request, 500 Internal Server Error). Hal ini membantu developer sisi klien memahami apa yang salah.
Lindungi API Anda dengan menerapkan autentikasi yang kuat (misalnya, OAuth 2.0, kunci API) untuk memverifikasi identitas dan otorisasi klien guna memastikan klien hanya memiliki akses ke resource yang diizinkan untuk dilihat. Selalu gunakan TLS/SSL untuk mengenkripsi traffic.
Untuk endpoint yang dapat menampilkan item dalam jumlah besar, terapkan paginasi untuk menampilkan data dalam potongan yang dapat dikelola. Selain itu, berikan parameter kueri agar klien dapat memfilter dan mengurutkan hasil, sehingga mengurangi jumlah data yang ditransfer.
Kesederhanaan dan keterbacaan
REST API menggunakan metode HTTP standar dan URI yang mudah dibaca manusia, sehingga relatif mudah dipelajari, digunakan, dan di-debug oleh developer. Sifat antarmuka yang deskriptif mandiri menyederhanakan upaya integrasi.
Skalabilitas
Sifat stateless REST adalah pengaktif utama skalabilitas. Karena server tidak perlu mempertahankan sesi klien, permintaan dapat dengan mudah didistribusikan ke beberapa server, dan server baru dapat ditambahkan untuk menangani peningkatan beban tanpa kerumitan.
Fleksibilitas
REST mendukung berbagai format data, dengan JSON sebagai format yang paling populer karena sifatnya yang ringan dan dukungan yang luas. Fleksibilitas ini memungkinkan REST API digunakan oleh berbagai aplikasi klien, mulai dari browser web hingga perangkat seluler dan sensor IoT.
Pemisahan klien dan server
Arsitektur klien-server yang diterapkan oleh REST menciptakan pemisahan masalah yang jelas. Hal ini memungkinkan developer mengerjakan frontend sisi klien dan backend sisi server secara independen, yang dapat mempercepat siklus pengembangan.
Agnostik bahasa
Karena REST adalah gaya arsitektur yang dibangun berdasarkan HTTP standar, REST dapat diimplementasikan dalam bahasa pemrograman apa pun dan digunakan oleh klien mana pun yang mampu membuat permintaan HTTP. Hal ini memberikan interoperabilitas maksimum antara beragam stack teknologi.
Kasus penggunaan yang umum adalah aplikasi cuaca seluler yang mengambil cuaca terkini untuk lokasi tertentu dari API cuaca publik.
Aplikasi klien membuat permintaan GET HTTP ke endpoint API, termasuk lokasi dan kunci API untuk autentikasi.
curl "https://api.weather-service.com/v1/current?location=94043&key=YOUR_API_KEY" |
curl
"https://api.weather-service.com/v1/current?location=94043&key=YOUR_API_KEY"
Server memproses permintaan, mengambil data cuaca untuk lokasi yang ditentukan, dan menampilkan respons JSON.
{ "temperature": 20, "unit": "celsius", "condition": "Clear", "humidity": 55 } |
{
"temperature": 20,
"unit": "celsius",
"condition": "Clear",
"humidity": 55
}
Dalam arsitektur microservice, layanan "produk" mungkin perlu mendapatkan harga terbaru dari layanan "inventaris" sebelum menampilkannya di situs e-commerce.
Layanan produk membuat permintaan GET HTTP internal ke endpoint API layanan inventaris untuk ID produk tertentu.
curl "http://inventory-service.internal/api/products/PN-5821/price" |
curl
"http://inventory-service.internal/api/products/PN-5821/price"
Layanan inventaris mencari harga saat ini dan menampilkan respons JSON sederhana.
{ "productId": "PN-5821", "price": 1299.99, "currency": "USD" } ``` |
{
"productId": "PN-5821",
"price": 1299.99,
"currency": "USD"
}
```
Mulailah membangun solusi di Google Cloud dengan kredit gratis senilai $300 dan lebih dari 20 produk yang selalu gratis.