Skip to main content

Schema Management

This page describes how to create, update, delete, and retrieve schemas in MAPS Messaging using:

  • The REST API (/api/v1/server/schema)
  • The MQTT pub/sub interface ($SCHEMA/<namespace>)

Both methods allow full lifecycle management of schema definitions.


1. Managing Schemas via REST API

The server exposes schema endpoints under:

/api/v1/server/schema

1.1 Add (POST)

Endpoint

POST /api/v1/server/schema

Body format

{
"context": "sensors/bme688",
"schema": { ...SchemaConfig JSON... }
}

Example using Java HttpClient

HttpClient client = HttpClient.newHttpClient();

String body = Files.readString(Path.of("bme688-schema.json"));

HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://server/api/v1/server/schema"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();

HttpResponse<String> response =
client.send(request, HttpResponse.BodyHandlers.ofString());

1.2 Get by Schema ID (GET)

Endpoint

GET /api/v1/server/schema/{schemaId}

1.3 Get by Context (GET)

GET /api/v1/server/schema/context/{context}

Returns all schemas bound to that topic or pattern.

1.4 Delete Schema (DELETE)

DELETE /api/v1/server/schema/{schemaId}

1.5 List All Schemas

GET /api/v1/server/schema

Optional filtering using selector expressions:

GET /api/v1/server/schema?filter=resource=='sensor'

2. Managing Schemas Using MQTT

The server provides a schema management topic:

$SCHEMA/<namespace>

2.1 Publish a Schema

Topic

$SCHEMA/sensors/bme688

Payload The SchemaConfig JSON.

Example:

mosquitto_pub -h server -t '$SCHEMA/sensors/bme688' -f bme688-schema.json

2.2 Subscribe for Schema Updates

mosquitto_sub -h server -t '$SCHEMA/#'

Subscribers receive existing schemas, updates, and deletion notices.


3. Schema Update Behaviour

  1. Validate schema
  2. Assign uniqueId if missing
  3. Store in repository
  4. Update context bindings
  5. Refresh processors/transforms
  6. Notify $SCHEMA/<namespace> subscribers

4. Schema Deletion via MQTT

Publish an empty payload:

$SCHEMA/sensors/bme688
(payload = "")

Subscribers receive:

{ "deleted": true, "uniqueId": "..." }

5. Best Practices

  • Set uniqueId
  • Use resource + interface labels
  • Keep schemas small
  • Version consistently
  • Prefer REST for bulk ops; MQTT for live updates