Routing Berbasis File
Referensi: Deno File-based Routing Tutorial
Routing berbasis file adalah konsep inti Deserve - struktur sistem file Anda menjadi struktur API secara otomatis, mengikuti pola yang sama seperti Next.js tapi untuk API Deno.
Cara Kerja
Deserve memindai direktori routes Anda dan membuat endpoint dari struktur file. Semua ekstensi yang didukung (.ts, .js, .tsx, .jsx, .mjs, .cjs) bekerja dengan cara yang sama:
routes/
├── index.ts → GET /
├── about.mjs → GET /about
├── users.js → GET /users
├── users/[id].ts → GET /users/:id
└── users/[id]/
└── posts/
└── [postId].jsx → GET /users/:id/posts/:postIdAturan Inti
1. Nama File Menjadi Rute
index.ts,index.js,index.mjs→/(root)about.ts,about.js,about.mjs→/aboutusers.ts,users.js,users.cjs→/users
Semua ekstensi yang didukung (.ts, .js, .tsx, .jsx, .mjs, .cjs) bekerja identik.
2. Folder Membuat Rute Bersarang
users/[id].ts→/users/:idusers/[id]/posts.ts→/users/:id/posts
3. Parameter Dinamis Menggunakan Sintaks [param]
[id].ts→ parameter:id[userId].ts→ parameter:userId[postId].ts→ parameter:postId
4. HTTP Methods Adalah Fungsi Yang Diekspor
// 1. Import tipe Context
import type { Context } from '@neabyte/deserve'
// 2. Export GET → route GET /; POST → POST /
export function GET(ctx: Context): Response {
return ctx.send.json({ users: [] })
}
export async function POST(ctx: Context): Promise<Response> {
const data = await ctx.body()
return ctx.send.json({ message: 'User created', data })
}
// 3. Method lain: PUT, PATCH, DELETE, dll. — export dengan nama yang sama
// export function [method](ctx: Context): Response { ... }5. URL Case-Sensitive (Huruf Besar/Kecil Diperhitungkan)
URL bersifat case-sensitive sesuai standar HTTP:
/Users/John≠/users/john/API/v1≠/api/v1
6. Karakter Nama File Yang Valid
File dapat berisi aturan spesifik:
a-z,A-Z,0-9- Karakter alfanumerik_- Underscore (jangan awali segmen path — lihat bawah)-- Dash.- Dot~- Tilde+- Tanda plus[]- Bracket untuk parameter dinamis
Segmen yang di-skip: Folder atau nama file yang diawali _ atau @ tidak didaftar sebagai route (mis. _layout.ts, @middleware.ts, folder _components/). Berguna untuk file pendukung yang bukan endpoint.