API-first architectuur

Eén backend, vele consumenten.

Geen losse applicatie maar een centraal wind-asset-platform. Portaal, mobiel, SCADA, Power BI en AI praten allemaal tegen dezelfde gescopede, multi-tenant API.

OpenAPI

first contract

7

API-blokken

RBAC

per request

Time-series

apart opgeslagen

De stack van boven naar beneden

Iedere consumer praat met dezelfde API-laag. De webapp bevat geen database-logica.

Frontend / Portal   Mobile App   External customers
SCADA   Maintenance partners   Reporting tools   AI modules
        ↓
     API layer
        ↓
   Business logic
        ↓
Database / Time-series / Files
Frontend / PortalMobile AppExterne klantenSCADA-systemenOnderhoudspartnersRapportagetoolsAI-modules

Kern-endpoints

De webapp roept dezelfde endpoints aan als een externe partner.

GET /api/assets/windfarms
GET /api/assets/windturbines
GET /api/assets/windturbines/{id}
GET /api/measurements?assetId=123&from=...&to=...
POST /api/measurements
POST /api/alerts
POST /api/workorders
GET /api/reports/production

De zeven API-blokken

Identity API

  • login
  • gebruikers
  • rollen
  • organisaties
  • rechten

Asset API

  • windparken
  • turbines
  • locaties
  • componenten

Measurement API

  • realtime meetdata
  • historie
  • aggregaties

Alert API

  • alarmregels
  • meldingen
  • opvolging

Maintenance API

  • werkbonnen
  • inspecties
  • serviceverslagen

Integration API

  • externe databronnen
  • SCADA-ingang
  • webhooks
  • API keys

Reporting API

  • dashboards
  • exports
  • KPI's

Multi-tenant beveiliging

Iedere API-call beantwoordt vier vragen voor de query naar de database gaat.

Wie ben je?

Authenticatie via token of OAuth2.

Bij welke organisatie hoor je?

Tenant-context bepaalt de scope.

Welke assets mag je zien?

AssetAccess filtert iedere query.

Welke actie mag je uitvoeren?

Scopes en rollen bepalen lees of schrijf.

User Marco
Organization: Operator A
Role: OperatorAdmin
Access: Windpark A + Windpark B

GET /api/assets/windfarms/C → 403 Forbidden

Meetdata apart behandelen

Tijdreeksen schalen anders dan stamdata. Splits relationele opslag van time-series en files.

Relationele database

  • users
  • organizations
  • windfarms
  • turbines
  • rechten
  • werkbonnen

Time-series database

  • power
  • windspeed
  • vibration
  • temperature
  • alarms

SQL Server of PostgreSQL

Stamdata, gebruikers, rechten en werkbonnen.

TimescaleDB, InfluxDB of Azure Data Explorer

Hoogfrequente meetdata per turbine.

Blob Storage

Documenten, inspectiefoto's en rapportages.

Externe API-clients en scopes

Voor externen worden aparte ApiClients aangemaakt met scope en rate limit.

ApiClient

  • OrganizationId
  • Name
  • ClientId
  • SecretHash
  • AllowedScopes
  • RateLimit
  • IsActive
assets.readmeasurements.readmeasurements.writealerts.readalerts.writemaintenance.writereports.read

Webhooks

Naast ophalen kunnen externen ook events ontvangen via subscriptions.

POST /api/webhooks/subscriptions
turbine.offlinealert.createdalert.resolvedmeasurement.thresholdExceededmaintenance.completed

Advies, opbouw in stappen

Eerst het contract, dan de code.

01

OpenAPI / Swagger-contract

Eerst het API-contract ontwerpen voordat er code wordt geschreven.

02

Backend op basis van het contract

Business logic, multi-tenant security en time-series opslag.

03

Webportaal bovenop dezelfde API

Geen directe database-toegang, alles via de API-laag.

04

Externe koppelingen toelaten

API-clients, scopes, rate limiting en webhooks.

05

Mobiel, Power BI en AI aansluiten

Zelfde backend, andere consumenten.

Het resultaat: geen losse applicatie, maar een centraal wind-asset-platform waarop meerdere partijen veilig aansluiten.