CSS EDV Support Logo

MESO-OData API

(.NET Core) WebService, welcher Zugriff auf die Mesonic WinLine© WinLine Daten im REST OData-Standard bietet. Ideal zur Anbindung externer Systeme und mobiler Apps

Stand: 06.10.2025



MESO API Framework

Enterprise-REST-APIs für die Integration mit Mesonic WinLine© ERP-Systemen

Dieses Framework stellt containerisierte REST-APIs zur nahtlosen Integration mit WinLine ERP-Systemen bereit. Perfekt für Entwickler, die Anwendungen, mobile Apps, Web-Portale oder beliebige Systeme erstellen, die auf WinLine-Daten zugreifen müssen.

🚀 Verfügbare API-Services

1. MESOOData API (mesoapi-odata)

Vollständige OData v4 REST-API für umfassenden WinLine-Datenzugriff

Bietet standardisierte OData-REST-Endpunkte für alle WinLine-Entitäten. Ideal für datengetriebene Anwendungen, Reporting-Tools und umfassende Integrationen.

Docker Image: ghcr.io/css-edv-support/mesoapi-odata Endpunkte: /api/odata/ | Dokumentation: /swagger

2. MESOOData Reduced API (mesoapireduced-odata)

Schlanke OData-API optimiert für wesentliche Geschäftsdaten

Optimierte Version mit Fokus auf Kern-Geschäftsentitäten wie Artikel, Kunden, Aufträge. Perfekt für mobile Apps und leistungskritische Anwendungen.

Docker Image: ghcr.io/css-edv-support/mesoapireduced-odata Endpunkte: /odata/ | Dokumentation: /swagger

3. MesoWebAPI (mesoapi-webapi)

Geschäftsorientierte REST-API mit benutzerdefinierten Operationen

Bietet spezialisierte Geschäftsmethoden, Datenvalidierung und komplexe Operationen über einfache CRUD-Vorgänge hinaus. Ideal für Geschäftslogik-Integrationen und Workflow-Automatisierung.

Docker Image: ghcr.io/css-edv-support/mesoapi-webapi Endpunkte: /business/api/ und /business/odata/ | Dokumentation: /swagger

4. MesoIdentityApi

Zentrale Authentifizierung und Benutzerverwaltung

Übernimmt Benutzerauthentifizierung, JWT-Token-Management und rollenbasierte Zugriffskontrolle, integriert mit WinLine-Benutzersystemen.

Docker Image: Auf Anfrage verfügbar Endpunkte: /auth/ | Dokumentation: /swagger

5. MesoWebBrowser

Demo-Blazor-Anwendung zur Veranschaulichung der API-Integration

Interaktive Webanwendung, die zeigt, wie MESO-APIs in realen Szenarien verwendet werden. Enthält Beispiele für Datenanzeige, Filterung und Benutzerinteraktionen mit WinLine-Daten.

Technologie: Blazor Server mit DevExpress-Komponenten Zweck: Referenzimplementierung und Test-Interface

6. MesoOData.Client

.NET Client-Bibliothek für einfache API-Integration

NuGet-Package mit vorgefertigten C#-Klassen und Methoden für die nahtlose Integration der MESO-APIs in .NET-Anwendungen. Vereinfacht den Zugriff auf WinLine-Daten erheblich.

NuGet Package: MesoOData.Client Zweck: Vereinfachte .NET-Integration

🏗️ Integrations-Architektur

┌─────────────────────────────────────────────┐
│           Ihre Anwendungen                  │
│   (Web Apps, Mobile Apps, Portale)         │
├─────────────────────────────────────────────┤
│              MESO APIs                      │
│  OData API │ Reduced API │ Business API    │ 
├─────────────────────────────────────────────┤
│            WinLine ERP System               │
│        (Daten + System Datenbanken)        │
└─────────────────────────────────────────────┘

Einfacher Integrations-Workflow: 1. Bereitstellen der MESO-API-Container mit Ihren WinLine-Datenbankverbindungen 2. Konfigurieren der Authentifizierung (API-Keys oder JWT) 3. Zugriff auf WinLine-Daten über Standard-REST/OData-Aufrufe 4. Erstellen Ihrer Anwendungen mit bekannten HTTP/JSON-APIs

⚡ Schnellstart - Container-Hosting

Voraussetzungen

Wählen Sie Ihren API-Container

Beginnen Sie mit der Reduced API (empfohlen für die meisten Anwendungsfälle):

docker run -d \
  --name meso-api \
  -p 5500:80 \
  -e ConnectionStrings__WinLineXPODataConnection="Server=ihr-server;Database=WinLineData;User Id=api-user;******;TrustServerCertificate=true" \
  -e ConnectionStrings__WinLineXPOSystemConnection="Server=ihr-server;Database=WinLineSystem;User Id=api-user;******;TrustServerCertificate=true" \
  -e AppSettings__LicenseNumber="IHRE_CSS_LIZENZ" \
  -e AppSettings__CustomerNumber="IHRE_KUNDENNUMMER" \
  -e AppSettings__ApiKeyHeaderValue="ihr-sicherer-api-key" \
  ghcr.io/css-edv-support/mesoapireduced-odata:latest

Für umfassenden Datenzugriff (Vollständige OData API):

docker run -d \
  --name meso-full-api \
  -p 5501:80 \
  -e ConnectionStrings__WinLineXPODataConnection="Server=ihr-server;Database=WinLineData;User Id=api-user;******;TrustServerCertificate=true" \
  -e ConnectionStrings__WinLineXPOSystemConnection="Server=ihr-server;Database=WinLineSystem;User Id=api-user;******;TrustServerCertificate=true" \
  -e AppSettings__LicenseNumber="IHRE_CSS_LIZENZ" \
  -e AppSettings__CustomerNumber="IHRE_KUNDENNUMMER" \
  -e AppSettings__ApiKeyHeaderValue="ihr-sicherer-api-key" \
  ghcr.io/css-edv-support/mesoapi-odata:latest

Für Geschäftslogik und benutzerdefinierte Operationen:

docker run -d \
  --name meso-business-api \
  -p 5502:80 \
  -e ConnectionStrings__WinLineXPODataConnection="Server=ihr-server;Database=WinLineData;User Id=api-user;******;TrustServerCertificate=true" \
  -e ConnectionStrings__WinLineXPOSystemConnection="Server=ihr-server;Database=WinLineSystem;User Id=api-user;******;TrustServerCertificate=true" \
  -e AppSettings__LicenseNumber="IHRE_CSS_LIZENZ" \
  -e AppSettings__CustomerNumber="IHRE_KUNDENNUMMER" \
  -e AppSettings__ApiKeyHeaderValue="ihr-sicherer-api-key" \
  ghcr.io/css-edv-support/mesoapi-webapi:latest

Installation überprüfen

Nach dem Start eines Containers greifen Sie auf diese Endpunkte zu, um zu überprüfen, ob alles funktioniert:

🔧 Konfiguration & Lizenzierung

Erforderliche Umgebungsvariablen

Alle APIs benötigen diese Kerneinstellungen:

Variable Beschreibung Beispiel Erforderlich
ConnectionStrings__WinLineXPODataConnection WinLine Geschäftsdatenbank-Verbindung Server=sql-srv;Database=WL_Data;User Id=api;******;TrustServerCertificate=true
ConnectionStrings__WinLineXPOSystemConnection WinLine Systemdatenbank-Verbindung Server=sql-srv;Database=WL_System;User Id=api;******;TrustServerCertificate=true
AppSettings__LicenseNumber CSS EDV Support Lizenznummer 12345678
AppSettings__CustomerNumber Ihre Kundennummer von CSS 987654321

Authentifizierungs-Konfiguration

Wählen Sie eine oder beide Authentifizierungsmethoden:

Variable Beschreibung Beispiel Erforderlich
AppSettings__ApiKeyHeaderValue Statischer API-Key für X-MesoAPI-Key Header mein-sicherer-api-key-2024
AppSettings__UseWinLineJwtLogin WinLine-Benutzerauthentifizierung aktivieren true
AppSettings__Secret JWT-Signierungsgeheimnis (bei JWT-Verwendung) ihr-jwt-geheimnis-key
AppSettings__DefaultCompany Standard-Firmencode 500M

Docker Compose für Produktion

version: '3.9'

services:
  # Reduced OData API - Häufigste Wahl
  meso-reduced-api:
    image: ghcr.io/css-edv-support/mesoapireduced-odata:latest
    container_name: meso-reduced-api
    restart: unless-stopped
    ports:
      - "5500:80"
    environment:
      # Datenbankverbindungen
      - ConnectionStrings__WinLineXPODataConnection=Server=sql-server;Database=WinLine_Data;User Id=api_user;******;TrustServerCertificate=true
      - ConnectionStrings__WinLineXPOSystemConnection=Server=sql-server;Database=WinLine_System;User Id=api_user;******;TrustServerCertificate=true
      
      # Lizenzierung (ERFORDERLICH)
      - AppSettings__LicenseNumber=12345678
      - AppSettings__CustomerNumber=987654321
      
      # Authentifizierung
      - AppSettings__ApiKeyHeaderValue=production-api-key-2024
      - AppSettings__UseWinLineJwtLogin=false
      
      # Optionale Einstellungen
      - AppSettings__DefaultCompany=500M
      - DOTNET_ENVIRONMENT=Production
      - TZ=Europe/Berlin

  # Business API - Für benutzerdefinierte Operationen
  # meso-business-api:
  #   image: ghcr.io/css-edv-support/mesoapi-webapi:latest
  #   container_name: meso-business-api
  #   restart: unless-stopped
  #   ports:
  #     - "5502:80"
  #   environment:
  #     # Gleiche Konfiguration wie oben

🔑 Lizenzierungsanforderungen

Wichtig: Alle MESO-APIs benötigen eine gültige Lizenz von CSS EDV Support:

Ohne gültige Lizenz starten die APIs nicht oder stellen den Betrieb nach einer Testperiode ein.

🔐 Authentifizierungsmethoden

API-Key-Authentifizierung (Empfohlen)

Einfach und sicher für Server-zu-Server-Kommunikation:

# API-Key in Umgebung setzen
export MESO_API_KEY="ihr-sicherer-api-key"

# X-MesoAPI-Key Header in alle Anfragen einschließen
curl -H "X-MesoAPI-Key: $MESO_API_KEY" \
     http://localhost:5500/odata/Artikelview

JWT-Authentifizierung (WinLine-Benutzer)

Für Anwendungen, bei denen sich WinLine-Benutzer authentifizieren müssen:

# 1. JWT im Container aktivieren
# -e AppSettings__UseWinLineJwtLogin=true
# -e AppSettings__Secret="ihr-jwt-geheimnis"

# 2. Anmeldung mit WinLine-Anmeldedaten
curl -X POST http://localhost:5500/auth/login \
     -H "Content-Type: application/json" \
     -d '{
       "username": "winline-benutzername",
       "password": "winline-passwort"
     }'

# Antwort enthält JWT-Token:
# {
#   "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
#   "expiration": "2024-10-05T10:30:00Z",
#   "username": "winline-benutzername",
#   "groups": ["Verkauf", "Geschäftsführung"]
# }

# 3. JWT-Token im Authorization-Header verwenden
curl -H "Authorization: ******" \
     http://localhost:5500/odata/Artikelview

📊 OData REST API Verwendung

Die OData-APIs bieten Standard-REST-Endpunkte nach der OData v4-Spezifikation. Alle Beispiele verwenden API-Key-Authentifizierung.

Kern-Geschäftsentitäten

Artikel (Artikel/Artikelview)

# Alle Artikel abrufen
GET /odata/Artikelview
curl -H "X-MesoAPI-Key: $API_KEY" http://localhost:5500/odata/Artikelview

# Bestimmten Artikel nach Nummer abrufen
GET /odata/Artikelview?$filter=Artikelnummer eq '10001'
curl -H "X-MesoAPI-Key: $API_KEY" \
     "http://localhost:5500/odata/Artikelview?\$filter=Artikelnummer eq '10001'"

# Artikel nach Bezeichnung suchen
GET /odata/Artikelview?$filter=contains(Bezeichnung,'Laptop')
curl -H "X-MesoAPI-Key: $API_KEY" \
     "http://localhost:5500/odata/Artikelview?\$filter=contains(Bezeichnung,'Laptop')"

# Artikel mit nur bestimmten Feldern abrufen
GET /odata/Artikelview?$select=Artikelnummer,Bezeichnung,VkPreis1
curl -H "X-MesoAPI-Key: $API_KEY" \
     "http://localhost:5500/odata/Artikelview?\$select=Artikelnummer,Bezeichnung,VkPreis1"

# Artikel nach Preis sortiert abrufen
GET /odata/Artikelview?$orderby=VkPreis1 desc&$top=20
curl -H "X-MesoAPI-Key: $API_KEY" \
     "http://localhost:5500/odata/Artikelview?\$orderby=VkPreis1 desc&\$top=20"

Kunden (Kunden)

# Alle Kunden abrufen
GET /odata/Kunden
curl -H "X-MesoAPI-Key: $API_KEY" http://localhost:5500/odata/Kunden

# Kunde nach Namen suchen
GET /odata/Kunden?$filter=contains(Name1,'Mueller')
curl -H "X-MesoAPI-Key: $API_KEY" \
     "http://localhost:5500/odata/Kunden?\$filter=contains(Name1,'Mueller')"

# Kunde mit Adressen abrufen
GET /odata/Kunden?$expand=Adressen
curl -H "X-MesoAPI-Key: $API_KEY" \
     "http://localhost:5500/odata/Kunden?\$expand=Adressen"

Aufträge (Aufträge)

# Aktuelle Aufträge abrufen
GET /odata/Auftraege?$filter=Datum ge 2024-01-01&$orderby=Datum desc
curl -H "X-MesoAPI-Key: $API_KEY" \
     "http://localhost:5500/odata/Auftraege?\$filter=Datum ge 2024-01-01&\$orderby=Datum desc"

# Auftrag mit Auftragspositionen abrufen
GET /odata/Auftraege?$expand=Auftragspositionen
curl -H "X-MesoAPI-Key: $API_KEY" \
     "http://localhost:5500/odata/Auftraege?\$expand=Auftragspositionen"

Erweiterte OData-Abfragen

Filtern und Suchen

# Mehrere Bedingungen mit UND
GET /odata/Artikelview?$filter=VkPreis1 gt 100 and Artikelgruppe eq 'HARDWARE'

# Mehrere Bedingungen mit ODER  
GET /odata/Artikelview?$filter=Artikelgruppe eq 'SOFTWARE' or Artikelgruppe eq 'HARDWARE'

# Datumsbereich-Filterung
GET /odata/Auftraege?$filter=Datum ge 2024-01-01 and Datum le 2024-12-31

# Null-Wert-Prüfungen
GET /odata/Kunden?$filter=Email ne null

# String-Funktionen
GET /odata/Artikelview?$filter=startswith(Artikelnummer,'10') and length(Bezeichnung) gt 10

Paginierung und Sortierung

# Paginierung mit $top und $skip
GET /odata/Artikelview?$top=50&$skip=100&$count=true

# Mehrere Sortierkriterien
GET /odata/Artikelview?$orderby=Artikelgruppe,VkPreis1 desc

# Nur Gesamtzahl abrufen
GET /odata/Artikelview/$count

Data Expansion (Joins)

# Single level expansion
GET /odata/Auftraege?$expand=Kunde

# Multi-level expansion
GET /odata/Auftraege?$expand=Kunde($expand=Adressen)

# Selective expansion with filtering
GET /odata/Auftraege?$expand=Auftragspositionen($filter=Menge gt 5)

🔧 Business API Methoden (MesoWebAPI)

Die Business API bietet spezialisierte Endpunkte für komplexe Operationen über einfache CRUD-Vorgänge hinaus.

Lager-Operationen

# Aktuelle Lagerbestände abrufen
GET /business/api/Bestand?mesocomp=500M
curl -H "X-MesoAPI-Key: $API_KEY" \
     "http://localhost:5502/business/api/Bestand?mesocomp=500M"

# Lagerbestand für bestimmten Artikel abrufen
GET /business/api/Bestand/GetByProductId/10001?mesocomp=500M
curl -H "X-MesoAPI-Key: $API_KEY" \
     "http://localhost:5502/business/api/Bestand/GetByProductId/10001?mesocomp=500M"

# Lagerbestand nach EAN-Code abrufen
GET /business/api/Bestand/GetByStockEAN/1234567890123?mesocomp=500M
curl -H "X-MesoAPI-Key: $API_KEY" \
     "http://localhost:5502/business/api/Bestand/GetByStockEAN/1234567890123?mesocomp=500M"

Dokument-Operationen

# Rechnung als PDF generieren und herunterladen
POST /business/api/Documents/GenerateInvoicePdf
curl -X POST -H "X-MesoAPI-Key: $API_KEY" \
     -H "Content-Type: application/json" \
     -d '{"invoiceNumber": "RE-2024-001", "mesocomp": "500M"}' \
     http://localhost:5502/business/api/Documents/GenerateInvoicePdf

# Export customer data
POST /business/api/Export/Customers
curl -X POST -H "X-MesoAPI-Key: $API_KEY" \
     -H "Content-Type: application/json" \
     -d '{"format": "excel", "filters": {"customerGroup": "A"}}' \
     http://localhost:5502/business/api/Export/Customers

Validation and Business Logic

# Validate customer data before creation
POST /business/api/Validation/ValidateCustomer
curl -X POST -H "X-MesoAPI-Key: $API_KEY" \
     -H "Content-Type: application/json" \
     -d '{
       "name": "New Customer Ltd",
       "email": "[email protected]",
       "vatNumber": "DE123456789"
     }' \
     http://localhost:5502/business/api/Validation/ValidateCustomer

# Calculate order totals with discounts
POST /business/api/Calculation/CalculateOrderTotal
curl -X POST -H "X-MesoAPI-Key: $API_KEY" \
     -H "Content-Type: application/json" \
     -d '{
       "customerId": "K-10001",
       "items": [
         {"articleNumber": "10001", "quantity": 2},
         {"articleNumber": "10002", "quantity": 1}
       ],
       "discountPercent": 5
     }' \
     http://localhost:5502/business/api/Calculation/CalculateOrderTotal

Archive Operations

# Search archive documents
GET /business/api/Archive/Search?keywords=Invoice&documentType=RE
curl -H "X-MesoAPI-Key: $API_KEY" \
     "http://localhost:5502/business/api/Archive/Search?keywords=Invoice&documentType=RE"

# Download archive document
GET /business/api/Archive/Download/12345
curl -H "X-MesoAPI-Key: $API_KEY" \
     http://localhost:5502/business/api/Archive/Download/12345 \
     --output document.pdf

🎯 Common Integration Scenarios

Mobile App Data Sync

# Get modified data since last sync
GET /odata/Artikelview?$filter=ModifiedDate gt 2024-10-01T08:00:00Z&$select=Artikelnummer,Bezeichnung,VkPreis1,ModifiedDate

# Lightweight customer lookup for mobile
GET /odata/Kunden?$select=Kundennummer,Name1,Email&$filter=contains(Name1,'search-term')&$top=10

E-Commerce Integration

# Product catalog with images and stock
GET /odata/Artikelview?$filter=WebshopArtikel eq true&$select=Artikelnummer,Bezeichnung,VkPreis1,WebshopBeschreibung&$expand=Lagerbestand

# Order creation via Business API
POST /business/api/Orders/CreateWebOrder
curl -X POST -H "X-MesoAPI-Key: $API_KEY" \
     -H "Content-Type: application/json" \
     -d '{
       "customerEmail": "[email protected]",
       "items": [
         {"sku": "10001", "quantity": 2, "price": 299.99}
       ],
       "shippingAddress": {...},
       "paymentMethod": "CreditCard"
     }' \
     http://localhost:5502/business/api/Orders/CreateWebOrder

Reporting and Analytics

# Sales statistics
GET /business/api/Reports/SalesStatistics?startDate=2024-01-01&endDate=2024-12-31&groupBy=month

# Top selling products
GET /odata/Auftragspositionen?$apply=groupby((Artikelnummer),aggregate(Menge with sum as TotalSold))&$orderby=TotalSold desc&$top=10

🐳 Container Orchestration

Neue Deployment-Strategie verfügbar! 📋 Siehe DEPLOYMENT.md für den neuen automatischen Beta/Release-Workflow

Schneller Start: Automatisierte Deployments

Das MESO API Framework nutzt jetzt automatisierte Deployment-Workflows:

# Beta Environment (Staging/Testing)
docker-compose -f docker-compose.beta.yml up -d

# Production Environment  
docker-compose -f docker-compose.production.yml up -d

Docker Compose for Multiple APIs

Run multiple APIs together for comprehensive coverage:

version: '3.9'

services:
  # Reverse proxy for API routing
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - meso-reduced-api
      - meso-business-api

  # Reduced OData API
  meso-reduced-api:
    image: ghcr.io/css-edv-support/mesoapireduced-odata:latest
    restart: unless-stopped
    environment:
      - ConnectionStrings__WinLineXPODataConnection=${WINLINE_DATA_CONNECTION}
      - ConnectionStrings__WinLineXPOSystemConnection=${WINLINE_SYSTEM_CONNECTION}
      - AppSettings__LicenseNumber=${LICENSE_NUMBER}
      - AppSettings__CustomerNumber=${CUSTOMER_NUMBER}
      - AppSettings__ApiKeyHeaderValue=${API_KEY}
      - DOTNET_ENVIRONMENT=Production

  # Business API
  meso-business-api:
    image: ghcr.io/css-edv-support/mesoapi-webapi:latest
    restart: unless-stopped
    environment:
      - ConnectionStrings__WinLineXPODataConnection=${WINLINE_DATA_CONNECTION}
      - ConnectionStrings__WinLineXPOSystemConnection=${WINLINE_SYSTEM_CONNECTION}
      - AppSettings__LicenseNumber=${LICENSE_NUMBER}
      - AppSettings__CustomerNumber=${CUSTOMER_NUMBER}
      - AppSettings__ApiKeyHeaderValue=${API_KEY}
      - DOTNET_ENVIRONMENT=Production

  # SQL Server (if running locally)
  # sqlserver:
  #   image: mcr.microsoft.com/mssql/server:2022-latest
  #   environment:
  #     - ACCEPT_EULA=Y
  #     - SA_PASSWORD=YourStrong@Passw0rd
  #   ports:
  #     - "1433:1433"
  #   volumes:
  #     - sqlserver_data:/var/opt/mssql

# volumes:
#   sqlserver_data:

Environment File (.env)

# Database connections
WINLINE_DATA_CONNECTION=Server=sql-server;Database=WinLine_Data;User Id=api_user;Password=SecurePassword123;TrustServerCertificate=true
WINLINE_SYSTEM_CONNECTION=Server=sql-server;Database=WinLine_System;User Id=api_user;Password=SecurePassword123;TrustServerCertificate=true

# Licensing
LICENSE_NUMBER=12345678
CUSTOMER_NUMBER=987654321

# Security
API_KEY=production-api-key-2024

Kubernetes Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: meso-reduced-api
spec:
  replicas: 2
  selector:
    matchLabels:
      app: meso-reduced-api
  template:
    metadata:
      labels:
        app: meso-reduced-api
    spec:
      containers:
      - name: api
        image: ghcr.io/css-edv-support/mesoapireduced-odata:latest
        ports:
        - containerPort: 80
        env:
        - name: ConnectionStrings__WinLineXPODataConnection
          valueFrom:
            secretKeyRef:
              name: meso-secrets
              key: winline-data-connection
        - name: ConnectionStrings__WinLineXPOSystemConnection
          valueFrom:
            secretKeyRef:
              name: meso-secrets
              key: winline-system-connection
        - name: AppSettings__LicenseNumber
          valueFrom:
            secretKeyRef:
              name: meso-secrets
              key: license-number
        - name: AppSettings__CustomerNumber
          valueFrom:
            secretKeyRef:
              name: meso-secrets
              key: customer-number
        - name: AppSettings__ApiKeyHeaderValue
          valueFrom:
            secretKeyRef:
              name: meso-secrets
              key: api-key
        resources:
          requests:
            memory: "256Mi"
            cpu: "250m"
          limits:
            memory: "512Mi"
            cpu: "500m"
        livenessProbe:
          httpGet:
            path: /health
            port: 80
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /health
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
  name: meso-reduced-api-service
spec:
  selector:
    app: meso-reduced-api
  ports:
  - port: 80
    targetPort: 80
  type: LoadBalancer

🔍 Monitoring & Operations

Health Checks

All APIs provide health check endpoints:

# Basic health check
curl http://localhost:5500/health

# Detailed health information
curl http://localhost:5500/health/detailed

# Check database connectivity
curl http://localhost:5500/health/database

Logging

APIs use structured logging with Serilog. Configure log levels via environment:

# Environment variables for logging
-e Logging__LogLevel__Default=Information
-e Logging__LogLevel__Microsoft=Warning
-e Logging__LogLevel__Microsoft.AspNetCore=Warning
-e Serilog__MinimumLevel=Information

# Log to file (mount volume)
-v /host/logs:/app/logs
-e Serilog__WriteTo__0__Name=File
-e Serilog__WriteTo__0__Args__path=/app/logs/meso-api-.txt
-e Serilog__WriteTo__0__Args__rollingInterval=Day

Performance Tuning

# Production environment variables
-e DOTNET_ENVIRONMENT=Production
-e ASPNETCORE_URLS=http://+:80
-e DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false

# Memory optimization
-e DOTNET_gcServer=true
-e DOTNET_gcConcurrent=true

# Connection pooling
-e ConnectionStrings__WinLineXPODataConnection="...;Pooling=true;Max Pool Size=100;Min Pool Size=5"

📚 API Documentation & Discovery

Interactive Documentation

Each API provides comprehensive Swagger documentation:

Metadata Discovery

# OData metadata (entity models)
curl http://localhost:5500/odata/$metadata

# OpenAPI specification
curl http://localhost:5500/swagger/v1/swagger.json

# Available endpoints
curl http://localhost:5500/odata/

# Service document
curl http://localhost:5500/odata/\$metadata

Testing with API Collections

The repository includes comprehensive test collections in ApiTestCollections/ that can be imported into:

🔧 Fehlerbehebung

Häufige Probleme

Lizenzvalidierungsfehler

# Lizenzkonfiguration prüfen
curl -H "X-MesoAPI-Key: $API_KEY" http://localhost:5500/health/license

# Lizenz-Umgebungsvariablen überprüfen
docker exec container-name env | grep AppSettings__License

Datenbankverbindungsprobleme

# Datenbankverbindung testen
curl -H "X-MesoAPI-Key: $API_KEY" http://localhost:5500/health/database

# Verbindungsstrings prüfen
docker logs container-name | grep -i "connection\|database"

Authentifizierungsprobleme

# API-Key überprüfen
curl -v -H "X-MesoAPI-Key: falscher-key" http://localhost:5500/odata/Artikelview

# JWT-Konfiguration prüfen (falls verwendet)
curl -X POST http://localhost:5500/auth/login \
     -H "Content-Type: application/json" \
     -d '{"username": "test", "password": "test"}'

Performance Issues

# Check container resource usage
docker stats container-name

# Monitor API response times
curl -w "@curl-format.txt" -H "X-MesoAPI-Key: $API_KEY" http://localhost:5500/odata/Artikelview

# Enable detailed logging
docker run -e Logging__LogLevel__Default=Debug ...

🤝 Support & Ressourcen

Technischer Support

Ressourcen

Lizenzierung & Vertrieb


Powered by CSS EDV Support • Erstellt für WinLine ERP Integration