我需要查询一个总是返回 JSON 响应的 RESTful 服务。我需要联系它几次,总是提供一些我从之前的请求中学到的更多信息。我正在使用 Akka2、Scala、Jerkson 和 Spray-Can。
我目前的方法似乎有效,但它看起来很难看,需要嵌套所有内容。我读到应该有一些关于链接等的技术可用,但我不知道如何将它们应用于我当前的用例。
这是我正在谈论的代码:
def discoverInitialConfig(hostname: String, bucket: String) = {
val poolResponse: Future[HttpResponse] =
HttpDialog(httpClient, hostname, 8091)
.send(HttpRequest(uri = "/pools"))
.end
poolResponse onComplete {
case Right(response) =>
log.debug("Received the following global pools config: {}", response)
val pool = parse[PoolsConfig](response.bodyAsString)
.pools
.find(_("name") == defaultPoolname)
.get
val selectedPoolResponse: Future[HttpResponse] =
HttpDialog(httpClient, hostname, 8091)
.send(HttpRequest(uri = pool("uri")))
.end
selectedPoolResponse onComplete {
case Right(response) =>
log.debug("Received the following pool config: {}", response)
println(response.bodyAsString)
case Left(failure) =>
log.error("Could not load the pool config! {}", failure)
}
case Left(failure) =>
log.error("Could not load the global pools config! {}", failure)
}
我想你可以看到模式。联系 REST 服务,阅读它,成功后将其解析为 JSON 案例类,提取信息,然后进行下一次调用。
我这里的结构只有两层深,但我还需要添加第三层。
有没有一种技术可以改进它以获得更好的可读性,或者我只能坚持这个?如果您需要任何进一步的信息,我很乐意提供。你可以在这里看到完整的代码:https ://github.com/daschl/cachakka/blob/f969d1f56a4c90a929de9c7ed4e4a0cccea5ba70/src/main/scala/com/cachakka/cluster/actors/InitialConfigLoader.scala
谢谢,迈克尔