Back to list

Vapor-style Route Controller

Lv.51227@mukitaro0 playsJan 2, 2026

Vapor route controller pattern. Server-side Swift web framework.

preview.swift
Swift
1import Vapor
2
3struct User: Content {
4 var id: UUID?
5 var name: String
6 var email: String
7}
8
9struct UserController: RouteCollection {
10 func boot(routes: RoutesBuilder) throws {
11 let users = routes.grouped("users")
12 users.get(use: index)
13 users.post(use: create)
14 users.group(":userID") { user in
15 user.get(use: show)
16 user.put(use: update)
17 user.delete(use: delete)
18 }
19 }
20
21 func index(req: Request) async throws -> [User] {
22 return [User(id: UUID(), name: "Alice", email: "alice@example.com")]
23 }
24
25 func show(req: Request) async throws -> User {
26 guard let userID = req.parameters.get("userID", as: UUID.self) else {
27 throw Abort(.badRequest)
28 }
29 return User(id: userID, name: "User", email: "user@example.com")
30 }
31
32 func create(req: Request) async throws -> User {
33 let user = try req.content.decode(User.self)
34 return user
35 }
36
37 func update(req: Request) async throws -> User {
38 let user = try req.content.decode(User.self)
39 return user
40 }
41
42 func delete(req: Request) async throws -> HTTPStatus {
43 return .noContent
44 }
45}

Custom problems are not included in rankings