SWMM API Documentation
This directory contains comprehensive documentation for all controllers in the SWMM API ASP.NET application.
Overview
The SWMM API provides a comprehensive REST API for managing Storm Water Management Model (SWMM) simulations, scenarios, and data. The API is built on ASP.NET Core and integrates with Azure Storage services for data persistence and retrieval.
Architecture
The API follows a layered architecture with controllers handling HTTP requests, services managing business logic, and Azure Storage providing data persistence.
Data Storage Architecture
Azure Blob Storage
networkmodel: Network definitions (nodes, links)swmm-output: Simulation results by timestepradar-images: Weather radar imageryswmm-input: Input files and model data
Azure Table Storage
Runs: Simulation run metadata and statusInputs: Scenario and input dataSystemOutput: System-wide time series dataNodeOutput: Node time series dataLinkOutput: Link time series dataSubCatchOutput: Subcatchment time series dataSensorsXRef: Sensor cross-referencesSensorData: Sensor time series dataAttributeXRef: Attribute definitionsErrors: Error logging
Controllers Overview
Authentication & Authorization
- AuthController: JWT-based authentication
- EsriAuthController: Esri ArcGIS OAuth integration
Core Data Management
- LinkController: Network link management and data
- NodeController: Network node management and data
- SubcatchmentController: Subcatchment data and results
- SystemController: System-wide summaries and data
Scenario & Run Management
- ScenarioController: Basic scenario operations
- ScenarioManagementController: Advanced scenario and input management
- RunManagementController: Comprehensive run lifecycle management
Sensor & Monitoring
- SensorController: Real-time and historical sensor data
- DopplerController: Weather radar imagery
Utilities
- GeoCoderController: Address-to-coordinates conversion
Data Flow Patterns
Simulation Workflow
Data Retrieval Pattern
Common Data Models
Time Series Data
Most controllers return time series data in one of these formats:
Unix Timestamp Format:
[
{
"simUnixTime": 1700000000000,
"value": 25.5
}
]
Array Format:
[[1700000000000, 25.5], [1700000015000, 26.1]]
CSV Format:
"1.2,1.5,1.8,2.1,1.9,1.6,1.3,1.1,0.9,0.7"
Network Elements
- Nodes: Junctions, outfalls, storage units, dividers
- Links: Conduits, channels, orifices, weirs, pumps
- Subcatchments: Drainage areas with runoff characteristics
Authentication & Security
JWT Authentication
- Tokens expire after 5 minutes
- HMAC-SHA512 signature algorithm
- Stateless authentication
External API Integration
- Esri ArcGIS: OAuth client credentials flow
- Azure Maps: Subscription key authentication
Error Handling
Standard Error Responses
- 400 Bad Request: Validation errors
- 401 Unauthorized: Authentication required
- 404 Not Found: Resource not found
- 500 Internal Server Error: Server errors
Error Logging
All errors are logged to Azure Table Storage with:
- Error message
- Stack trace
- Application context
- Timestamp
Performance Considerations
Storage Optimization
- Efficient blob and table queries
- Memory stream usage for large files
- Async operations throughout
Caching Strategy
- No built-in caching (consider for frequently accessed data)
- Client-side caching recommended for static data
Data Processing
- Optimized time series calculations
- Efficient JSON/CSV parsing
- Minimal memory footprint
Configuration
Required Settings
{
"Values": {
"CloudStorageConnectionString": "DefaultEndpointsProtocol=https;AccountName=...;AccountKey=...;EndpointSuffix=core.windows.net"
},
"Auth": {
"ApiUser": {
"Username": "api_user",
"Password": "api_password"
}
},
"Jwt": {
"Issuer": "swmm_api",
"Audience": "swmm_clients",
"Key": "your_jwt_signing_key"
},
"Esri": {
"ClientId": "your_esri_client_id",
"ClientSecret": "your_esri_client_secret"
}
}
Usage Examples
Basic Authentication
# Login
POST /api/auth/login
{
"userName": "api_user",
"password": "api_password"
}
# Use token in subsequent requests
Authorization: Bearer <jwt_token>
Get Network Data
# Get all nodes
GET /api/node/nodes
# Get node time series
GET /api/node/values?index=0&runDateTime=2023-11-16T00:00:00-05:00&measurementIndex=0&scenario=scenario0
# Get all links
GET /api/link/links
# Get link time series
GET /api/link/values?index=0&runDateTime=2023-11-16T00:00:00-05:00&measurementIndex=0&scenario=scenario0
Scenario Management
# Create scenario
POST /api/scenariomanagement
{
"name": "Urban Stormwater",
"description": "Urban area simulation",
"inputFile": "urban.inp"
}
# Create run
POST /api/runmanagement
{
"scenarioId": "scenario1",
"startTime": "2023-11-16T00:00:00-05:00",
"endTime": "2023-11-16T23:59:59-05:00",
"reportingTimeStep": 15
}
Sensor Data
# Get sensor value
GET /api/sensor/nodevalues?sensorId=SENSOR001&measurement=depth&reportingDateTime=2023-11-16T12:00:00-05:00&reportingTimeStep=15
# Get sensor time series
GET /api/sensor/linktimeseries?sensorId=SENSOR002&measurement=flow&startTime=2023-11-16T00:00:00-05:00&endTime=2023-11-16T23:59:59-05:00&reportingTimeStep=15
Dependencies
Core Dependencies
Azure.Storage.BlobsAzure.Data.TablesMicrosoft.AspNetCore.MvcSystem.Text.Json
Internal Dependencies
GqcStorage1: Storage utilitiesSwmmModels: Data modelsSwmmUtilities: Time series processing
Monitoring & Logging
Application Logging
- Request/response logging
- Performance metrics
- Error tracking
- Audit trails
Storage Monitoring
- Blob access patterns
- Table query performance
- Storage capacity usage
- Error rates
Future Enhancements
- Caching Layer: Implement Redis or in-memory caching
- Real-time Updates: WebSocket support for live data
- Advanced Filtering: Complex query capabilities
- Bulk Operations: Batch processing for large datasets
- API Versioning: Versioned API endpoints
- Rate Limiting: Request throttling
- Metrics Dashboard: Real-time API performance monitoring
Support & Maintenance
Error Recovery
- Graceful handling of storage failures
- Automatic retry mechanisms
- Data validation and integrity checks
Performance Optimization
- Query optimization
- Connection pooling
- Memory management
- Async operation patterns
Security Updates
- Regular dependency updates
- Security patch management
- Access control reviews
- Audit log monitoring