Content
在 Vapor 3 中, 所有的内容类型 (JSON, protobuf, URLEncodedForm, Multipart 等) 都被视为相同, 解析和序列化所需的只是一个 Codable 类型或者结构体.
对于本指南, 我们将使用 JSON 举例. 但请记住, 对于任何支持的内容类型, 使用的 API 都是相同的.
Request
让我们看看如何解析下面的 HTTP 请求.
POST /login HTTP/1.1Content-Type: application/json{"email": "user@vapor.codes","password": "don't look!"}
首先, 创建一个表示你期望的数据的结构体或者类.
import Vaporstruct LoginRequest: Content {var email: Stringvar password: String}
然后简单地让这个结构体或者类遵守 Content 协议.
现在我们做好准备解析这个 HTTP 请求了.
router.post("login") { req -> Future<HTTPStatus> inreturn req.content.decode(LoginRequest.self).map(to: HTTPStatus.self) { loginRequest inprint(loginRequest.email) // user@vapor.codesprint(loginRequest.password) // don't look!return .ok}}
在这里使用 .map(to:) 因为 req.content.decode(_:) 返回一个 future(期货).
Response
让我们看看该怎么创建以下 HTTP 响应.
HTTP/1.1 200 OKContent-Type: application/json{"name": "Vapor User","email": "user@vapor.codes"}
就像解析一样, 先创建一个表示你期望数据的结构体或者类.
import Vaporstruct User: Content {var name: Stringvar email: String}
然后让这个结构体或者类遵守 Content 协议.
现在我们做好准备序列化这个 HTTP 响应了.
router.get("user") { req -> User inreturn User(name: "Vapor User",email: "user@vapor.codes")}
现在你知道在 Vapor 中如何序列化和解析数据了!
tip
查看 Vapor → Content 获得更多信息.
