Axium
Axium is voor mij meer dan alleen een project. Het is een weerspiegeling van mijn reis als ontwikkelaar – een poging om mijn kennis van programmeren, data-engineering en systeembeheer samen te brengen in een template die niet alleen werkt, maar ook schaalbaar, veilig en efficiënt is. In dit artikel neem ik je mee in mijn proces, de uitdagingen die ik tegenkwam en wat ik onderweg heb geleerd.
Het idee achter Axium 🚀
Het idee voor Axium ontstond uit mijn wens om verzamelde data toegankelijker te maken voor alledaags gebruik. Vaak blijft waardevolle data opgesloten in complexe systemen, moeilijk bereikbaar voor ontwikkelaars en eindgebruikers. Ik wilde een oplossing bouwen die deze kloof overbrugt en het eenvoudiger maakt om data op een veilige en efficiënte manier te ontsluiten.
Een API (Application Programming Interface) speelt hierin een cruciale rol. Je kunt een API zien als een ober in een restaurant: jij plaatst een bestelling (verzoek), de ober haalt het gerecht uit de keuken (server) en brengt het naar je tafel (antwoord). API’s maken het mogelijk voor applicaties om met elkaar te communiceren zonder dat ze hoeven te weten hoe de andere applicatie precies werkt.
Bij het ontwikkelen van Axium stelde ik mezelf drie hoofddoelen:
- Veiligheid – Ingebouwde authenticatie en bescherming tegen veelvoorkomende kwetsbaarheden.
- Performance – Rust’s snelheid en geheugenbeheer benutten om zware belasting aan te kunnen.
- Schaalbaarheid – Geschikt voor zowel kleine projecten als productieklare systemen.
- Duidelijkheid - Goede documentatie, die het liefst automatisch wordt aangevuld. Axium bood me de kans om mijn kennis te verdiepen en tegelijkertijd een praktisch hulpmiddel te bouwen voor mezelf en anderen. Daarom heb ik het project open-source gemaakt, zodat ontwikkelaars het kunnen gebruiken, verbeteren en erop voort kunnen bouwen.
Wat ik heb geleerd
Tijdens het bouwen van Axium ben ik tegen allerlei uitdagingen aangelopen. Hier zijn enkele lessen die me echt zijn bijgebleven:
1. Veiligheid is complex, maar essentieel
Vanaf dag één wilde ik dat Axium veilig zou zijn, zelfs zonder extra beveiligingslagen zoals een firewall, netwerkinbraakdetectiesystemen of een centraal authenticatiesysteem. Dit zou niet alleen de schaalbaarheid waarborgen, maar ook het implementatieproces vereenvoudigen. Uiteraard blijven deze extra lagen eenvoudig toe te voegen indien nodig.
Om dit te realiseren, verdiepte ik me in diverse beveiligingsprincipes, zoals token-gebaseerde authenticatie (bijvoorbeeld JWT), tweefactorauthenticatie, optimale HTTPS-configuraties, wachtwoordhashing en het beschermen van endpoints tegen misbruik (rate limiting en automatische blacklists).
Avondenlang dook ik in de fijne details van webapplicatiebeveiliging, met een specifieke focus op API’s. Het snel evoluerende Rust-ecosysteem maakte dit proces extra uitdagend—regelmatig veranderden modules drastisch, waardoor documentatie alleen niet volstond en ik diep in de onderliggende code moest duiken. Gedurende de zes weken dat ik aan dit project werkte (af en toe een avond hier en daar), moest ik daardoor voortdurend bijleren en aanpassen.
Na veel inspanning biedt Axium nu: 🔒
- Ondersteuning voor HTTPS en HTTP/2,
- Veilige opslag van wachtwoorden met Argon2Id,
- Authenticatie via JWT, met API-keys of gebruikersnaam + wachtwoord, optioneel aangevuld met tweefactorauthenticatie,
- Een fijnmazig autorisatiesysteem dat altijd weet wat een gebruiker mag zien, waarbij rollen bepalen welke acties en handlers beschikbaar zijn (ook voor hiërarchische organisatiestructuren),
- Rate-limiting wordt automatisch geactiveerd zodra het systeem merkt dat het overbelast is,
- Verbruiksgroepen waarmee toegangsbeperkingen ingesteld kunnen worden—bijvoorbeeld: groep A mag maximaal 1000 verzoeken per dag versturen, terwijl groep B een ruimer limiet heeft. groep a mag maar 1000 verzoeken per dag sturen terwijl bijvoorbeeld b veel meer mag sturen.
Kort-en-krachtig: Een veilige basis voor een API. 💪
2. Performance vereist bewuste keuzes ⚡
Rust geeft je veel controle over hoe je je code schrijft, maar dat betekent ook dat slechte keuzes direct impact hebben op de prestaties. Ik heb veel tijd besteed aan het optimaliseren van databasequery’s, het minimaliseren van latency en het begrijpen van async-programmeren in Rust.
Als dataspecialist werk ik vaak met systemen die draaien op clusters van honderden identieke, gekoppelde servers. Dit concept is vergelijkbaar met het delen van een boodschappenlijstje binnen een gezin: iedereen pakt een deel van de taken op.
Het zou jammer zijn als op dat lijstje staat dat het zoontje paps favoriete jam moet uitkiezen, terwijl hij niet weet welke dat is en zijn vader moet storen. Dit probleem kennen we ook in de programmeerwereld: hoe zorg je ervoor dat alles asynchroon wordt uitgevoerd zonder blokkades? Alleen praten we hier niet over minuten, maar over milliseconden – of nog sneller.
Axium is hierop voorbereid:
- De code is geoptimaliseerd om zo veel mogelijk asynchroon te werken.
- Meerdere Axium-instanties kunnen gelijktijdig samenwerken door dezelfde database te gebruiken, wat configuraties zoals fail-over clusters of je een wereldwijd verspreid netwerk van Axum-instanties laat opzetten.
3. Systeembeheer is onmisbaar ⚙️
Een API bouwen is één ding; zorgen dat deze goed draait in een productieomgeving is iets heel anders. Axium heeft mijn kennis over containerisatie (met Docker), CI/CD-pipelines en monitoringtools zoals Prometheus en Grafana gebundeld.
Binnen enkele minuten geïnstalleerd
Containers maken het eenvoudig om software te installeren en te beheren, doordat ze minimale, geïsoleerde omgevingen creëren. Voor Axium betekent dit dat gebruikers binnen enkele minuten een veilige en goed functionerende installatie kunnen opzetten.
CI/CD: Van ontwikkeling naar productie
Voor de techies onder ons: met de bijgeleverde pipelines kunnen ontwikkelaars eenvoudig een ontwikkel-naar-productie-flow opzetten. Zodra wijzigingen door een collega zijn beoordeeld, worden ze automatisch naar productie gebracht.
Monitoring en gezondheidscontroles
Axium biedt een https://axium.localhost/health-endpoint, waarmee je direct inzicht krijgt in de status van je systeem:
|
|
Hiermee kun je snel problemen opsporen, je Axium installatie monitoren en indien nodig automatisch systemen in werking zetten om extra Axium-instanties opstarten om de belasting te verdelen.
Waarom Rust?
Ik wilde een uitdaging. De kracht voelen van de C++-webapps die ik vroeger programmeerde – razendsnel, maar niet bepaald robuust.
Veertig jaar geleden oververhitten auto’s in de zomer, tenzij je constant de temperatuurmeter in de gaten hield en op tijd stopte om af te koelen. Moderne auto’s lossen dit probleem op door actief de motortemperatuur te monitoren en automatisch in te grijpen voordat de situatie kritiek wordt. Rust doet iets soortgelijks voor programmeurs. Waar je in C++ voortdurend handmatig het geheugenbeheer en foutafhandeling in de gaten moet houden, zorgt Rust ervoor dat je applicatie zichzelf beschermt tegen geheugenlekken en race conditions. Zo kun je je richten op de logica van je applicatie, zonder bang te zijn dat een klein foutje je hele systeem instabiel maakt.
Python en JavaScript zijn robuust, maar niet snel genoeg.
Rust biedt de voordelen van beide werelden: snelheid én betrouwbaarheid.
Hoe werkt Axium?
Axium is een startpunt voor het bouwen van API’s in Rust. De kerncomponenten zijn:
- Authenticatie: Beheer van gebruikers en rechten.
- Router: Verwerking van API-verzoeken.
- Uitvoerders: De logica achter de API-functionaliteit.
- Database: Opslag en verwerking van data.
De router zorgt voor een fatsoenlijke begeleiding van de bezoeker. Zodra https://axium.localhost/signin intoetst, weet de router dat de handler voor signin-opgeroepen moet worden. Deze handler checkt de meegeven inloggegevens, benaderd de database, toetst de inloggegevens en geeft bij een goede aanmelding een token waarmee de gebruiker de rest van de API kan verkennen. Vanuit hier kan de gebruiker op een veilige manier via https://axium.localhost/todo/all en een bericht welke de eerder verkregen token staat, in dit geval alle ToDo’s van de gebruiker inzien.
Dit is slechts een simpel voorbeeld. Vervang eens todo/all met invoices/all of products/all. Je kunt gemakkelijk en veilig een gehele database aan informatie en kennis delen en laten verrijken.
Je kunt ook filterparameters gebruiken om specifieke gegevens op te halen, zoals:
invoices/all?status=paid– Alleen betaalde facturen ophalenproducts/all?category=electronics&price_lt=500– Elektronica onder de €500 tonenusers/all?role=admin&active=true– Actieve beheerders weergeven.
De kracht van Axium is de simpliciteit waarmee de programmeur gemakkelijk een productie gerede API opzet. Het toevoegen van nieuwe handlers is met een beetje kennis van Rust en SQL vrij gemakkelijk. Alle lastige delen zijn al gedaan.
Het mooiste is wanneer je https://axium.localhost/docs bezoekt krijg je een mooi overzicht van alle handlers, hoe je deze kunt gebruiken en de optie om ze te testen.
Wat komt hierna?
Axium is een doorlopend project. Mijn doelen voor de toekomst:
- Bijblijven met de nieuwste beveiligingsstandaarden.
- Ondersteuning voor meer databronnen, zoals S3 en Azure Blob Storage.
- Testen op grotere schaal.
- Nieuwe projecten met Axium als basis.
Conclusie
Axium is voor mij meer dan alleen code; het is een reflectie van mijn groei als ontwikkelaar. Het laat zien hoe ver ik ben gekomen, maar ook hoeveel er nog te leren valt. Door dit project heb ik niet alleen meer geleerd over Rust, maar ook over mezelf – over mijn passie voor programmeren, mijn nieuwsgierigheid naar nieuwe technologieën en mijn wens om systemen te bouwen die écht werken in de praktijk.
Als jij ook geïnteresseerd bent in het bouwen van veilige en performante systemen, nodig ik je uit om Axium eens te bekijken of mee te denken over hoe we dit project verder kunnen verbeteren. Samen kunnen we blijven leren en groeien!
Lees meer op: https://github.com/Riktastic/Axium/
Ook interessant
Windows naar Linux: Herhaalbaarheid met NixOS
Hoe een voormalig systeembeheerder de overstap maakte van Windows complexiteit naar NixOS eenvoud.
De beste visualisaties voor jouw situatie
Voor strakke, overzichtelijke en toegankelijke rapportages.
Word een Microsoft Data Expert
Ontwikkel jezelf met de gratis Power BI en data engineering cursussen van Microsoft.