Apa itu REST API?

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.

Definisi REST API

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.

Bagaimana cara kerja REST API?

1. Klien mengirimkan permintaan

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.

2. Server memproses permintaan

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.

3. Server mengirimkan respons

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.

4. Transfer data

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.

Arsitektur dan komponen REST API

Kekuatan dan skalabilitas REST berasal dari serangkaian batasan arsitektur yang memandu desainnya. Sistem yang mematuhi batasan ini dianggap "RESTful".

Diagram model REST API

Referensi

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.

URI (uniform resource identifier)

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.

Representasi

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.

Stateless

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.

Arsitektur klien-server

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.

Antarmuka seragam

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).

Kemampuan penyimpanan dalam cache

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.

Sistem berlapis

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.

Praktik terbaik REST API

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.

Manfaat penggunaan REST API

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.

Contoh REST API

Contoh API publik

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

}

Contoh API internal

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"

}

```

Mengatasi tantangan bisnis Anda dengan Google Cloud

Pelanggan baru mendapatkan kredit gratis senilai $300 untuk dibelanjakan di Google Cloud.

Referensi tambahan

Langkah selanjutnya

Mulailah membangun solusi di Google Cloud dengan kredit gratis senilai $300 dan lebih dari 20 produk yang selalu gratis.