Vapor文档学习卅一: HTTP -Responser

Responder是一个简单的协议,它定义了能够接收Request并返回Response的对象的行为。尤其是在Vapor中,它是连接DropletServer的核心API。让我们看看它是如何定义的:

public protocol Responder {
    func respond(to request: Request) throws -> Response
}

Responser协议和Droplet关系密切,也与Server相联系。一般用户不会和其产生交互。

Simple

当然,Vapor为我们提供了一些便利的方法,在实际当中我们经常会调用:

try drop.run()

Manual

像我们提到的,Vapor的Droplet就遵守了Responser协议,并连接Server。这意味我们如果想手动启动服务器,可以这样做:

let server = try Server, Serializer>(port: port)
try server.start(responder: droplet)  { error in
    print("Got error: \(error)")
}

Advanced

我们可以让自己的对象遵守Responser协议,然后将其传递给服务器。比如下面的例子:

final class Responder: HTTP.Responder {
    func respond(to request: Request) throws -> Response {
        let body = "Hello World".makeBody()
        return Response(body: body)
    }
}

这只会为每个请求返回“Hello World”,最常见的用法是与某种特定类型的路由相关联。

final class Responder: HTTP.Responder {
    let router: Router = ...

    func respond(to request: Request) throws -> Response {
        return try router.route(request)
    }
}

然后我们将其传给server,并运行服务器:

let server = try Server, Serializer>(port: port)

print("visit http://localhost:\(port)/")
try server.start(responder: Responder()) { error in
    print("Got error: \(error)")
}

这可以用作手动实现某些功能的跳出点。

Client

HTTP.Client本身也遵守了Responser协议,但是它不处理Request本身,而是将其传递给底层URI。

你可能感兴趣的:(Vapor文档学习卅一: HTTP -Responser)