Routing
Kelola URL, metode HTTP, parameter dinamis, dan middleware untuk REST API NusaScript.
Dasar Routing
Routing adalah proses mengarahkan permintaan HTTP ke handler yang sesuai berdasarkan metode dan path URL.
Contoh
buat app = server_baru(8080)
// GET / → halaman utama
// POST /api/data → simpan data
// GET /api/data → ambil semua data
// DELETE /api/data → hapus data
tambah_rute(app, "GET", "/", fungsi(req) {
kembalikan "Selamat datang di API NusaScript!"
})
tambah_rute(app, "GET", "/api/data", fungsi(req) {
kembalikan ke_json(["item1", "item2", "item3"])
})
tambah_rute(app, "POST", "/api/data", fungsi(req) {
kembalikan ke_json({"status": "disimpan"})
})
tambah_rute(app, "DELETE", "/api/data", fungsi(req) {
kembalikan ke_json({"status": "dihapus"})
})
jalankan_server(app)
Metode HTTP yang Didukung
| Metode | Kegunaan | Contoh URL |
|---|---|---|
GET | Ambil data | /api/pengguna |
POST | Buat data baru | /api/pengguna |
PUT | Update data lengkap | /api/pengguna |
PATCH | Update sebagian data | /api/pengguna |
DELETE | Hapus data | /api/pengguna |
Query Parameter
Ambil parameter dari URL query string (?kunci=nilai) menggunakan param_query(req, "nama").
Contoh
// URL: GET /api/pengguna?halaman=2&per_halaman=10
tambah_rute(app, "GET", "/api/pengguna", fungsi(req) {
buat halaman = param_query(req, "halaman")
buat per_halaman = param_query(req, "per_halaman")
// Nilai default jika parameter kosong
jika halaman == "" {
halaman = "1"
}
jika per_halaman == "" {
per_halaman = "20"
}
kembalikan ke_json({
"halaman" : ke_bilangan(halaman),
"per_halaman" : ke_bilangan(per_halaman),
"data" : []
})
})
Response JSON
{
"halaman": 2,
"per_halaman": 10,
"data": []
}Membaca Body Request (POST/PUT)
Baca body JSON dari request menggunakan body_json(req).
Contoh
tambah_rute(app, "POST", "/api/produk", fungsi(req) {
buat body = body_json(req)
buat nama = ambil(body, "nama")
buat harga = ambil(body, "harga")
buat stok = ambil(body, "stok")
// Validasi data
jika nama == nihil atau nama == "" {
kembalikan ke_json({"error": "Nama produk wajib diisi"})
}
jika harga == nihil {
kembalikan ke_json({"error": "Harga produk wajib diisi"})
}
kembalikan ke_json({
"sukses" : benar,
"pesan" : "Produk " + nama + " berhasil ditambahkan",
"data" : {
"nama" : nama,
"harga" : harga,
"stok" : stok
}
})
})
Pattern CRUD Lengkap
Contoh pengelolaan endpoint CRUD untuk resource produk.
Contoh — CRUD Produk
buat app = server_baru(3000)
buat db = db_buka("sqlite", "toko.db")
// Inisialisasi tabel
db_query(db, "CREATE TABLE IF NOT EXISTS produk (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nama TEXT NOT NULL,
harga REAL NOT NULL,
stok INTEGER DEFAULT 0
)")
// [C] CREATE — Tambah produk
tambah_rute(app, "POST", "/api/produk", fungsi(req) {
buat b = body_json(req)
buat nama = ambil(b, "nama")
buat harga = ambil(b, "harga")
buat stok = ambil(b, "stok")
db_query(db, "INSERT INTO produk (nama, harga, stok) VALUES (?, ?, ?)",
nama, harga, stok)
kembalikan ke_json({"sukses": benar, "pesan": "Produk ditambahkan"})
})
// [R] READ — Ambil semua produk
tambah_rute(app, "GET", "/api/produk", fungsi(req) {
buat data = db_ambil_semua(db, "SELECT * FROM produk")
kembalikan ke_json(data)
})
// [U] UPDATE — Update produk berdasarkan id
tambah_rute(app, "PUT", "/api/produk", fungsi(req) {
buat b = body_json(req)
buat id = ambil(b, "id")
buat nama = ambil(b, "nama")
buat harga = ambil(b, "harga")
db_query(db, "UPDATE produk SET nama=?, harga=? WHERE id=?",
nama, harga, id)
kembalikan ke_json({"sukses": benar, "pesan": "Produk diperbarui"})
})
// [D] DELETE — Hapus produk
tambah_rute(app, "DELETE", "/api/produk", fungsi(req) {
buat b = body_json(req)
buat id = ambil(b, "id")
db_query(db, "DELETE FROM produk WHERE id=?", id)
kembalikan ke_json({"sukses": benar, "pesan": "Produk dihapus"})
})
jalankan_server(app)
Membaca Header Request
Contoh
tambah_rute(app, "GET", "/api/profil", fungsi(req) {
// Baca header Authorization
buat token = header_req(req, "Authorization")
jika token == "" {
kembalikan ke_json({"error": "Token diperlukan"})
}
// Verifikasi token JWT
buat klaim = jwt_verifikasi(token, "rahasia-saya")
jika klaim == nihil {
kembalikan ke_json({"error": "Token tidak valid"})
}
kembalikan ke_json({
"id" : ambil(klaim, "id"),
"email" : ambil(klaim, "email")
})
})
Routing Berdasarkan Metode Request
Gunakan metode_req(req) untuk mendapatkan metode HTTP dari request.
Contoh
tambah_rute(app, "GET", "/info", fungsi(req) {
buat metode = metode_req(req)
buat path = path_req(req)
buat ip = header_req(req, "X-Forwarded-For")
kembalikan ke_json({
"metode" : metode,
"path" : path,
"ip" : ip
})
})
Referensi Fungsi Routing
| Fungsi | Parameter | Keterangan |
|---|---|---|
server_baru(port) | port: bilangan | Buat server HTTP baru |
tambah_rute(app, metode, path, fn) | — | Daftarkan rute |
jalankan_server(app) | — | Mulai server (blocking) |
param_query(req, nama) | nama: teks | Baca query parameter |
body_json(req) | — | Parse body JSON ke peta |
header_req(req, nama) | nama: teks | Baca header HTTP |
metode_req(req) | — | Ambil metode HTTP (GET/POST/dll) |
path_req(req) | — | Ambil path URL |
📌 NusaScript menggunakan model routing eksplisit. Setiap kombinasi metode + path yang berbeda harus didaftarkan secara terpisah menggunakan
tambah_rute().