val service = new Service[HttpRequest, HttpResponse] {
def apply(request: HttpRequest) =
Future(new DefaultHttpResponse(HTTP_1_1, OK))
}
val server: Server = ServerBuilder() // 4
.codec(Http())
.bindTo(new InetSocketAddress(8080))
.name("HttpServer")
.build(service)
class Authorize extends SimpleFilter[HttpRequest, HttpResponse] {
def apply(request: HttpRequest,
continue: Service[HttpRequest, HttpResponse]) = {
if ("shared secret" == request.getHeader("Authorization")) {
continue(request)
} else {
Future.exception(
new IllegalArgumentException("You don't know the secret")
)
}
}
}
object HttpServer extends App {
class HandleExceptions extends SimpleFilter[HttpRequest, HttpResponse] {...}
class Authorize extends SimpleFilter[HttpRequest, HttpResponse] {...}
class Respond extends Service[HttpRequest, HttpResponse] {...}
val handleExceptions = new HandleExceptions
val authorize = new Authorize
val respond = new Respond
val myService: Service[HttpRequest, HttpResponse]
= handleExceptions andThen authorize andThen respond
val server: Server = ServerBuilder()
.name("myService")
.codec(Http())
.bindTo(new InetSocketAddress(8080))
.build(myService)
}
val myService: Service[Request, Response] = byMethodAndPath {
case (Method.Get, Root / "user" / Integer(userId)) => getUserService
case (Method.Get, Root / "group" / Integer(groupId)) => getGroupService
}
val server: Server = ServerBuilder()
.name("myService")
.codec(RichHttp[Request](Http()))
.bindTo(new InetSocketAddress(8080))
.build(myService)
def byMethodAndPath(routes: PartialFunction[(HttpMethod, Path),
Service[Request, Response]]) =
new RoutingService(
new PartialFunction[Request, Service[Request, Response]] {
def apply(request: Request) =
routes((request.method, Path(request.path)))
def isDefinedAt(request: Request) =
routes.isDefinedAt((request.method, Path(request.path)))
}
)