💡 Key Takeaways
- Resource Naming and URI Design: The Foundation That Everyone Gets Wrong
- HTTP Methods and Status Codes: Speaking the Language Correctly
- Request and Response Design: The Devil in the Details
- Error Handling: When Things Go Wrong (And They Will)
Tiga tahun yang lalu, saya menyaksikan sebuah startup membakar $2,3 juta dalam pendanaan karena API mereka tidak dapat diskalakan lebih dari 10.000 pengguna. Masalahnya bukan pada infrastruktur atau desain basis data mereka—itu adalah arsitektur REST API mereka. Sebagai seseorang yang telah menghabiskan 14 tahun terakhir membangun dan memelihara API untuk perusahaan dari startup yang baru berdiri hingga perusahaan Fortune 500, saya telah melihat pola ini terulang lebih banyak kali daripada yang saya inginkan untuk dihitung. Saya Marcus Chen, Arsitek API Utama di sebuah perusahaan fintech besar, dan saya telah merancang REST API yang sekarang menangani lebih dari 47 miliar permintaan per bulan. Hari ini, saya membagikan daftar periksa praktis yang dapat menyelamatkan startup tersebut—dan mungkin dapat menyelamatkan milik Anda.
💡 Poin Penting
- Penamaan Sumber Daya dan Desain URI: Fondasi yang Semua Orang Salah
- Metode HTTP dan Kode Status: Berbicara dengan Bahasa yang Benar
- Desain Permintaan dan Respons: Iblis Ada di Detailnya
- Penanganan Kesalahan: Ketika Segalanya Salah (Dan Akan Salah)
Jalan pengembangan API telah berubah secara dramatis sejak saya mulai di bidang ini. Kembali pada tahun 2011, jika API Anda dapat mengembalikan JSON dan menangani operasi CRUD dasar, Anda sudah unggul. Pada tahun 2026, standarnya jauh lebih tinggi. API Anda perlu aman, berkinerja baik, dapat diamati, dan ramah pengembang—sambil menangani kasus tepi yang tidak ada lima tahun yang lalu. Ini bukan nasihat teoretis dari seseorang yang membaca beberapa posting blog. Ini adalah kebijaksanaan yang teruji dalam pertempuran dari seseorang yang telah mengatasi insiden produksi di pukul 3 pagi, mengoptimalkan titik akhir yang menghabiskan ribuan per hari dalam tagihan cloud, dan melatih puluhan insinyur tentang prinsip desain API yang benar-benar bekerja di dunia nyata.
Penamaan Sumber Daya dan Desain URI: Fondasi yang Semua Orang Salah
Izinkan saya memulai dengan sesuatu yang tampak dasar tetapi masih membingungkan bahkan pengembang berpengalaman: penamaan sumber daya. Pada kuartal lalu, saya meninjau API dari 23 tim berbeda di organisasi kami. Sembilan belas dari mereka memiliki konvensi penamaan yang tidak konsisten yang membuat API mereka lebih sulit digunakan dan dipelihara. Ini bukan hanya tentang estetika—penamaan yang buruk secara langsung berdampak pada pengalaman pengembang, yang berarti waktu integrasi yang lebih lambat dan lebih banyak tiket dukungan.
Berikut adalah prinsip dasar: URI Anda harus merepresentasikan sumber daya, bukan tindakan. Gunakan kata benda, bukan kata kerja. Saya sering melihat kesalahan ini: titik akhir seperti /getUser atau /createOrder. Ini adalah titik akhir gaya RPC yang menyamar sebagai REST. Pendekatan yang benar menggunakan metode HTTP untuk menunjukkan tindakan: GET /users/123 atau POST /orders. Ini mungkin tampak sepele, tetapi penting. Ketika saya memperbaiki API pemrosesan pembayaran kami untuk mengikuti pola ini secara konsisten, waktu integrasi kami dengan mitra baru turun dari rata-rata 8,3 hari menjadi 4,1 hari.
Gunakan kata benda jamak untuk koleksi. Selalu. Saya tidak peduli jika itu terdengar canggung secara gramatikal—konsistensi lebih penting daripada tata bahasa. Titik akhir Anda harus /users, bukan /user. Ketika Anda mencampur bentuk tunggal dan jamak, Anda memaksa pengembang untuk menghafal keputusan yang sewenang-wenang. Saya telah melihat tim menghabiskan berjam-jam di pertemuan membahas apakah sebuah titik akhir harus tunggal atau jamak. Hemat diri Anda dari sakit kepala: jamak untuk koleksi, selalu.
Hubungan hierarkis harus tercermin dalam struktur URI Anda, tetapi jangan lebih dari tiga tingkat kedalaman. Misalnya, /users/123/orders/456/items/789 sudah mulai rumit. Pada titik itu, pertimbangkan untuk membuat item sebagai sumber daya tingkat atas dengan penyaringan: /items?orderId=456. Saya belajar pelajaran ini dengan cara yang sulit ketika kami membangun API e-commerce dengan nesting lima tingkat. Kode tersebut menjadi tidak dapat dipelihara, dan kami menghabiskan dua bulan untuk memperbaikinya.
Gunakan tanda hubung, bukan garis bawah, dalam URI. Ini adalah detail kecil yang meningkatkan keterbacaan: /order-items lebih baik dibaca daripada /order_items. Yang lebih penting, beberapa sistem memperlakukan garis bawah secara berbeda, dan tanda hubung aman secara universal. Jaga semuanya dalam huruf kecil. Kasus campuran dalam URI dapat menimbulkan masalah karena beberapa sistem peka huruf besar dan yang lainnya tidak.
Versi API Anda sejak hari pertama. Saya tidak dapat cukup menekankan hal ini. Gunakan versi URI seperti /v1/users atau /v2/orders. Saya telah mencoba versi berbasis header, versi parameter kueri, dan negosiasi konten. Versi URI adalah yang paling sederhana dan menyebabkan paling sedikit masalah. Ketika kami meluncurkan API kami tanpa versi, kami mempersempit diri ke sudut dalam enam bulan. Perubahan yang merusak menjadi mustahil untuk diterapkan tanpa menyebabkan kekacauan untuk integrasi yang sudah ada.
Metode HTTP dan Kode Status: Berbicara dengan Bahasa yang Benar
Jika penamaan sumber daya adalah fondasi, metode HTTP dan kode status adalah tata bahasa API REST. Menggunakannya dengan benar bukanlah pilihan—itu adalah cara Anda berkomunikasi tentang maksud dan hasil kepada konsumen API. Saya telah meninjau ratusan API di mana pengembang memperlakukan metode HTTP sebagai saran daripada spesifikasi. Ini menciptakan kebingungan, merusak caching, dan membuat API Anda tidak terduga.
"Penamaan sumber daya API Anda bukan hanya tentang estetika—itu adalah perbedaan antara pengembang yang berintegrasi dalam hitungan hari versus minggu, dan itu secara langsung berdampak pada garis bawah Anda."
Permintaan GET harus aman dan idempotent. Aman berarti mereka tidak mengubah kondisi server. Idempotent berarti memanggilnya beberapa kali menghasilkan hasil yang sama. Saya pernah mewarisi sebuah API di mana permintaan GET membuat catatan database. Kekacauan yang ditimbulkan adalah spektakuler—penyimpanan browser dan crawler tautan menciptakan ribuan catatan yang tidak relevan. Kami butuh waktu tiga minggu untuk membersihkan kekacauan tersebut dan memperbaiki desainnya.
POST digunakan untuk membuat sumber daya. Ketika Anda POST ke /orders, Anda sedang membuat pesanan baru. Responsnya harus mengembalikan 201 Created dengan header Location yang merujuk ke sumber daya baru: Location: /orders/789. Sertakan sumber daya yang dibuat dalam badan respons. Ini menyelamatkan klien dari melakukan permintaan GET tambahan. Dalam sistem pemrosesan pesanan kami, optimasi sederhana ini mengurangi panggilan API sebesar 31% dan meningkatkan kinerja yang dirasakan secara signifikan.
PUT digunakan untuk pembaruan penuh dan harus idempotent. Jika Anda PUT data yang sama ke /users/123 sepuluh kali, hasilnya harus identik dengan melakukannya satu kali. PATCH digunakan untuk pembaruan parsial. Gunakan PATCH ketika klien hanya perlu mengirimkan bidang yang berubah. Ini mengurangi ukuran payload dan membuat pembaruan lebih efisien. Dalam API profil pengguna kami, beralih dari PUT ke PATCH untuk pembaruan profil mengurangi ukuran payload rata-rata dari 4,2KB menjadi 0,8KB.
DELETE harus mengembalikan 204 No Content untuk penghapusan yang berhasil. Beberapa pengembang mengembalikan 200 OK dengan pesan konfirmasi, tetapi 204 lebih semantik—tidak ada konten yang dikembalikan karena sumber daya sudah hilang. Pastikan DELETE juga idempotent. Menghapus sumber daya yang sudah dihapus harus mengembalikan 204, bukan 404. Ini mencegah kondisi balapan dalam sistem terdistribusi.
Kode status lebih penting dari yang Anda pikirkan. Gunakan 200 OK untuk permintaan GET, PUT, dan PATCH yang berhasil. Gunakan 201 Created untuk permintaan POST yang berhasil. Gunakan 204 No Content untuk permintaan DELETE yang berhasil.