September 15, 2018

Beyond REST

I’ve been dealing with RESTful services for the last three years, both professionally and for hobby projects. Since I came from SOAP/XML/Oracle background, REST felt so great and modern. Even though I felt late to the party, I think I didn’t lose that much. However, with the advancement of Cloud Native projects, I feel like I’m getting behind modern tools and technologies. And I want to change that.

I started my professional software development career building solutions for the telecommunication sector using XML Technologies (XML, XQuery, XPath, XSLT) and Oracle ones (puke). I’ve dealt with that for two and a half years. At that time I got a great offer from a European company to work with similar technologies. Nowadays I’m so happy that I refused.

Three years ago I started learning/building RESTful APIs. At that time I used Java 8 with Spring Boot. Since the company I worked with was dealing with Enterprises, remaining technologies were a bit out-of-date. OracleDB, PLSQL, Maven/Gradle and Jenkins (used for manual deployments only). That was about it. No caching, indexing, k/v store, streaming, event-processing, secret store etc. A relational database is used for everything. Although It still felt interesting for a year or so.

Since I was reading lots of tech blogs and ‘following the scene’ I noticed that my previous company was lacking behind technology-wise. I searched for a new one and was very lucky to join my current company.

Besides other things that I like about it, it felt very modern at that time. It still is, especially considering my current location where the majority of companies work with ‘older technologies’. I think most of the places are like that, except startup-centric ones like San Francisco and Austin.

I was introduced to Golang, a language that still feels very modern to use. Cloud providers (mostly GCP and some AWS) and their products such as App/Compute/Kubernetes Engine, Datastore, Memcached, Cloud Storage, PubSub. Besides cloud, we work with technologies such as ElasticSearch, Redis, RabbitMQ, Docker.

Since I learned so many things, I started working remotely as well and picked up some nice gigs - working mostly with Go and K8s. I might write a blog post about one of those products soon, as its planned launch date is in Q4 this year.

On GitHub, I published a few repositories containing starter kits for projects having RESTful services, most notably Gorsk. I’m still maintaining it and plan to do it in the future.

A few weeks ago I started writing chisk - a Golang RESTful starter kit using as few dependencies as possible. After a while, I realised I got quite bored with it, and I didn’t like some complexities that chi ‘introduced’ compared to some more complex projects such as Echo, mainly (un)marshalling requests/responses, validation, error handling. At that time I knew I got bored writing all the http routes over and over again. I stopped working on chisk - and published it as-is, without any http routes.

I tried writing my own Go web framework mixing Echo, Gin and others to produce something I like. I learned a lot just by reading their source code, how and why they did certain things.

I made a working project but decided to abandon it since the majority of the code was copied from Echo with some small changes. But in the process, I liked reading the source code. Honestly, I rarely did that, I regret that, and plan to change this. I feel it’s a great way to learn the language and programming in general - reading source code.

I know most of the technologies below are unrelated to REST in any way, and they are not ‘beyond REST’. Instead, I realised I want to stop writing any more http routes for my hobby projects and focus more on learning and catching up. These are some of the things I want to learn and take on in the following months:

  • Read Go’s source code: After reading the source code of Echo, Gin and other routes I learned so much. I believe reading Go’s source code will help even more. I still don’t feel too comfortable working with mutexes, channels and few interfaces such as Reader/Writer.

  • Become more knowledgeable with CI/CD tools: I mostly copy/paste Travis script for my GitHub projects. For private projects on GitLab, I rarely made anything complex. I’d like to really get into it for two-three weeks and learn more about making good CI/CD scripts.

  • Get more familiar with CNCF tools, namely Kubernetes, Prometheus and NATS. Even though I worked with K8s APIs for a few months, I haven’t used it much as an orchestration service. Also learn Docker better.

I hope to finish this up before Spring next year. I’ll write about my progress here on my blog. You can email me any advice you got - I will gladly go through all of them. Still, I think one of the best ways to learn new things is under a mentorship. Might look into it too.

2018 © Emir Ribic - Some rights reserved; please attribute properly and link back. Code snippets are MIT Licensed

Powered by Hugo & Kiss.