Great tutorial as usual. I was shying away from http4s (instead of using play framework) because of its complexity but now it makes total sense to use it.
thank you so much for this video. Scala-type system, implicits etc. are blowing my head ... i didn't get time to complete this video yet, hope to finish this soon .... but this is next level.
Daniel, another terrific video. Thank you. I think it could be slightly improved by having a (very simple) database implementation, rather than a Map. Yes, I realise the extra effort involved, and it would have made the video longer, but it would add a realistic scenario. Or, perhaps another video with a "simplistic" storage and retrieval from a table? Perhaps making use of JDBC or JOOQ? Thanks again for all your efforts.
Great video, Daniel! I'm looking information on how to get repeated query parameters in Scala http4s/dsl. Or even get all parameters and handle it. Do you know how we could achieve it? This is pretty silly thing in other languages, such python or java, but in scala looks like quite convolute. Thank you buddy!
Great tutorial. Covers important areas about encoding/decoding of URL points. Error handling with 'year' was too short and quick, IMO. Could be elaborated a bit more. 3rd requirement to POST (create) director is missed. What is the idea behind having HttpRoutes as typed to F[_] : Monad instead of IO ? HttpRoutes is anyways tied to cats provided Monad. So, what is the advantage? Thanks a lot for all your efforts.
thank you for perfect tutorial. but it does not compile. maybe I do smth wrong. Error: could not find implicit value for parameter encoder: io.circe.Encoder[cats.effect.IO[cats.effect.IO[Option[String]]]]
Это просто о...но! Daniel, what do you think about Rust & Go? It will be pretty cool oneday to see some technical tutorials from you about both of this!
While I appreciate the type class abstraction to support an effect monad, I have to say that it makes for horrendous boilerplate code. And not only just carrying that F[_]: MONAD everywhere, but also the dsl imports, asJson calls without the option to declare a default serializer and even the final ".resource.use(never)" is just meh and should have been simplified under some "run" method. The first time I needed to use http4s I was relatively new to cats ecosystem and had to use ZIO monad with it. That was a lesson in frustration.
Good, but too simple video. I would like to know http4s deep, best practices and so on. I hoped you write mini app as microservice in full fp way with movie/director repository, some other services, then you combine all this services and http4s. I wait next episode.
Awesome tutorial, though I'm sad you call the functions "magic", as they are well... just functions. When you do Play, or Spring, or almost any other server framework, those _are_ using magic, with their annotations... http4s is not :D
Wow, I literally started writing my http4s hello world app a week ago. Very convenient! Thank you
Nice!
Great tutorial as usual. I was shying away from http4s (instead of using play framework) because of its complexity but now it makes total sense to use it.
Glad it clicked!
Definitely move towards http4s. Play is stuck in the past with Futures, zero sign of moving away from them. I say this as a long time Scala Play dev.
thank you so much for this video. Scala-type system, implicits etc. are blowing my head ... i didn't get time to complete this video yet, hope to finish this soon .... but this is next level.
Finally http4s ! Thank you for that. I didn't find any good resource to learn it.
Glad it helps!
You're the best, Daniel!
This is amazing!!! thank you for doing this!!!
Glad it's useful!
Thanks for this video. Really help me to digest the HTTP library
Amazing crash curse. Looking forward to the cats introduction
Daniel, another terrific video. Thank you. I think it could be slightly improved by having a (very simple) database implementation, rather than a Map. Yes, I realise the extra effort involved, and it would have made the video longer, but it would add a realistic scenario. Or, perhaps another video with a "simplistic" storage and retrieval from a table? Perhaps making use of JDBC or JOOQ? Thanks again for all your efforts.
Glad you liked it! I wanted to keep this specific to http4s - I'll add full-blown projects on my site soon.
Great video!
Should have watched this before I spent hours banging my head against the http4s documentation lol
Great video, Daniel! I'm looking information on how to get repeated query parameters in Scala http4s/dsl. Or even get all parameters and handle it. Do you know how we could achieve it? This is pretty silly thing in other languages, such python or java, but in scala looks like quite convolute. Thank you buddy!
OptionalMultiQueryParamDecoderMatcher. The difference from the video is "Multi".
Do you plan to have any tutorials on scala.js
Something in particular you're interested in?
@@rockthejvm Use common / shared case classes in http4s server and scalajs client (maybe using laminar lib)
Great tutorial. Covers important areas about encoding/decoding of URL points. Error handling with 'year' was too short and quick, IMO. Could be elaborated a bit more. 3rd requirement to POST (create) director is missed. What is the idea behind having HttpRoutes as typed to F[_] : Monad instead of IO ? HttpRoutes is anyways tied to cats provided Monad. So, what is the advantage? Thanks a lot for all your efforts.
Will cover more in-depth in a course!
Excellent tutorial. thanks
thank you for perfect tutorial.
but it does not compile.
maybe I do smth wrong.
Error: could not find implicit value for parameter encoder: io.circe.Encoder[cats.effect.IO[cats.effect.IO[Option[String]]]]
Could you please help with POST? I am unable to decode a particular request using circe or native http4s jackson library.
I found the answer in your blog post :) !!! Thank you so much.
Are actors in the tutorial typed?
is there solid JWT or OAuth for http4s? I always feel security is left on such a mist of bad documentation.
Try tsec: jmcardon.github.io/tsec/docs/http4s-auth.html
@@rockthejvm Thank you King 🙏🙌
Это просто о...но!
Daniel,
what do you think about Rust & Go?
It will be pretty cool oneday to see some technical tutorials from you about both of this!
What would be an alternative to Cats IO? Is the use of tagless final and higher kinded types really helpful here?
There's Option, Either, monad transformers, ZIO
While I appreciate the type class abstraction to support an effect monad, I have to say that it makes for horrendous boilerplate code.
And not only just carrying that F[_]: MONAD everywhere, but also the dsl imports, asJson calls without the option to declare a default serializer and even the final ".resource.use(never)" is just meh and should have been simplified under some "run" method.
The first time I needed to use http4s I was relatively new to cats ecosystem and had to use ZIO monad with it. That was a lesson in frustration.
I empathize. This is why I shot this video, to ease the frustration for beginners.
@@rockthejvm hopefully ZIO-WEB comes around soon to be a adequate replacement
Thanks very much for this tutorial.
Glad you liked it!
Awesome. Like, subscribing. Keep doing, fellow
Good, but too simple video.
I would like to know http4s deep, best practices and so on.
I hoped you write mini app as microservice in full fp way with movie/director repository, some other services, then you combine all this services and http4s.
I wait next episode.
In-depth stuff is coming too on my site: rockthejvm.com
This is amazing
Thanks!
Is there a way to simplify those route handler? maybe an episode 2 for this? :D
What else would you like to see?
@@rockthejvm maybe a "simplified" route handler with for comprehention? Not sure if that possible, I am still learning scala fp 😅
Thank you!!
Awesome tutorial, though I'm sad you call the functions "magic", as they are well... just functions. When you do Play, or Spring, or almost any other server framework, those _are_ using magic, with their annotations... http4s is not :D
Sufficiently advanced magic becomes indistinguishable from technology.
http4s = "http for (4) scala"
Yep!