sttp - це бібліотека Scala HTTP, яку ми всі так довго чекали!
Він має вільний DSL для формування та виконання запитів (зразки коду з їх README):
val request = sttp
.cookie("session", "*!@#!@!$")
.body(file)
.put(uri"http://httpbin.org/put")
.auth.basic("me", "1234")
.header("Custom-Header", "Custom-Value")
.response(asByteArray)
Він підтримує синхронні, асинхронні та потокові дзвінки через підключаються бекенди, включаючи Akka-HTTP (раніше Spray) та поважний AsyncHttpClient (Netty):
implicit val sttpHandler = AsyncHttpClientFutureHandler()
val futureFirstResponse: Future[Response[String]] = request.send()
Він підтримує scala.concurrent.Future
, scalaz.concurrent.Task
, monix.eval.Task
, і cats.effect.IO
- все основні Scala IO монади бібліотеки.
Плюс у нього є кілька додаткових хитрощів:
val test = "chrabąszcz majowy"
val testUri: Uri = uri"http://httpbin.org/get?bug=$test"
- Він підтримує кодери / декодери для тіл запитів / відповідей, наприклад, JSON через Circe:
import com.softwaremill.sttp.circe._
val response: Either[io.circe.Error, Response] =
sttp
.post(uri"...")
.body(requestPayload)
.response(asJson[Response])
.send()
Нарешті, це підтримується надійними людьми з softwaremill, і у нього є чудова документація .