mirror of https://github.com/vapor/docs.git
2.6 KiB
2.6 KiB
Routing groups
Routing groups are used to simplify routing. A routing group can contain middleware and/or path components.
Middleware
All Middleware will be appended inbetween the existing middleware chain and the responder.
let group = router.grouped(middleware0, middleware1, middlewareN)
// This registered route will pass through the following chain
// middleware0 -> middleware1 -> middlewareN -> route
group.on(.get, "hello") { request in
return ...
}
Closure based syntax also works, when working with route register functions for example.
router.group(middleware0, middleware1, middlewareN) { group in
// register routes
}
Like any closure, you can provide a function here
func register(to router: Router) {
// This registered route will pass through the following chain
// middleware0 -> middleware1 -> middlewareN -> route
router.get("hello") { request in
return ...
}
}
router.group(middleware0, middleware1, middlewareN, use: register)
Path components
Like the middleware chain, path components will be appended in between the existing components and the route.
let group = router.grouped("api", "v1")
// This registered route will be on the following path
// `GET /api/v1/hello`
group.get("hello") { request in
return ...
}
The same syntax for grouping is available as with middleware.
router.group("api", "v1") { group in
// register routes
}
Like any closure, you can provide a function here, just like middleware.
func register(to router: Router) {
// This registered route will be on the following path
// `GET /api/v1/hello`
router.get("hello") { request in
return ...
}
}
router.group("api", "v1", use: register)
Parameters
Parameters inside Groups will affect routes.
func register(to router: SyncRouter) {
// This registered route will be on the following path
// `GET /api/v1/\(string_here)/echo`
//
// Will return the `string_here` parameter
router.get("echo") { request in
let string_here = try request.parameters.next(String.self)
return string_here
}
}
router.group("api", "v1", String.parameter, use: register)
WARNING
Using parameters inside a group might have unforeseen effects:
let group = router.grouped("api", "v1", String.parameter)
group.get(String.parameter) { request in
// Expects the route specific string parameter
// Instead gets the grouped string parameter
let parameter = try request.parameters.next(String.self)
...
}