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

Automated browser testing in 2018

Every now and then I do some research on browser testing. More specifically I try to find and evaluate what kind of ready to use solutions or libraries have emerged since my previous research or if some of the previously tested solutions has come up with something new.

Back in September 2017 I had some extra time on my hands and I used a couple of days to see what are the new and interesting solutions at that time. I came across some tools that I have used in the past and found two new interesting options in which one stood out.

Say hello to TestCafe
The most interesting solution that I found was called TestCafe. It's a open source Node.js library from a company called Developer Express Inc. They also have a commercial product called TestCafe (confusing) which I haven't tried as the open source library provided everything I was interested in and it seemed to be under active development.

The thing that caught my interest at first was that this library doesn't depend on WebDri…

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.…

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…