Vapor文档学习廿八: HTTP -Response

在接收的请求后通常要返回Response作为响应。我们做外部请求时也要接收响应对象。

public let status: Status
public var headers: [HeaderKey: String]
public var body: Body
public var data: Content

Status

http请求状态,比如.ok == 200表示请求成功。

Headers

与请求相关的请求头信息。如果准备对外部请求做出响应,你可以添加自己的keys。

let contentType = response.headers["Content-Type"]  

或者

let response = response ...
response.headers["Content-Type"] = "application/json"
response.headers["Authorization"] = ... my auth token

Extending Headers

使用扩展优化代码:

extension HTTP.KeyAccessible where Key == HeaderKey, Value == String {
    var customKey: String? {
      get {
        return self["Custom-Key"]
      }
      set {
        self["Custom-Key"] = newValue
      }
    }
}

"Custom-Key"已经包含在代码中,可以直接获取:

let customKey = response.headers.customKey

// or

let request = ...
response.headers.customKey = "my custom value"

Body

承载Response的主体内容。主要通过两种方式在初始化时进行设置。

BodyRepresentable

可以转换为字节的实例:

let response = Response(status: .ok, body: "some string")

上面的String会自动转换为body。你自己的类型也可以这样使用。

BytesDirectory

直接使用Bytes array:

let response = Response(status: .ok, body: .data(myArrayOfBytes))

Chunked

发送一个HTTP.Response的代码块,我们可以通过传递闭包发送body部分。

let response = Response(status: .ok) { chunker in
  for name in ["joe", "pam", "cheryl"] {
      sleep(1)
      try chunker.send(name)
  }

  try chunker.close()
}

Note:在chunk销毁之前一定要调用close()方法。

Content

从响应中获取content和从Request中获取一样:

let pokemonResponse = try drop.client.get("http://pokeapi.co/api/v2/pokemon/")
let names = pokemonResponse.data["results", "name"]?.array

JSON

直接使用json数据”

let json = response.json["hello"]

Key Paths

使用方法同Request中的Key Paths部分。

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

推荐阅读更多精彩内容