Routing

路由是查找传入请求的适当响应的过程.

创建路由

Vapor 中的默认路由是 EngineRouter, 你可以通过实现路由器协议的路由来实现自定义路由.

  1. let router = try EngineRouter.default()

这通常在 configure.swift 文件中实现.

注册路由

想象一下当有人访问 GET /users 的时候想要返回用户列表, 抛开授权, 路由可能会是这样:

  1. router.get("users") { req in
  2. return // fetch the users
  3. }

Vapor 中, 路由通常由 .get, .put, .post, .patch.delete 实现. 你可以用 / 或者以逗号分隔的字符串来表示路径, 从可读性考虑我们推荐使用逗号分隔.

  1. router.get("path", "to", "something") { ... }

路由

添加路由的最佳位置是 routes.swift 文件. 使用 routes(_ router: Router) 方法提供的路由器参数来注册路由.

  1. import Vapor
  2. public func routes(_ router: Router) throws {
  3. // Basic "Hello, world!" example
  4. router.get("hello") { req in
  5. return "Hello, world!"
  6. }
  7. /// ...
  8. }

查看 入门 → Content 学习路由的闭包可以返回什么值.

参数

有些时候你可能希望路由路径的某一部分是动态的, 比如你想要根据传入的 ID 来获取数据: GET /users/:id

  1. router.get("users", Int.parameter) { req -> String in
  2. let id = try req.parameter(Int.self)
  3. return "requested id #\(id)"
  4. }

不传递字符串, 而是传递你希望的参数 类型, 在这个例子中, UserInt 类型的 ID.

tip

你也可以定义自己的 自定义参数类型

注册路由之后

在注册路由之后, 你需要将路由注册为一个 入门 → 服务