Go implementation of OGC API - Connected Systems, including:
- Part 1: Feature Resources
- Part 2: Dynamic Data
This API provides metadata and dynamic data endpoints for connected systems such as sensors, actuators, platforms, and procedures.
Current implementation includes canonical Connected Systems resources plus dynamic data resources (datastreams, observations, control streams, commands, system events, and system history).
Part 1 resources:
- Systems
- Deployments
- Procedures
- Sampling Features
- Properties
- Features (via OGC API - Features collection items)
- Collections
Part 2 resources:
- Datastreams
- Observations
- Control Streams
- Commands
- System Events
- System History
The conformance declaration is available at GET /conformance.
Implemented conformance URIs include:
- OGC API - Common: core, landing page, JSON, collections
- OGC API - Features: core, GeoJSON
- OGC API - Connected Systems Part 1: api-common, system, subsystem, deployment, procedure, sampling feature, property, advanced-filtering, GeoJSON
- OGC API - Connected Systems Part 2: api-common, datastream, observation, controlstream, command, system-event, system-history, JSON, create-replace-delete
Core:
GET /- Landing pageGET /conformance- Conformance declarationGET /api- Minimal OpenAPI metadata document
Collections and features:
POST /collectionsGET /collectionsGET /collections/{collectionId}GET /collections/{collectionId}/itemsPOST /collections/{collectionId}/itemsGET /collections/{collectionId}/items/{featureId}PUT /collections/{collectionId}/items/{featureId}DELETE /collections/{collectionId}/items/{featureId}
Systems and related resources:
GET /systemsPOST /systemsGET /systems/{id}PUT /systems/{id}DELETE /systems/{id}GET /systems/{id}/subsystemsPOST /systems/{id}/subsystemsGET /systems/{id}/deploymentsGET /systems/{id}/samplingFeaturesPOST /systems/{id}/samplingFeaturesGET /systems/{id}/datastreamsPOST /systems/{id}/datastreamsGET /systems/{id}/controlstreamsPOST /systems/{id}/controlstreamsGET /systems/{id}/eventsPOST /systems/{id}/eventsGET /systems/{id}/events/{eventId}PUT /systems/{id}/events/{eventId}DELETE /systems/{id}/events/{eventId}GET /systems/{id}/historyGET /systems/{id}/history/{revId}PUT /systems/{id}/history/{revId}DELETE /systems/{id}/history/{revId}
Deployments:
GET /deploymentsPOST /deploymentsGET /deployments/{id}PUT /deployments/{id}DELETE /deployments/{id}GET /deployments/{id}/subdeploymentsPOST /deployments/{id}/subdeployments
Procedures:
GET /proceduresPOST /proceduresGET /procedures/{id}PUT /procedures/{id}DELETE /procedures/{id}
Sampling Features:
GET /samplingFeaturesGET /samplingFeatures/{id}PUT /samplingFeatures/{id}DELETE /samplingFeatures/{id}
Properties:
GET /propertiesPOST /propertiesGET /properties/{id}PUT /properties/{id}DELETE /properties/{id}
Part 2 dynamic data endpoints:
GET /datastreamsGET /datastreams/{dataStreamId}PUT /datastreams/{dataStreamId}DELETE /datastreams/{dataStreamId}GET /datastreams/{dataStreamId}/schemaPUT /datastreams/{dataStreamId}/schemaGET /datastreams/{dataStreamId}/observationsPOST /datastreams/{dataStreamId}/observationsGET /observationsGET /observations/{obsId}PUT /observations/{obsId}DELETE /observations/{obsId}GET /controlstreamsGET /controlstreams/{controlStreamId}PUT /controlstreams/{controlStreamId}DELETE /controlstreams/{controlStreamId}GET /controlstreams/{controlStreamId}/schemaPUT /controlstreams/{controlStreamId}/schemaGET /controlstreams/{controlStreamId}/commandsPOST /controlstreams/{controlStreamId}/commandsGET /commandsGET /commands/{cmdId}PUT /commands/{cmdId}DELETE /commands/{cmdId}GET /systemEvents
- Part 1 resources primarily support
application/geo+json - Properties default to
application/sml+json - Part 2 resources use
application/json
Common query parameters across list endpoints:
id- Filter by resource ID or UIDq- Full-text searchlimit- Page sizeoffset- Page offset
Examples of resource-specific filters currently implemented:
parent,procedureon systemsparenton deploymentssystem,foi,observedProperty,phenomenonTime,resultTimeon datastreamsdatastream,featureOfInterest,phenomenonTime,resultTimeon observationscontrolstream,status,sender,issueTimeon commands
Prerequisites:
- Go 1.24+
- PostgreSQL with PostGIS
- Docker (recommended for local database/test workflows)
Run locally:
go mod download
cp config.example.yaml config.yaml
make runBuild and test:
make build
make test
make test-coverageconnected-systems-go/
├── cmd/server/ # Server entrypoint
├── internal/api/ # HTTP handlers and router
├── internal/model/ # Domain models, formatters, query params
├── internal/repository/ # GORM repositories and persistence logic
├── internal/config/ # Configuration loading
├── e2e/ # End-to-end and conformance-oriented tests
├── examples/ # Example payloads
├── docker-compose.yml # Local services
└── Makefile # Build/test/run commands
- OGC API - Connected Systems Part 1: https://docs.ogc.org/is/23-001/23-001.html
- OGC API - Connected Systems Part 2: https://docs.ogc.org/is/24-008/24-008.html
- OGC API - Features: https://ogcapi.ogc.org/features/
- W3C SOSA/SSN: https://www.w3.org/TR/vocab-ssn/