You can require the entire toolkit in a single line:
//> using toolkit latest
Alternatively, you can require just a specific version of sttp:
//> using dep com.softwaremill.sttp.client4::core:4.0.0-M6
In your build.sbt file, you can add a dependency on the Toolkit:
lazy val example = project.in(file("."))
.settings(
scalaVersion := "3.3.4",
libraryDependencies += "org.scala-lang" %% "toolkit" % "0.1.7"
)
Alternatively, you can require just a specific version of sttp:
libraryDependencies += "com.softwaremill.sttp.client4" %% "core" % "4.0.0-M6"
In your build.sc file, you can add a dependency on the Toolkit:
object example extends ScalaModule {
def scalaVersion = "3.3.4"
def ivyDeps =
Agg(
ivy"org.scala-lang::toolkit:0.1.7"
)
}
Alternatively, you can require just a specific version of sttp:
ivy"com.softwaremill.sttp.client4::core:4.0.0-M6"
HTTP and JSON
JSON is a common format for HTTP request and response bodies.
In the examples below, we use the GitHub REST API. You will need a secret GitHub authentication token to run the programs. Do not share your token with anyone.
Sending and receiving JSON
To send a JSON request and parse a JSON response we use sttp in combination with uJson.
Sending JSON
To send JSON, you can construct a uJson.Value
and write it as a string in the body of the request.
In the following example we use GitHub users endpoint to update the profile of the authenticated user. We provide the new location and bio of the profile in a JSON object.
import sttp.client4.quick._
val json = ujson.Obj(
"location" -> "hometown",
"bio" -> "Scala programmer"
)
val response = quickRequest
.patch(uri"https://api.github.com/user")
.auth.bearer(sys.env("GITHUB_TOKEN"))
.header("Content-Type", "application/json")
.body(ujson.write(json))
.send()
println(response.code)
// prints: 200
println(response.body)
// prints the full updated profile in JSON
import sttp.client4.quick.*
val json = ujson.Obj(
"location" -> "hometown",
"bio" -> "Scala programmer"
)
val response = quickRequest
.patch(uri"https://api.github.com/user")
.auth.bearer(sys.env("GITHUB_TOKEN"))
.header("Content-Type", "application/json")
.body(ujson.write(json))
.send()
println(response.code)
// prints: 200
println(response.body)
// prints the full updated profile in JSON
Before running the program, set the GITHUB_TOKEN
environment variable.
After running it, you should see your new bio and location on your GitHub profile.
Parsing JSON from the response
To parse JSON from the response of a request, you can use ujson.read
.
Again we use the GitHub user endpoint, this time to get the authenticated user.
import sttp.client4.quick._
val response = quickRequest
.get(uri"https://api.github.com/user")
.auth.bearer(sys.env("GITHUB_TOKEN"))
.send()
val json = ujson.read(response.body)
println(json("login").str)
// prints your login
import sttp.client4.quick.*
val response = quickRequest
.get(uri"https://api.github.com/user")
.auth.bearer(sys.env("GITHUB_TOKEN"))
.send()
val json = ujson.read(response.body)
println(json("login").str)
// prints your login
Before running the program, set the GITHUB_TOKEN
environment variable.
Running the program should print your own login.
Sending and receiving Scala objects using JSON
Alternatively, you can use uPickle to send or receive Scala objects using JSON. Read the following to learn How to serialize an object to JSON and How to deserialize JSON to an object.