Vapor 2.0 - JSON

前往 Vapor 2.0 - 文档目录

JSON是Vapor的一个不可分割的部分。它能提供Vapor的配置(Config),并且在请求和响应中都很容易使用。

请求(Request)

request.data中,JSON是自动提供的,同时还有表单URL编码、表单数据和查询数据。这使您可以专注于制作一个很棒的API,而不必担心将会发送什么内容类型的数据。

drop.get("hello") { request in
    guard let name = request.data["name"]?.string else {
        throw Abort(.badRequest)
    }
    return "Hello, \(name)!"
}

这将返回对任何HTTP方法或内容类型的欢迎,其中包括name,包括JSON。

只有JSON(JSON Only)

要特别针对JSON,请使用request.json属性。

drop.post("json") { request in
    guard let name = request.json?["name"]?.string else {
        throw Abort(.badRequest)
    }

    return "Hello, \(name)!"
}

响应(Response)

要使用JSON响应,只需创建一个JSON对象并向其添加值。

rop.get("version") { request in
    var json = JSON()
    try json.set("version", 1.0)
    return json
}

可转换(Convertible)

使您的类和结构的JSON可转换是一种很好的方式与api以一种有组织和DRY的方式进行交互。

能被描绘的(Representable)

当某个对象继承JSONRepresentable时,它就可以转换为JSON。

extension User: JSONRepresentable {
    func makeJSON() throws -> JSON {
        var json = JSON()
        try json.set("id", id)
        try json.set("name", name)
        try json.set("age", age)
        return json
    }
}

现在您可以简单地在您的路由中返回user.makeJSON()

drop.get("users", User.parameter) { req in
    let user = try req.parameters.next(User.self)
    return try user.makeJSON()
}

您甚至可以更进一步,将您的模型与ResponseRepresentable相一致。因为它已经是JSONRepresentable,所以您就可以获得自由的一致性。

extension User: ResponseRepresentable { }

现在您可以自己返回模型了。它将自动调用.makeJSON()

drop.get("users", User.parameter) { req in
    let user = try req.parameters.next(User.self)
    return try user
}

初始化(Initializable)

当某个对象继承JSONInitializable时,它可以从JSON创建。

extension User: JSONInitializable {
    convenience init(json: JSON) throws {
        try self.init(
            name: json.get("name"),
            age: json.get("age")
        )
    }
}

现在您可以简单地调用User(json: ...)来从json创建用户。

drop.post("users") { req in
    guard let json = req.json else {
        throw Abort(.badRequest)
    }

    let user = try User(json: json)
    try user.save()
    return user
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,958评论 19 139
  • JSON JSON和XML都是需要解析的 JSON是一种轻量级的数据格式,一般用于数据交互服务器返回给客户端的数据...
    JonesCxy阅读 1,882评论 2 10
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,246评论 4 61
  • scrapy学习笔记(有示例版) 我的博客 scrapy学习笔记1.使用scrapy1.1创建工程1.2创建爬虫模...
    陈思煜阅读 12,780评论 4 46
  • 1. Make up for 补偿 2. Slag 矿渣 3. stagnent 不流动的 4. intellec...
    Bebevino阅读 314评论 0 0