sttp es la biblioteca HTTP de Scala que todos estábamos esperando.
Tiene un DSL fluido para formar y ejecutar solicitudes (ejemplos de código de su 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)
Admite llamadas síncronas, asíncronas y de transmisión a través de backends conectables, incluidos Akka-HTTP (anteriormente Spray) y el venerable AsyncHttpClient (Netty):
implicit val sttpHandler = AsyncHttpClientFutureHandler()
val futureFirstResponse: Future[Response[String]] = request.send()
Es compatible con scala.concurrent.Future
, scalaz.concurrent.Task
, monix.eval.Task
, y cats.effect.IO
- todos los principales Scala mónada IO bibliotecas.
Además, tiene algunos trucos adicionales bajo la manga:
val test = "chrabąszcz majowy"
val testUri: Uri = uri"http://httpbin.org/get?bug=$test"
- Admite codificadores / decodificadores para cuerpos de solicitud / respuestas, por ejemplo, JSON a través de Circe:
import com.softwaremill.sttp.circe._
val response: Either[io.circe.Error, Response] =
sttp
.post(uri"...")
.body(requestPayload)
.response(asJson[Response])
.send()
Finalmente, es mantenido por la gente confiable de softwaremill y tiene una excelente documentación .