irpas技术客

【Vapor】05 Chapter 7: CRUD Database Operations_豪冷啊

irpas 8399

0x00 Chapter 7: CRUD Database Operations

在 routes.swift 文件内写各种路由 操作数据库的记录

1.create 创建记录,之前的文章已经写过了 需要提交数据

url: http://127.0.0.1:8080/api/acronyms method: POST parameters: {"short": "TGD", "long":"Tomorrow is a good day"}

app.post("api", "acronyms") { req -> EventLoopFuture<Acronym> in let acronym = try req.content.decode(Acronym.self) return acronym.save(on: req.db).map { acronym } }

2.retrieve 获取所有记录

url: http://127.0.0.1:8080/api/acronyms method: GET parameters: 无

app.get("api", "acronyms") { req -> EventLoopFuture<[Acronym]> in Acronym.query(on: req.db).all() }

3.retrieve a single acronym 根据 ID 查询记录

url: http://127.0.0.1:8080/api/acronyms/<ID> method: GET parameters: ID

app.get("api", "acronyms", ":acronymID") { req -> EventLoopFuture<Acronym> in Acronym.find(req.parameters.get("acronymID"), on: req.db) .unwrap(or: Abort(.notFound)) }

4.update 根据 ID 更新记录

url: http://127.0.0.1:8080/api/acronyms/<ID> method: UPDATE parameters: {"short": "TGD1", "long":"Tomorrow is a good day1"}

app.put("api", "acronyms", ":acronymID") { req -> EventLoopFuture<Acronym> in let updatedAcronym = try req.content.decode(Acronym.self) return Acronym.find(req.parameters.get("acronymID"), on: req.db) .unwrap(or: Abort(.notFound)).flatMap { acronym in acronym.short = updatedAcronym.short acronym.long = updatedAcronym.long return acronym.save(on: req.db).map { acronym } } }

5.delete 根据 ID 删除记录

url: http://127.0.0.1:8080/api/acronyms/<ID> method: DELETE parameters: ID

app.delete("api", "acronyms", ":acronymID") { req -> EventLoopFuture<HTTPStatus> in Acronym.find(req.parameters.get("acronymID"), on: req.db) .unwrap(or: Abort(.notFound)) .flatMap { acronym in acronym.delete(on: req.db) .transform(to: .noContent) } }

6.filter 根据参数查询记录

url: http://127.0.0.1:8080/api/acronyms/search?term=OMG method: GET parameters: 无

app.get("api", "acronyms", "search") { req -> EventLoopFuture<[Acronym]> in guard let searchTerm = req.query[String.self, at: "term"] else { throw Abort(.badRequest) } return Acronym.query(on: req.db) .filter(\.$short == searchTerm) .all() }

filter group url: http://127.0.0.1:8080/api/acronyms/search?term=Oh+My+God method: GET parameters: 无

app.get("api", "acronyms", "search") { req -> EventLoopFuture<[Acronym]> in guard let searchTerm = req.query[String.self, at: "term"] else { throw Abort(.badRequest) } return Acronym.query(on: req.db).group(.or) { or in or.filter(\.$short == searchTerm) or.filter(\.$long == searchTerm) }.all() }

7.first result 查询第一条记录

url: http://127.0.0.1:8080/api/acronyms/first method: GET parameters: 无

app.get("api", "acronyms", "first") { req -> EventLoopFuture<Acronym> in Acronym.query(on: req.db).first().unwrap(or: Abort(.notFound)) }

8.sorting results 对所有查询记录进行排序

url: http://127.0.0.1:8080/api/acronyms/sorted method: GET parameters: 无

app.get("api", "acronyms", "sorted") { req -> EventLoopFuture<[Acronym]> in Acronym.query(on: req.db).sort(\.$short, .ascending).all() }
0x01 我的作品

欢迎体验我的作品之一:小笔记 一步到位,好帮手! App Store 搜索即可~



1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Vapor05 #Chapter #7 #CRUD #database #operations