添加路由 封面
Vapor 大型教程

添加路由

添加路由的关键是先定清 URL、HTTP 方法和处理函数。这里在 routes.swift 里写几个 GET 路由,再看路径参数和返回值。

如果你在 Linux 上开发,可以选择自己喜欢的编辑器来修改文件,然后使用命令行 swift build 和 vapor run / swift run 来编译运行。

如果你在 Mac 上开发,那么可以使用 Xcode 这个 IDE 来进行开发。使用 vapor xcode 命令在 Xcode 中打开工程。

什么是路由(route)

当浏览器向服务器发起请求时,服务器接到来自浏览器的请求后会转发给相应端口上提供服务的应用程序,应用程序接收到请求后需要知道调用哪段代码进行相应的处理,我们把客户请求(通常是一个 URL)和应用程序针对它进行处理的代码逻辑(通常是一个函数)之间的对应关系叫作 route。

routes.swift 文件中所作的事,就是建立这种对应关系。

添加一个 GET 类型的路由

下面添加一个 GET 类型的路由,在文件 routes.swift 中添加如下代码,并使用 vapor run 或者直接在 Xcode 中运行项目:

import Vapor
func routes(_ app: Application) throws {
    app.get { req in
        return "It works!"
    }

    app.get("hello") { req -> String in
        return "Hello, world!"
    }

    app.get("hello", ":name") { req -> String in
        guard let name = req.parameters.get("name", as: String.self) else {
            return "\(HTTPStatus.notFound)"
        }
        return "Hello, \(name)"
    }
}

使用 Chrome 访问我们添加的路由,可见正常工作,新增的路由可以接收字符串类型的参数,:name 是一个命名占位符。

如何设计一条可维护的路由

路由不仅是 URL 的映射,也是接口契约的一部分。建议把资源名放在路径中,把动作放在 HTTP 方法中,例如使用 GET /api/acronyms 查询列表、POST /api/acronyms 创建数据,而不是为每个动作单独发明一个动词路径。路径参数适合唯一标识资源,查询参数适合筛选、排序和分页。

验证清单:新增路由后至少用浏览器或 curl 验证成功响应、未知路径的 404,以及缺少路径参数时的错误响应。这样可以在进入控制器和数据库之前发现拼写或匹配顺序问题。

本系列其他文章