VAPOR SERIES

Vapor 服务端系列(Vapor 3)

31 篇文章

这一组覆盖「服务端」全部章节,从工具箱、路由、异步,到 Fluent 数据库建模、关系、认证、测试与上线。全部代码为源站一致的 Vapor 3 写法。

开发环境准备 封面
Vapor 大型教程

开发环境准备

动手写第一行 Vapor 代码前,先把开发环境搭好。本文带你分别在 macOS 和 Ubuntu 上安装 Swift 与 Vapor 工具箱,并配置顺手的编辑器。

Vapor 工具箱能力 封面
Vapor 大型教程

Vapor 工具箱能力

Vapor 工具箱(Toolbox)是一把瑞士军刀。本文带你认识它的常用命令,并用 vapor new 创建、运行你的第一个 Vapor 项目。

添加路由 封面
Vapor 大型教程

添加路由

路由是「请求地址」和「处理代码」之间的桥梁。本文讲解什么是路由,并动手在 routes.swift 里添加几个 GET 路由。

HTTP 基础 封面
Vapor 大型教程

HTTP 基础

写 Web 服务绕不开 HTTP。本文梳理 HTTP 协议的核心概念:请求与响应的结构、常用方法、状态码分类,为后续写接口打基础。

返回 JSON 数据 封面
Vapor 大型教程

返回 JSON 数据

现代接口大多返回 JSON。本文用 Vapor 的 Content 协议,让结构体自动编成 JSON,并通过一个 POST 路由把数据原样返回。

接收客户端数据 封面
Vapor 大型教程

接收客户端数据

接口不只是返回数据,还要能收数据。本文用 Vapor 的 Content 协议从 POST 请求中解码 JSON,拿到客户端传来的字段。

异步与 Future 封面
Vapor 大型教程

异步与 Future

Vapor 的异步模型初学容易发懵。本文用四个请求的例子讲清「异步非阻塞 IO」,并介绍 Future / Promise 及常用操作,帮你跨过这道坎。

SwiftNIO 原理 封面
Vapor 大型教程

SwiftNIO 原理

Vapor 跑在 SwiftNIO 之上。本文带你俯瞰 SwiftNIO 的架构:事件循环、Channel 流水线、Bootstrap、ByteBuffer,以及 Promise/Future 的协作方式。

控制器与 RouteCollection 封面
Vapor 大型教程

控制器与 RouteCollection

当项目变大、路由越来越多时,一条条手写 router 会难以维护。本文教你用控制器(Controller)把零散路由组织成独立模块,让代码清晰、好维护。

配置数据库 封面
Vapor 大型教程

配置数据库

Vapor 3 原生支持 SQLite、MySQL、PostgreSQL 三种关系型数据库。本文带你认识它们,并学会用 configure.swift 把 SQLite 配起来开始开发。

Fluent 模型持久化 封面
Vapor 大型教程

Fluent 模型持久化

Fluent 是 Vapor 3 里的 ORM(对象关系映射)。本文带你定义第一个数据模型 Acronym,并让它通过 Migration 自动建表、持久化到数据库。

数据库 CRUD 操作 封面
Vapor 大型教程

数据库 CRUD 操作

RESTful API 提供了一套用 URL + HTTP 方法调用 CRUD 的标准方式。本文用 Vapor 3 代码实现 Acronym 的增、查、改、删四个接口。

Fluent 查询 封面
Vapor 大型教程

Fluent 查询

除了简单的 all() / first(),Fluent 还能做条件过滤、或查询、取首条和排序。本文给出 Vapor 3 写法下的常用查询代码示例。

数据库种子数据 封面
Vapor 大型教程

数据库种子数据

当所有写接口都被认证保护后,刚建好的空库却连第一个用户都创建不了。本文教你用 Migration 在初始化时播下一个管理员账号。

父子关系(外键) 封面
Vapor 大型教程

父子关系(外键)

父子关系描述一对一或一对多,例如一个人可以有多个宠物、一个宠物只能有一个主人。本文用 Vapor 3 的外键方式实现它,并加上外键约束。

兄弟关系(多对多) 封面
Vapor 大型教程

兄弟关系(多对多)

兄弟关系就是多对多。本文用一张 Pivot(支点)表记录缩略语与类别的对应关系,并在 Vapor 3 中实现关联、解除和双向查询。

用户认证概述 封面
Vapor 大型教程

用户认证概述

认证是确认“你是谁”的过程。本文带你给 TIL 应用加上密码哈希、用户名唯一约束,并让接口在返回时不再泄露密码。

Basic 认证 封面
Vapor 大型教程

Basic 认证

本文给创建缩略语的接口加上 HTTP Basic 认证,只有带上正确“用户名 + 密码”的请求才能通过。

Token 认证 封面
Vapor 大型教程

Token 认证

Basic 认证后只有登录用户能创建缩略语,但其它请求每次都传密码太麻烦。本文让用户登录一次换取 token,之后请求只带 token 即可。

为认证更新测试用例 封面
Vapor 大型教程

为认证更新测试用例

接口加上认证后,原本的单元测试会全部失败。本文更新测试辅助方法和用例,让带 token 的请求也能被自动化测试覆盖。

构建 REST API 封面
Vapor 大型教程

构建 REST API

用 REST 风格把“增删改查”映射成统一的 URL 与 HTTP 方法,客户端对接起来更省心、也更规范。

API 模板与约定 封面
Vapor 大型教程

API 模板与约定

本文拆解 Vapor 模板工程,弄清楚 Package.swift、Sources、Tests 各自代表什么,以及程序到底从哪里启动。

工程结构 封面
Vapor 大型教程

工程结构

上一节用 vapor new 以通用 api 模板创建了 HelloVapor 项目。本文看一下模板项目的目录结构,理解功能模块是如何划分的。

切换到 PostgreSQL 封面
Vapor 大型教程

切换到 PostgreSQL

之前为了方便一直用基于文件的 SQLite,但它不支持外键约束。本文用 Docker 起 PostgreSQL,并在工程里改接 FluentPostgreSQL,验证外键约束真正生效。

测试基础 封面
Vapor 大型教程

测试基础

本文带你从零给 Vapor 3 项目加上单元测试:用 SPM 测试目标跑接口、区分测试数据库、并在每次运行前重置数据库,让你的 API 改动安心落地。

测试进阶与重构 封面
Vapor 大型教程

测试进阶与重构

一个测试函数把所有逻辑堆在一起不易复用。本文把建应用、重置数据库、发请求、解析响应等重复逻辑抽成扩展,再配合 setUp/tearDown,让测试代码清爽可维护。

常见错误排查 封面
Vapor 大型教程

常见错误排查

遇到诡异编译错误、找不到文件或配置错乱?本文给出几条实用的 Vapor 排错与清理命令,必要时再去社区求助。

其它测试用例 封面
Vapor 大型教程

其它测试用例

前面只写了一个用例,这里再多写几个练手:通过 API 新增用户、按 id 取单个用户,以及测试 User/Acronym、Acronym/Category 之间的关联。

在 Linux 上测试 封面
Vapor 大型教程

在 Linux 上测试

部署到 Linux 与本地 Mac 的 Foundation 实现不同,必须保证在 Linux 上也能跑通测试。本文讲 LinuxMain 手动登记测试用例,以及用 Docker 本地模拟 Linux 跑全套。

部署到私有服务器 封面
Vapor 大型教程

部署到私有服务器

不想依赖第三方平台?本文教你在自己的 Ubuntu 云服务器上用 Docker 跑起 PostgreSQL,再用 nginx 做端口转发,把 Vapor 3 应用部署上线。

部署到 Vapor Cloud 封面
Vapor 大型教程

部署到 Vapor Cloud

一条命令把 Vapor 3 项目推上云。本文展示 vapor cloud deploy 的完整部署流程,以及如何取消部署并清理资源。