github softwaremill/sttp v3.0.0

latest releases: v3.10.1, v4.0.0-M19, v3.10.0...
3 years ago

sttp client v3 uses a new package name (sttp.client3) and organization (com.softwaremill.sttp.client3). This way old and new sttp client versions can be used side-by-side. Make sure to update your imports and build dependencies!

Documentation is updated for the new version. See also the announcement blog.

Breaking changes since v2

SttpBackend trait

The trait now has 2, instead of 3 parameters. The "default" case of a backend with no additional capabilities changed:

SttpBackend[F, Nothing, NothingT] --> SttpBackend[F, Any]

The second type parameter now contains a list of supported additional capabilities. This can include:

  • an implementation of Streams
  • WebSockets

Finally, the type of supported streams is not given directly, but wrapped in a Streams object. For example, the types of the AkkaHttpBackend and AsyncHttpClientZioBackend backends now are:

SttpBackend[Future, AkkaStreams with WebSockets]
SttpBackend[Task, ZioStreams with WebSockets]

Request type

The type describing a request has undergone similar changes, with the last type parameter specifying the requirements that a backend must meet in order of the request to be sent. The "default" description of a request which doesn't use websockets or streams changed:

Request[T, Nothing] -> Request[T, Any]

Similarly, the type of ResponseAs changed.

The Request.send() method, which used an implicit SttpBackend is deprecated. Instead, use Request.send(backend), giving the backend explicitly.

SttpBackendStub

  • method name change: thenRespondWrapped -> thenRespondF
  • when nothing is stubbed, an exception (failed effect) is thrown, instead of returning 404

Other

  • ResponseError -> ResponseException, but type aliases are provided
  • ResponseException is parametrised with library-specific deserialisation exception type and http-error type. What previous was ResponseError[E] now would be ResponseException[String, E]
  • streamBody sets application/octet-stream as the content type by default
  • the default execution context used in the akka-http backend is different: instead of global, the EC backing the provided actor system is used
  • for zio backends, the send method has been moved from SttpClient to the package (for consistency with other zio libraries)
  • logging backends have been combined into a single one, exposing various configuration options
  • WebSocket.receive* methods return a F[T] instead of an F[Either[WebSocketFrame.Close, T]]. If the ws is closed, an effect failed with WebSocketClosed will be returned (which also could have happened in the previous variant, depending on how the ws got closed). Old behaviour can be restored by wrapping the call with webSocket.either.
  • Response.cookies now returns Seq[Either[String, CookieWithMeta]], as parsing cookies might fail. Use Response.unsafeCookies for the old exception-throwing behaviour

Don't miss a new sttp release

NewReleases is sending notifications on new releases.