Я делаю первые шаги с Scala и Finch и работаю над очень простым API отдыха. В настоящее время все работает правильно, но я не могу обслуживать что-либо, кроме «localhost», и я не могу явно указать его.
Я гуглил в течение последнего часа и прочесал документы, но не могу на всю жизнь определить, как я должен указывать IP-адрес
object Main extends App with Endpoint.Module[IO] {
val egService = new EgService
val IPService = new IPService
val hostIP = IPService.getIP
def healthCheck: Endpoint[IO, String] = get(pathEmpty) { Ok("OK") }
def helloWorld: Endpoint[IO, Message] = get("hello") {
egService.getMessage().map(Ok)
}
def sayHello: Endpoint[IO, Message] = get("hello" :: path[String]) {
s: String =>
egService.getMessage(s).map(Ok)
}
def service: Service[Request, Response] =
Bootstrap
.serve[Text.Plain](healthCheck.handle {
case e: Exception => InternalServerError(e)
})
.serve[Application.Json](helloWorld.handle {
case e: Exception => InternalServerError(e)
} :+: sayHello.handle {
case e: Exception => InternalServerError(e)
})
.toService
println(s"Trying to serve $hostIP on port 8080...")
Await.ready(Http.server.serve(":8080", service))
}
Как я уже сказал, приведенный выше код работает точно так, как я и ожидаю, и я могу свернуть localhost:8080
, чтобы получить соответствующие ответы, но помимо этого я в тупике. Я попытался указать:
Http.server.serve(s"$hostIP:8080", service)
Но это, кажется, игнорируется. Помимо этого, я полностью сбит с толку. При использовании http4s
это так же просто, как:
BlazeServerBuilder[IO]
.bindHttp(8080, hostIP)
поэтому я чувствую, что, должно быть, упускаю что-то очевидное.