API

Gebruikte technieken

De meeste mobiele applicaties die bij 9to5 worden ontwikkeld zijn verbonden via een API met een database. Hieronder staan technieken die wij dagelijks gebruiken om hoge kwaliteit API’s en apps te maken.

Ruby

Ruby

Ruby is geschikt voor veel verschillende taken. Bij 9to5 maken wij met Ruby websites, API’s, command line tools en gems (plugins).

Ruby on Rails

Bij 9to5 wordt veel gebruik gemaakt van het framework Ruby on Rails. Het voordeel van Ruby on Rails is dat er veel ‘plugins’ beschikbaar zijn waardoor we snel kunnen toewerken naar het eindresultaat. Onze Ruby on Rails bevatten altijd RSpec tests zodat we de kwaliteit van onze software kunnen garanderen. Wijzigingen worden via GIT opgeslagen en via pull-requests door andere developers gecontroleerd. Na het mergen van de pull-request wordt automatisch de code op de continuous integration dienst CircleCI getest en als er geen fouten worden ontdekt gedeployed naar de hosting.

Sinatra

Voor kleine API’s is het gebruik van Ruby on Rails overkill, wij maken dan graag gebruik van Sinatra. Sinatra bevat minder functionaliteit wat de snelheid en veiligheid ten goede komt. Door de komst van Elixir en het Phoenix Framework wordt er minder vaak voor Sinatra gekozen, maar als het gebruik van Ruby in het project is gewenst wordt deze keuze alsnog gemaakt.

Middleman

Omdat niet elke website dynamische content bevat maken we ook gebruik van Middleman. Hiermee kunnen we snel statische websites genereren, de code wordt opgeslagen in onze GIT repositories en bij een wijziging kunnen we eenvoudig een aanpassing doen en pushen naar GIT. Deze wijziging wordt dan door onze CircleCI service opgepakt om vervolgens gebuild te worden en automatisch te worden gedeployed naar Amazon S3 en Amazon Cloudfront. Hier is erg belangrijk dat hierbij onze interne workflow van het reviewen van pull-requests en na acceptatie automatisch deployen wordt gevolgd. Het maakt dus niet uit of we een statische website of een grote API met frontend deployen, alles gaat volgens dezelfde workflow.

Elixir

Elixir

Een nieuwe opkomende programmeertaal is Elixir. Voor ontwikkelaars die Ruby zijn gewend is dit een eenvoudige overstap. Elixir is gebaseerd op Erlang en bestaat al sinds 1986 en was ontwikkeld voor telefooncentrales. Voor deze toepassing is concurrency en fault-tolerance heel erg belangrijk, wat niet geheel toevallig ook erg belangrijke eigenschappen zijn voor een API.

Phoenix Framework

Voor API ontwikkeling maken we gebruik van het Phoenix Framework. De workflow die we bij Ruby on Rails gebruiken passen we ook toe in de ontwikkeling van API’s in het Phoenix Framework. ExUnit wordt voor de tests gebruikt en kan door de snelheid van Elixir continu draaien.

Elixir

Hosting

Heroku

Alle API’s van 9to5 worden in de cloud bij Heroku gehost. Wij hebben expliciet de keuze gemaakt om niet zelf de hosting te verzorgen maar om te richten op software development. Door het uitbesteden van de hosting houden wij meer tijd en budget over om mooie apps en websites te maken. De hosting van Heroku is zeer betrouwbaar en veilig. Omdat een deployment naar Heroku niet anders is dan het pushen van GIT naar een repository integreert het mooi in ons CI/CD proces. Het is zeer eenvoudig om meerdere versies van een API te draaien bij Heroku, daarom maken wij altijd gebruik van een productie-omgeving en een staging-omgeving. Productie wordt gebruikt door de klant en eindgebruikers, de staging-omgeving door de app-developers.

Hosting statische content

Bij statische content is het belangrijk om de data zo snel en zo veilig bij de gebruiker te krijgen. Door de bestanden op te slaan op Amazon S3 staan deze op een veilige en betrouwbare locatie. In combinatie met Cloudfront kunnen de bestanden dan snel worden afgeleverd. Cloudfront slaat een cache van deze bestanden op in de buurt van de gebruikers. Omdat de bestanden een kortere afstand afleggen komen ze sneller bij de gebruiker aan. Een groot voordeel van Cloudfront is dat er gratis gebruik gemaakt kan worden van SSL verbindingen waardoor alle communicatie is beveiligd via HTTPS.

PostgreSQL

Data opslag

PostgreSQL

Onze keuze voor de primaire database is PostgreSQL. Dit is een zeer betrouwbare database en die vanuit Heroku wordt ondersteund. Door continue backup bij Heroku is de kans op dataverlies erg laag. Als er meer uptime is gewenst dan kan er gebruikgemaakt worden van duurdere productie-databases. Veel apps van ons maken gebruik van locatiegegevens en met de PostgreSQL uitbreiding PostGIS kunnen er snel en efficiënt queries op deze data uitgevoerd worden.

Redis

Voor supersnelle queues of tijdelijke caches gebruiken we Redis. Redis is een in-memory data structure store. Wat betekent dat we verschillende data-structuren kunnen opslaan en weer snel kunnen opvragen. In tegenstelling tot een database zijn er geen queries mogelijk maar bewerkingen op de data zijn heel snel. Redis is nu in gebruik icm Sidekiq voor background processing en voor Pushr om de pushberichten van 9to5 te versturen.

CircleCI

Continuous Integration en Continuous Deployment

Het belangrijkste onderdeel in onze workflow is na het committen van de code om deze te pushen naar onze GIT repositories. Automatisch wordt de code dan door onze CI/CD service CircleCI opgepakt en gebuild en getest. Als de tests slagen wordt er direct een nieuwe versie gemaakt en online gezet. Hiermee zorgen we dat onze release-cycle kort is en dat het uitbrengen van een nieuwe versie niet spannend is, maar gewoon onderdeel van het dagelijks werk. Als we aan een project werken is het niet ongebruikelijk om meerdere releases op een dag uit te brengen.

Benieuwd naar de rest van onze werkwijze?