Study
Vapor

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".

Editor Latihan

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.