Panduan

Cara Membuat REST API: Desain, Keamanan dan Deployment

Untuk membuat REST API, daftarkan resource yang dikelola aplikasi Anda (pengguna, pesanan, booking), beri setiap resource URL seperti /orders dan /orders/{id}, lalu gunakan metode HTTP untuk setiap aksi: GET untuk membaca, POST untuk membuat, PATCH untuk memperbarui, dan DELETE untuk menghapus. Kembalikan respons JSON dengan status code yang tepat, validasi setiap input, wajibkan autentikasi dan pemeriksaan izin per data di server, serta gunakan pagination untuk daftar. Setelah itu, dokumentasikan endpoint dan deploy API di balik HTTPS.

Panduan ini membahas keputusan desain, contoh route, prompt untuk AI app builder, dan kesalahan yang sering menyebabkan celah keamanan. Jika API masih baru bagi Anda, mulailah dengan apa itu API.

Kapan Anda membutuhkan REST API

  • Frontend web Anda perlu menyimpan dan memuat data dari server
  • Aplikasi mobile, mitra, atau alat otomasi perlu mengakses data Anda
  • Layanan lain mengirim event kepada Anda (webhook)
  • Anda memisahkan pekerjaan antara tim frontend dan tim backend

REST adalah gaya yang paling umum, tetapi bukan satu-satunya. REST vs GraphQL menjelaskan kapan satu endpoint query yang fleksibel lebih cocok.

Rancang dulu: resource dan route

Tuliskan kata benda dalam aplikasi Anda dan apa yang dilakukan orang terhadapnya. Untuk aplikasi booking sederhana:

MetodeRouteFungsiKode sukses
GET/api/bookingsDaftar booking milik pemanggil (dengan pagination)200
POST/api/bookingsBuat booking201
GET/api/bookings/{id}Ambil satu booking200
PATCH/api/bookings/{id}Ubah sebagian field200
DELETE/api/bookings/{id}Batalkan booking204
GET/api/healthHealth check untuk monitoring200

Route ini sesuai dengan create, read, update, dan delete; lihat apa itu CRUD. Konvensi yang layak diikuti:

  • Kata benda jamak, tanpa kata kerja di URL: /bookings, bukan /getBookings.
  • Bersarang hanya satu level jika itu memperjelas kepemilikan: /bookings/{id}/notes.
  • Aksi di luar CRUD bisa dijadikan sub-resource: POST /bookings/{id}/cancel lebih jelas daripada PATCH yang samar.
  • Penamaan yang konsisten untuk field, misalnya created_at di semua tempat.

Status code dan error

Gunakan kode HTTP standar agar client tahu apa yang terjadi tanpa perlu membaca teks:

KodeArtiDipakai saat
200OKPembacaan atau pembaruan berhasil
201CreatedPOST berhasil membuat sesuatu
204No ContentBerhasil tanpa data untuk dikembalikan
400Bad RequestInput gagal validasi
401UnauthorizedBelum login atau token tidak valid
403ForbiddenSudah login tetapi tidak punya izin
404Not FoundData tidak ada, atau pemanggil tidak boleh tahu bahwa data itu ada
409ConflictDuplikat, atau slot sudah dipesan
429Too Many RequestsBatas rate limit tercapai
500Server ErrorAda yang rusak di sisi Anda

Kembalikan error dalam satu bentuk JSON yang konsisten, misalnya {"error": {"code": "slot_taken", "message": "Waktu itu sudah tidak tersedia."}}, dan jangan pernah menyertakan stack trace atau error database dalam respons.

Pilihan dan trade-off

KeputusanPilihan sederhanaAlternatif
Lokasi APIAPI route di dalam framework web AndaLayanan API terpisah, berguna untuk beberapa client atau bahasa yang berbeda
AutentikasiSession cookie untuk aplikasi web Anda sendiriToken (bearer token atau API key) untuk aplikasi mobile dan pihak ketiga
Pagination?page=2&limit=20Cursor-based (?after=...), lebih stabil untuk daftar besar yang sering berubah
VersioningTidak ada sampai ada pengguna dari luar/v1/ di path setelah orang lain bergantung padanya
DokumentasiREADME berisi daftar routeSpesifikasi OpenAPI, yang bisa diubah alat menjadi dokumentasi interaktif dan kode client

Langkah demi langkah

  1. Daftarkan resource dan route seperti di atas, termasuk siapa yang boleh memanggil setiap route.
  2. Modelkan data di database Anda dengan field dan relasi yang dibutuhkan.
  3. Bangun route baca lebih dulu, lalu create, update, dan delete.
  4. Validasi input pada setiap penulisan data dengan library skema: field wajib, tipe, panjang, dan nilai yang diizinkan. Tolak field yang tidak dikenal.
  5. Tambahkan autentikasi, lalu otorisasi per data: membuka /bookings/42 harus memeriksa bahwa booking 42 milik pemanggil, bukan hanya bahwa seseorang sudah login.
  6. Paginate setiap daftar dan batasi ukuran halaman.
  7. Batasi rate untuk login dan route yang berat. Lihat rate limiting.
  8. Atur CORS hanya jika browser dari domain lain harus memanggil API, dan daftarkan origin tersebut secara eksplisit. Cara memperbaiki error CORS menjelaskan error yang akan Anda temui.
  9. Tulis dokumentasi dan tes untuk setiap route, termasuk kasus gagalnya.
  10. Deploy dengan secret di environment variable, HTTPS, log, dan health check.

Prompt untuk AI builder Anda

Scaffold:

Buat REST API untuk booking dengan route berikut: GET /api/health, GET /api/bookings (dengan pagination, maksimal 50 per halaman), POST /api/bookings, GET /api/bookings/:id, PATCH /api/bookings/:id, DELETE /api/bookings/:id. Simpan data di database kami. Validasi body request dengan library skema dan tolak field yang tidak dikenal. Kembalikan error JSON dalam bentuk {"error": {"code", "message"}} dengan status code yang tepat (400, 401, 403, 404, 409). Simpan secret di environment variable.

Keamanan:

Wajibkan login di setiap route booking. Pada setiap pembacaan, pembaruan, dan penghapusan, periksa di server bahwa booking tersebut milik pengguna saat ini; kembalikan 404 jika bukan. Jangan pernah menerima ID pengguna atau role dari body request. Batasi POST /api/bookings menjadi 20 per menit per pengguna. Catat error di server tanpa mengembalikan stack trace.

Dokumentasi:

Tulis deskripsi OpenAPI untuk route ini, dan README singkat dengan contoh request dan respons untuk setiap route.

Menguji API Anda

Uji dari luar frontend, karena penyerang pun akan melakukannya:

  • Setiap route berfungsi dengan input yang valid dan mengembalikan bentuk serta kode yang didokumentasikan
  • Field yang hilang atau tidak valid mengembalikan 400 dengan pesan yang jelas
  • Tanpa token, setiap route yang dilindungi mengembalikan 401
  • Pengguna A yang meminta data milik pengguna B berdasarkan ID mendapat 404 atau 403
  • Daftar di-paginate; limit yang sangat besar dibatasi
  • Create yang duplikat atau bertentangan mengembalikan 409, bukan 500
  • Batas rate mengembalikan 429
  • Respons error tidak berisi stack trace, SQL, atau secret
  • CORS hanya mengizinkan origin yang Anda maksudkan

Kesalahan umum

  • Memeriksa login tetapi tidak kepemilikan. Ini celah API yang paling umum: pengguna mana pun yang sudah login bisa membaca data apa pun dengan mengubah ID.
  • Mempercayai client. Harga, role, dan ID pengguna dari body request bisa diubah.
  • Mengembalikan seluruh baris database. Hash password dan field internal ikut bocor. Pilih apa yang disertakan dalam setiap respons.
  • Daftar tanpa batas. Satu request untuk semua data bisa memperlambat seluruh aplikasi.
  • 200 OK dengan pesan error di dalamnya. Client dan monitoring tidak bisa tahu bahwa request gagal.
  • CORS diset untuk mengizinkan semua pada API yang memakai cookie.
  • Tidak ada health check atau log, sehingga Anda baru tahu ada gangguan dari keluhan pengguna.

Untuk pemeriksaan yang lebih luas sebelum rilis, lihat checklist keamanan untuk aplikasi yang dibuat dengan AI.

Membangun REST API di Mythex

Anda bisa meminta Mythex membuat API sebagai bagian dari aplikasi atau sebagai layanan tersendiri. Resep dokumentasi REST API backend berisi prompt awal: sebutkan framework dan route Anda, minta error JSON yang jelas, simpan secret di environment variable, dan sertakan Dockerfile. Backend container di Node, Python, C#, Java, dan lainnya dipublikasikan lewat Dockerfile, dan Mythex menangani deploy dari Publish (API backend). Sebuah proyek bisa menjalankan website dan server API berdampingan, dan Anda bisa berpindah di antara keduanya dalam preview. Simpan kunci sebagai secret proyek, dan jika API membutuhkan database, minta di chat. Untuk pekerjaan terjadwal di sekitar API Anda, lihat cara menjalankan background job.

Pertanyaan

Apa itu REST API?

REST API adalah cara bagi program untuk mengakses data aplikasi Anda melalui HTTP. Setiap jenis data adalah resource dengan URL sendiri, misalnya /orders, dan metode standar digunakan untuk mengolahnya: GET untuk membaca, POST untuk membuat, PATCH atau PUT untuk memperbarui, dan DELETE untuk menghapus. Data biasanya dikirim dalam format JSON.

Bahasa pemrograman apa yang sebaiknya dipakai untuk membuat REST API?

Pakai yang bisa dirawat oleh Anda atau tim Anda. Node.js dengan Express atau Fastify, Python dengan FastAPI, serta framework C# atau Java sama-sama baik. Aturan desain untuk route, status code, validasi, dan autentikasi lebih penting daripada bahasanya.

Bagaimana cara mengamankan REST API?

Wajibkan autentikasi di setiap route yang tidak publik, periksa di server bahwa pemanggil boleh mengakses setiap data tertentu, validasi semua input, gunakan HTTPS, batasi jumlah request, dan simpan secret di environment variable. Jangan pernah mempercayai ID atau role yang dikirim oleh client.

Apakah saya perlu backend terpisah untuk REST API?

Tidak selalu. Framework seperti Next.js bisa melayani API route bersama halaman. Layanan API terpisah masuk akal jika beberapa client (web, mobile, mitra) memakainya, atau jika perlu bahasa dan skala tersendiri.

Mythex · Pricing · Bangun apa pun dengan AI · Template website dan aplikasi · Mythex dibandingkan · Glosarium membuat aplikasi dengan AI · Alat gratis untuk membuat aplikasi dengan AI · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)