Creare un client GraphQL in Scala

Mattepuffo's logo
Creare un client GraphQL in Scala

Creare un client GraphQL in Scala

In questo articolo vediamo come creare un semplice client GraphQL in Scala 3.

Come "server" useremo QraphQLPlaceholder.

Dobbiamo installare un paio di librerie.

Se usate sbt:

libraryDependencies ++= Seq(
  "com.softwaremill.sttp.client3" %% "core" % "3.11.0",
  "com.softwaremill.sttp.client3" %% "upickle" % "3.11.0"
)

Qui sotto un pò di codice:

package org.example

import sttp.client3.*
import sttp.client3.upicklejson.asJson
import upickle.default.*

case class User(id: String, name: String, email: String) derives ReadWriter

case class UsersData(users: List[User]) derives ReadWriter

case class GraphQLResponse(data: UsersData) derives ReadWriter

@main
def main(): Unit = {
  val apiUrl = "https://graphqlplaceholder.vercel.app/graphql"

  val query =
    """
      query ListaUtenti {
        users {
          id
          name
          email
        }
      }
    """

  val backend = HttpClientSyncBackend()

  val request = basicRequest
    .post(uri"$apiUrl")
    .body(Map("query" -> query))
    .response(asJson[GraphQLResponse])

  println("Richiesta in corso con sbt e Scala 3...")

  val response = request.send(backend)

  response.body match
    case Left(error) =>
      println(s"Errore: $error")
    case Right(res) =>
      println(s"Trovati ${res.data.users.size} utenti:")
      println("-" * 50)
      res.data.users.foreach { u =>
        println(s"[${u.id}] ${u.name} - ${u.email}")
      }
      println("-" * 50)
}

Enjoy!


Condividi

Commentami!