Architectuur overzicht
SQLio draait op je eigen server (Windows Server met IIS en .NET 9) en werkt met je SQL Server-databases. De configuratie staat in een eigen database, SQLioDB. De databases waarmee SQLio werkt, bijvoorbeeld je ERP, koppel je per omgeving.
Omgevingen
Test, Acceptatie en Productie, elk met eigen databases. Met Omgeving sync zet je een geteste configuratie over naar productie.
Eigen server
Je data verlaat je netwerk alleen via de koppelingen die je zelf inricht. Geen cloudtussenstation.
Beveiligd
Inkomende API's met gebruiker én API-key, rechten per API, en versleutelde opslag van geheimen.
Vier kernconcepten
Datasets (Basis)
Bepalen welke data je deelt en in welke vorm.
- Tabellen, views of stored procedures als bron
- Geneste JSON met lagen (bijv. order → regels)
- Bron voor API's, webhooks en pipelines
API's (Pull)
Externe systemen halen data op of schrijven via REST API's.
- GET, POST, PATCH en DELETE
- Gebruiker, wachtwoord en API-key per aanroep
- Automatische Swagger-documentatie
Webhooks (Push)
Bij een wijziging in de database stuurt SQLio direct een bericht naar een extern systeem.
- Trigger op INSERT, UPDATE of DELETE, met voorwaarden
- Herhaalpogingen en e-mail bij fouten
- Antwoord terugschrijven in je database
Data pipelines (Gepland)
Stappen na elkaar: ophalen, omzetten, verwerken. Op een vast moment.
- Interval of dagelijks op een vast tijdstip
- Externe en interne API's, datasets, JSON samenstellen
- Foutafhandeling en herhaalpogingen per stap
Hoe werken webhooks?
SQLio maakt een trigger aan op de gekozen tabel, voor INSERT, UPDATE of DELETE
Voldoet de wijziging aan de voorwaarden, dan zet de trigger haar in een wachtrij in dezelfde database. De transactie van de gebruiker wacht niet op het externe systeem.
SQLio bouwt de JSON: standaardvelden, eigen velden en eventueel data uit een dataset
Het bericht gaat naar het externe endpoint, met de authenticatie van die verbinding
Elke aanroep wordt gelogd. Bij een storing probeert SQLio het opnieuw; lukt het uiteindelijk niet, dan volgt een e-mail
Het antwoord kan via een API of stored procedure terug naar je database
Omgevingen en aliassen
Een omgeving is een complete, gescheiden inrichting: bijvoorbeeld Test en Productie. Elke omgeving heeft een eigen URL-prefix en eigen databases, zodat je veilig kunt testen zonder productie te raken.
Opbouw
Omgevingstypes
Test, Acceptatie en Productie. Productie heeft geen URL-prefix: /api/voorraad tegenover /api/test/voorraad
Connectie-aliassen
Een alias (bijv. erp, nl, be) is de logische naam van een database. Per omgeving bepaal je welke database erachter zit
Meerdere databases
Werk met meerdere databases tegelijk, bijvoorbeeld een ERP per vestiging, met één configuratie
Controle vooraf
SQLio controleert per connectie de verbinding, de rechten en de onderdelen voor webhooks
Van test naar productie
Omgeving sync
Zet datasets, API's, webhooks en pipelines in één keer over van Test naar Productie, inclusief versie
Productie alleen-lezen
Een omgeving kan alleen-lezen zijn: wijzigen gaat dan alleen via sync. Aan- en uitzetten blijft mogelijk
Testsessies
API's en webhooks in een testomgeving werken alleen tijdens een actieve testsessie. Zo verstuurt een test nooit per ongeluk berichten
Toegang per omgeving
Gebruikers krijgen toegang tot specifieke omgevingen; beheerders zien alles
Datasets
Datasets vormen de basis van alle integraties. Ze bepalen welke data beschikbaar is en in welke vorm, voor API's, webhooks en pipelines.
Databronnen
Tabellen
Direct data ophalen uit database-tabellen
Views
Gebruik bestaande views met joins en logica
Stored procedures
Voer een stored procedure uit en gebruik het resultaat
Mogelijkheden
Lagen
Voeg onderliggende gegevens toe als lagen: als genest object, als lijst of samengevoegd met de bovenliggende laag
Velden kiezen en hernoemen
Bepaal welke kolommen meegaan, in welke volgorde en onder welke naam
Filters
WHERE-condities met onder meer =, >, LIKE, IN en BETWEEN, gegroepeerd met AND/OR
Parameters
Maak datasets dynamisch: de waarde komt uit de API-aanroep, de webhook of de pipeline
Per database beschikbaar
Vink aan voor welke aliassen (databases) een dataset geldt, en test hem met echte data
Uitvoer
Velden zonder waarde (NULL) weglaten en de lijst desgewenst verpakken in een object
API's
Maak REST API's waarmee externe systemen data ophalen of wijzigen. Elke API heeft één HTTP-methode; voor ophalen en wijzigen van hetzelfde maak je dus twee API's.
HTTP-methoden
Data ophalen via een dataset
Aanmaken in een tabel of via een stored procedure
Bijwerken in een tabel of via een stored procedure
Verwijderen uit een tabel of via een stored procedure
Voorbeeld GET met paginering
Configuratie per API
Bron
Een dataset voor GET, een tabel of stored procedure voor POST, PATCH en DELETE
Parameters
Uit de URL, de querystring of de body; verplichte parameters worden gecontroleerd
Paginering
Met een cursor (after) en een vaste paginagrootte, optioneel met het totaal
Swagger
Interactieve documentatie, automatisch per omgeving en per database-alias
Rechten per API
Per API-gebruiker bepaal je welke API's hij mag aanroepen
Audit-log
Elke aanroep wordt gelogd: gebruiker, IP-adres, verzoek, antwoord, status en duur
Webhooks
Een webhook stuurt een bericht naar een extern systeem zodra er in je database iets verandert. Je bepaalt zelf wanneer, wat en waarheen.
Bericht (JSON)
Je stelt het bericht zelf samen uit standaardvelden (table, field, oldValue,
newValue, operation, timestamp, elk te hernoemen), eigen velden (een vaste
waarde of een kolom uit de gewijzigde rij) en eventueel data uit een dataset:
Configuratie
Trigger
Per webhook één type: nieuwe, gewijzigde of verwijderde regel
Voorwaarden
Alleen versturen als een veld wijzigt of aan een waarde voldoet, gecombineerd met AND/OR; voor lastige gevallen een eigen SQL-conditie
Batches
Bundel meerdere wijzigingen in één bericht
Herhaalpogingen
Bij een storing probeert SQLio het opnieuw (instelbaar aantal); bij een fout in het verzoek zelf (4xx) niet
Antwoord verwerken
Stuur het antwoord door naar een interne API of een stored procedure, die het terugschrijft in je database
Meldingen
Een e-mail aan vaste ontvangers als een bericht definitief niet lukt
Authenticatie naar externe systemen
Hoe SQLio een extern systeem bereikt, leg je één keer vast per verbinding (externe endpoints). Webhooks en pipelines gebruiken die verbinding. Mogelijk zijn:
- API-key — in een header naar keuze
- Basic Auth — gebruikersnaam en wachtwoord
- Bearer-token — een vast token
- OAuth 2.0 Client Credentials — token automatisch ophalen, bewaren en vernieuwen
- HMAC-SHA256-handtekening — over de body, in hex of base64
- Eigen headers — los of in combinatie met de methoden hierboven
Data pipelines
Een pipeline voert stappen na elkaar uit, bijvoorbeeld: zendingen ophalen bij een transporteur, het antwoord omzetten en via een interne API in je database verwerken. De uitvoer van een stap is de invoer van de volgende.
Stappen
Planning
De eerste stap bepaalt wanneer de pipeline draait: elke zoveel minuten of dagelijks op een vast tijdstip. Handmatig starten kan altijd
Externe API
Roep een extern systeem aan via een externe endpoint
Interne API
Verwerk data in je eigen database via een SQLio-API, ook via API's die niet naar buiten zichtbaar zijn
Dataset
Haal data op uit je database als invoer voor de volgende stap
JSON samenstellen
Zet data om in de vorm die het volgende systeem verwacht
Batches
Verwerk grote hoeveelheden in delen
Betrouwbaarheid
Foutafhandeling per stap
Bij een fout stoppen, doorgaan of naar een andere stap springen
Herhaalpogingen
Per stap in te stellen, met oplopende wachttijd en een time-out
Logboek
Elke run met de status, invoer en uitvoer per stap en per batch
Meldingen
Een e-mail als een pipeline mislukt
Security
SQLio draait op je eigen server en werkt met de minimale rechten die nodig zijn. Toegang tot data verloopt alleen via de API's en koppelingen die je zelf inricht.
Inkomend verkeer (API's)
Gebruiker én API-key
Elke aanroep heeft Basic Auth én een API-key nodig, van dezelfde API-gebruiker. Een key hoort bij één omgeving en kan een vervaldatum hebben.
Rechten per API
Per API-gebruiker bepaal je welke API's hij mag aanroepen. Alle andere aanroepen worden geweigerd.
Audit-log
Elke API-aanroep wordt vastgelegd: wie, vanaf welk IP-adres, wat en met welk resultaat.
Uitgaand verkeer (webhooks en pipelines)
OAuth 2.0 Client Credentials
Tokens worden automatisch opgehaald, versleuteld bewaard en vernieuwd als ze verlopen.
HMAC-handtekening
Het ontvangende systeem kan controleren dat een bericht echt van SQLio komt en onderweg niet is gewijzigd.
Opslag en toegang
Wachtwoorden en keys als hash
Wachtwoorden van gebruikers en API-gebruikers (PBKDF2) en API-keys (SHA-256) worden alleen als hash opgeslagen. Een API-key is maar één keer zichtbaar, bij het aanmaken.
Versleutelde geheimen
Connection strings en geheimen van externe systemen worden versleuteld (AES-256) met een sleutel die per installatie wordt aangemaakt.
Rollen en toegang per omgeving
Gebruikers richten datasets, API's, webhooks en pipelines in voor de omgevingen waar ze toegang toe hebben. Beheerders beheren daarnaast omgevingen, API-gebruikers, instellingen en de sync. Aanmelden kan lokaal of via Microsoft Entra ID (Azure AD).
Minimale databaserechten
SQLio werkt in je databases via een eigen rol (SQLioRole) met alleen de rechten die nodig zijn. Webhook-triggers worden aangemaakt via één vaste procedure, zodat SQLio zelf geen rechten nodig heeft om tabellen te wijzigen.