Scala
Akka
Akka-HTTP

Scala、AkkaHttpで簡単に外部サーバーからGETしてくる方法

なんか手っ取り早く外部サーバーとの通信を書けないか探したのでメモ

自分で適当に作ったやつ

qiita.scala
  private def getRequest[A](uri: String): Future[String] = {
    val request = HttpRequest(GET, uri = Uri(uri))
    val res = Http().singleRequest(request)
    res.flatMap { r =>
      res.entity.dataBytes.runFold(ByteString.empty)(_ ++ _).map(_.utf8String)
    }
  }

下のところがすごい冗長感が溢れる

qiita.scala
res.entity.dataBytes.runFold(ByteString.empty)(_ ++ _).map(_.utf8String)

リファクタしたやつ

qiita.scala
  private def getRequest[A](uri: String): Future[String] = {
    val request = HttpRequest(GET, uri = Uri(uri))
    val res = Http().singleRequest(request)
    res.flatMap { r =>
      Unmarshal(r.entity).to[String]
    }
  }
qiita.scala
Unmarshal(r.entity).to[String]

Unmarshalを使えば短くかける^^
うれしい

使い方

qiita.scala
val response: Future[String] = getRequest(uri = "http:~~~~~")