Route Group & Middleware
Penjelasan
Saat aplikasi punya banyak route yang berbagi prefix path atau perilaku yang sama (mis. semua endpoint di bawah /api/v1, atau semua endpoint yang butuh autentikasi), kamu bisa mengelompokkannya lewat app.grouped("prefix") yang mengembalikan RouteBuilder baru — route yang didaftarkan pada grup ini otomatis mendapat prefix tersebut. Middleware adalah komponen yang memproses request sebelum sampai ke handler (atau memproses response sebelum dikirim balik), misalnya untuk logging, autentikasi, atau CORS. Middleware diterapkan lewat app.grouped(SomeMiddleware()) — hanya route yang didaftarkan lewat grup itu yang terkena middleware tersebut, route lain di luar grup tidak terpengaruh.
Contoh Konsep
import Vapor
func routes(_ app: Application) throws {
let api = app.grouped("api", "v1")
api.get("catatan") { req -> String in
return "Daftar catatan (via /api/v1/catatan)"
}
let terproteksi = api.grouped(LogMiddleware())
terproteksi.get("admin", "statistik") { req -> String in
return "Statistik khusus admin"
}
}
struct LogMiddleware: Middleware {
func respond(to request: Request, chainingTo next: Responder) -> EventLoopFuture<Response> {
request.logger.info("Request masuk: \(request.url.path)")
return next.respond(to: request)
}
}
Praktikum
Buat grup route app.grouped("admin") lalu tambahkan route GET "dashboard" di dalamnya yang mengembalikan String "Dashboard admin".
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
app.grouped(...) tidak memutasi app aslinya — ia mengembalikan builder BARU. Kalau kamu mendaftarkan route langsung ke app setelah membuat grup, route itu tidak akan ikut ter-prefix atau kena middleware grup tersebut.