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

数据库 CRUD 操作

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

RESTful APIs 提供了一种在应用中调用 CRUD 函数的方式。通常我们有一个 URL 对应数据模型,在这个 URL 基础上配合 HTTP 不同的请求 Method,就可以执行相应的 CRUD 操作,例如:

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)
}

本系列其他文章