美文网首页
Vapor-Content

Vapor-Content

作者: tsiic | 来源:发表于2019-04-30 17:36 被阅读0次

在Vapor3,所有内容类型(JSON, protobuf, URLEncodedForm, Multipart, etc)都被同等对待。需要解析和序列号的东西都是遵循Codable协议的类或结构体。

本文以JSON为例。但要记住对于所有支持的内容类型API都是一样的。

请求

先来看看对如下一个HTTP请求我们是如何进行响应的。

POST /login HTTP/1.1
Content-Type: application/json

{
    "email": "user@vapor.codes",
    "password": "don't look!"
}

首先,创建一个类或者结构体来表达我们所期望收到的数据格式。然后让它遵循Content协议。

import Vapor

struct LoginRequest: Content {
    var email: String
    var password: String
}

然后就能够解析这个请求了。

router.post("login") { req -> Future<HTTPStatus> in
    return try req.content.decode(LoginRequest.self).map(to: HTTPStatus.self) { loginRequest in
        print(loginRequest.email) // user@vapor.codes
        print(loginRequest.password) // don't look!
        return .ok
    }
}

因为req.content.decode(_:)返回的数据类型是future,我们在这里用了.map(to:)进行转换。

响应

接下来让我们看看如何生成如下响应.

HTTP/1.1 200 OK
Content-Type: application/json

{
    "name": "Vapor User",
    "email": "user@vapor.codes"
}

和解析请求类似,先创建一个结构或者类来表示我们期望的返回类型,并遵循Content协议。然后就可以编码为HTTP响应了。

import Vapor

struct User: Content {
    var name: String
    var email: String
}
router.get("user") { req -> User in
    return User(
        name: "Vapor User",
        email: "user@vapor.codes"
    )
}

在Vapor中编解码就是如此简单.

参考资料

  1. Content - Vapor Docs

相关文章

  • Vapor-Content

    在Vapor3,所有内容类型(JSON, protobuf, URLEncodedForm, Multipart,...

网友评论

      本文标题:Vapor-Content

      本文链接:https://www.haomeiwen.com/subject/ahovnqtx.html