Vapor 大型教程
数据库 CRUD 操作
RESTful API 提供了一套用 URL + HTTP 方法调用 CRUD 的标准方式。本文用 Vapor 3 代码实现 Acronym 的增、查、改、删四个接口。
RESTful APIs 提供了一种在应用中调用 CRUD 函数的方式。通常我们有一个 URL 对应数据模型,在这个 URL 基础上配合 HTTP 不同的请求 Method,就可以执行相应的 CRUD 操作,例如:
- POST
https://localhost:8080/api/acronyms创建一个新的缩略语 - GET
https://localhost:8080/api/acronyms获取所有的缩略语数据 - GET
https://localhost:8080/api/acronyms/<ID>获取指定 ID 的缩略语 - PUT
https://localhost:8080/api/acronyms/<ID>更新指定 ID 的缩略语 - DELETE
https://localhost:8080/api/acronyms/<ID>删除指定 ID 的缩略语
Create
POST https://localhost:8080/api/acronyms 创建一个新的缩略语
router.post("api", "acronyms") { (req) -> Future<Acronym> in
return try req.content.decode(Acronym.self)
.flatMap(to: Acronym.self) { (acronym) in
return acronym.save(on: req)
}
}
Retrieve
GET https://localhost:8080/api/acronyms 获取所有的缩略语数据
router.get("api", "acronyms") { (req) -> Future<[Acronym]> in
return Acronym.query(on: req).all()
}
GET https://localhost:8080/api/acronyms/<ID> 获取指定 ID 的缩略语,需要数据模型遵循 Parameter 协议:
// 使可以作为请求参数
extension Acronym: Parameter {}
router.get("api", "acronyms", Acronym.parameter) { (req) -> Future<Acronym> in
return try req.parameters.next(Acronym.self)
}
Update
PUT https://localhost:8080/api/acronyms/<ID> 更新指定 ID 的缩略语
router.put("api","acronyms",Acronym.parameter) { (req) -> Future<Acronym> in
return try flatMap(to: Acronym.self, req.parameters.next(Acronym.self), req.content.decode(Acronym.self)) { (acronym, updateAcronym) -> Future<Acronym> in
acronym.short = updateAcronym.short
acronym.long = updateAcronym.long
return acronym.save(on: req)
}
}
Delete
DELETE https://localhost:8080/api/acronyms/<ID> 删除指定 ID 的缩略语
router.delete("api","acronyms", Acronym.parameter) { (req) -> Future<HTTPStatus>in
return try req.parameters.next(Acronym.self)
.delete(on: req)
.transform(to: HTTPStatus.noContent)
}