v3.0.0-RC15
This is a preview release, containing most of the functionality planned for sttp v3. The code passes all tests, however the API might change.
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.
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 providedResponseExceptionis parametrised with library-specific deserialisation exception type and http-error type. What previous wasResponseError[E]now would beResponseException[String, E]streamBodysets 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
sendmethod has been moved fromSttpClientto 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 withWebSocketClosedwill 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.cookiesnow returnsSeq[Either[String, CookieWithMeta]], as parsing cookies might fail. UseResponse.unsafeCookiesfor the old exception-throwing behaviour