Il n'y a pas si longtemps, je suis passé de akka-http à http4s. L'une des choses fondamentales que je voulais faire correctement est la gestion de JSON, en particulier l'envoi d'une réponse JSON.
J'ai décidé d'utiliser http4s avec ZIO au lieu de cats, voici donc à quoi ressemble une route http :
import fs2.Stream
import org.http4s._
import org.http4s.dsl.io._
import org.http4s.implicits._
import scalaz.zio.Task
import scalaz.zio.interop.catz._
import io.circe.generic.auto._
import io.circe.syntax._
class TweetsRoutes {
case class Tweet(author: String, tweet: String)
val helloWorldService = HttpRoutes.of[Task] {
case GET -> Root / "hello" / name => Task {
Response[Task](Ok)
.withBodyStream(Stream.emits(
Tweet(name, "dummy tweet text").asJson.toString.getBytes
))
}
}.orNotFound
}
Comme vous le voyez, la partie sérialisation JSON est assez verbeuse :
.withBodyStream(Stream.emits(
Tweet(name, "dummy tweet text").asJson.toString.getBytes
))
Existe-t-il un autre moyen d'envoyer du JSON dans une réponse ?