As I mentioned in my previous post I tried to create a simple REST service with Scala and spray.io, but that turned out to be unbelievably difficult. A second try with Scala and REST turned out to be successful.
When my experiment with spray.io didn't work out I had an idea to try out Play 2 as a base to my REST service. Working with Play 2 was a walk in the park compared to spray.io even though not entirely painless but much easier and less frustrating.
Starting out with Play 2 was really quick thanks to a good documentation and examples that are up to date. Basically I just ran the command play new appName and started coding.
So far I have REST service and a in-memory implementation of todo tasks with some unit tests. REST service is all Play 2 with routes and a single application class. The current service layer implementation is a single class with tasks in a mutable Map where a individual task is a case class, so just some basic Scala code.
I really like Play 2 so far but I'm a bit concerned of how much dependencies Play 2 brings with it as default. Currently I have 92 jars in referenced libraries of my project, all from default initialization of play application. Sure some of these are test library dependencies but still that's a lot of libraries.
Play 2 automatically includes as a dependency the specs2 library that's a unit and acceptance testing library for Scala. I had never used specs2 and the bdd style definition of tests was a bit odd to me but I decided to give it a try.
After a few initial wtf's I got the hang of it pretty quickly and was able create some basic unit tests for my service implementation. I've only scratched the surface with specs2 but it seems to do the job and has quick learning curve and so far the provided documentation has been enough to get me going.
Play to the rescue
When my experiment with spray.io didn't work out I had an idea to try out Play 2 as a base to my REST service. Working with Play 2 was a walk in the park compared to spray.io even though not entirely painless but much easier and less frustrating.
Starting out with Play 2 was really quick thanks to a good documentation and examples that are up to date. Basically I just ran the command play new appName and started coding.
So far I have REST service and a in-memory implementation of todo tasks with some unit tests. REST service is all Play 2 with routes and a single application class. The current service layer implementation is a single class with tasks in a mutable Map where a individual task is a case class, so just some basic Scala code.
I really like Play 2 so far but I'm a bit concerned of how much dependencies Play 2 brings with it as default. Currently I have 92 jars in referenced libraries of my project, all from default initialization of play application. Sure some of these are test library dependencies but still that's a lot of libraries.
Unit testing Scala code
Play 2 automatically includes as a dependency the specs2 library that's a unit and acceptance testing library for Scala. I had never used specs2 and the bdd style definition of tests was a bit odd to me but I decided to give it a try.
After a few initial wtf's I got the hang of it pretty quickly and was able create some basic unit tests for my service implementation. I've only scratched the surface with specs2 but it seems to do the job and has quick learning curve and so far the provided documentation has been enough to get me going.
What's next
Next step in my adventures in the world of Scala will be to try use some real data storage to persist the todo applications data. I think I'll try out with MongoDB and after that some other very different alternatives like Redis and MariaDB.
Code shared publicly
As I use code and examples provided by others I too am sharing my code and putting it publicly reviewed by others. It's all shared through my github account at https://github.com/jorilytter/simple-todo, feel free take a look.