sbt new scala/scala-seed.g8
cd <your-project-name>
scala
libraryDependencies += "com.softwaremill.sttp.client3" %% "core" % "3.3.13"
scala
import sttp.client3._
import sttp.client3.asynchttpclient.WebSocketHandler
import sttp.client3.circe._
import io.circe._
scala
class ApiService {
val backend = AsyncHttpClientCatsBackend()
def getUser(userId: String): Either[Throwable, Response[Json]] = {
basicRequest
.get(uri"https://api.example.com/users/$userId")
.response(asJson[Json])
.send(backend)
.body
.left.map(throwable => new Exception(throwable.getMessage))
}
def createUser(userData: Json): Either[Throwable, Response[Json]] = {
basicRequest
.post(uri"https://api.example.com/users")
.body(userData)
.response(asJson[Json])
.send(backend)
.body
.left.map(throwable => new Exception(throwable.getMessage))
}
}
scala
object Main extends App {
val apiService = new ApiService()
val userId = "123"
val user = apiService.getUser(userId)
user match {
case Right(response) =>
println(s"User info: ${response.body.getOrElse("")}")
case Left(error) =>
println(s"An error occurred: ${error.getMessage}")
}
val userData = Json.obj("name" -> Json.fromString("John Doe"))
val newUser = apiService.createUser(userData)
newUser match {
case Right(response) =>
println("New user created successfully")
case Left(error) =>
println(s"An error occurred: ${error.getMessage}")
}
}
sbt run