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 providedResponseException
is parametrised with library-specific deserialisation exception type and http-error type. What previous wasResponseError[E]
now would beResponseException[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 fromSttpClient
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 aF[T]
instead of anF[Either[WebSocketFrame.Close, T]]
. If the ws is closed, an effect failed withWebSocketClosed
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 withwebSocket.either
.Response.cookies
now returnsSeq[Either[String, CookieWithMeta]]
, as parsing cookies might fail. UseResponse.unsafeCookies
for the old exception-throwing behaviour