Beyond REST

Want to connect? Find me on LinkedIn or the Contact page.

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 lagging 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 a 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 to 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 to 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 mentorship. Might look into it too.

Related Articles

Comments