Skip to main content

Second try with Scala and REST

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.

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.

Comments

Popular posts from this blog

DIY home automation v2

Previously I set up a simple home automation system for controlling outlets at home. So far I've used the system for controlling various lights at our home. I've been satisfied with oulet controlling via browser but I wanted something more.

Objective
I had a idea of temperature and humidity monitoring via Raspberry Pi. I was already browsing for electronics components needed for building a system with sensors but buying single components seemed a bit expensive and I would also have to actually connect all the components to RPi and write the code to read the sensor data.

Mainly because of the price the components I started looking for a pre-built system with the preferred sensors. Almost immediately I came across Proove's sensor that has indoor and outdoor temperature sensors and a indoor humidity sensor. Best part of the pre-built system is that it's already compatible with TellStick system that I used for controlling outlets.

I decided to buy the pre-built sensor syst…

DIY home automation, new generation

I've had my DIY home automation system for controlling outlets and reading sensor data running for about two years now. The system has been working fine and I haven't had any need to touch the code since I added the sensor reading to it, until a few months back.

Need for new functionality
Few months ago I got a new IoT toy for a lend from a friend until I'd get my own toys, a ruuvitag sensor beacon. Ever since I found the ruuvitag for the first time from kickstarter I had the idea of getting a bunch of ruuvitags and adding their weather station sensor readings as part of my home automation system.

The original home automation backend included only tellstick compatible devices and was written in Python, and in my mind it was kind of a hack. The ruuvitag beacons communicate via BLE i.e. Bluetooth Low Energy and that meant that I needed to add functionality to read the beacon data via bluetooth.

I found a ruuvitag Python library and initially thought that I'd just use that a…

DIY home automation v1

For years I've been interested in home automation. I've had remote controllable outlets from a few different manufacturers but I've never been quite satisfied with just the remote. What if I could control my outlets within my local network from any device, now that's something I wanted to have.

Controlling outlets from computer A few years back I bought a three pack of remote controllable nexa outlets. A while ago I discovered that another company manufactured a control unit that's plugged in to a USB port and best of all they provided linux software for it.

To make full use of these I'd need a computer that's always on and that's where I could make use of Raspberry Pi.

Setting up outlets
I had already set up my outlets with the remote that came in the retail pack just follow the manufacturer instructions.
It might be possible to configure the outlets completely via the software at least for some brands but I haven't tried it so I can't be sure.…