RS-FEM architecture
Overview
Feature management microservice is a data repository in GeoJSON format.
Feature Management responsibilities:
- Extract data references thanks to [IFeatureFactoryPlugins],
- Create, patch or delete data references,
- Re-notify stakeholders of existing data references,
- Delegate the storage of files (if any) to
Storage Management.
To edit this repository, a data producer has to send requests.
At the moment, 2 API are available :
- Messaging API (AMQP) allows to publish creation, reference, patch, deletion and notification requests on specific exchanges.
- HTTP REST API allows to submit creation requests (as
POSTHTTP requests), update requests (asPATCHHTTP requests) or deletion requests (asDELETEHTTP requests).

Under the hood, those responsibilities are divided between two modules: featureprovider and feature. featureprovider is only responsible for handling data references extraction requests, that is extraction of information needed from physical files to create a data reference that is then handled by the feature module.
API are documented in detail below.
Request payload
Regardless of the API used, payload of each API is expected in GeoJSON format.
The basic structure is as follows :
- A required
id, - A required
typewith valueFeature, - An optional geometry in GeoJSON format,
- An optional set of
properties.
{
"id": "FeatureId",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
125.6,
10.1
]
},
"properties": {
"name": "Dinagat Islands"
}
}
For the purposes of this microservice, GeoJSON structure is extended with following properties :
- An
urn(uniform resource name as unique identifier) generated by the microservice when creating a new reference and expected only when updating a reference. - A required
modelrepresenting the name of the model defining the expectedpropertiesfield structure (and previously configured). - A required
entityTypedefining the reference business type. - An optional
filesproperty with a fixed structure that allows to store or reference physical data (service delegated to another microservice calledStorage Management).
{
"id": "FeatureId",
"urn": "UniqueFeatureId",
"model": "RelatedModelName",
"entityType": "DATA",
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
125.6,
10.1
]
},
"properties": {
"name": "Dinagat Islands"
},
"files": [
{
"locations": [
{
"storage": "DISK",
"url": "file://home/user/regards/file.zip"
}
],
"attributes": {
"dataType": "RAWDATA",
"mimeType": "application/zip",
"filename": "file.zip",
"filesize": "8013",
"algorithm": "MD5",
"checksum": "4e188bd8a6288164c25c3728ce394927"
}
}
]
}
Payload detailed properties
Feature
| Path | Type | Description | Optional |
|---|---|---|---|
| id | String | Id from provider | |
| urn | String | Unique feature identifer based on provider identifier with TEST:REQUEST:2342 |
Urn is only expected in update and deletion requests!
Files
| Path | Type | Description | Optional |
|---|---|---|---|
| locations[].storage | String | Storage | true |
| locations[].url | String | Url location | |
| attributes.dataType | String | RAWDATA, QUICKLOOK_SD, QUICKLOOK_MD, QUICKLOOK_HD, DOCUMENT, THUMBNAIL, DESCRIPTION | |
| attributes.mimeType | String | MIME type | |
| attributes.filename | String | Filename | |
| attributes.filesize | Number | File size | true |
| attributes.algorithm | String | Checksum algorithm | true |
| attributes.checksum | String | Checksum | true |
Algorithm & cheksum are required if data have to be stored by Storage Management.
Request metadata
As the payload, regardless of the API used, metadata is often associated with a request.
Metadata detailed properties
| Path | Type | Description | Optional |
|---|---|---|---|
| metadata.override | Boolean | Indicate wether the previous version should be deleted | true |
| metadata.session | String | Arbitrary session name to classify data for human operators | |
| metadata.sessionOwner | String | Arbitrary session owner to classify data for human operators | |
| metadata.storages | Array | Target storages if there are files to store (may be empty!) | true |
| metadata.storages[].pluginBusinessId | String | Storage plugin identifier (previously configured in Storage Management | |
| metadata.storages[].targetTypes | Array | List of data object types accepted by this storage location | true |
| metadata.storages[].storePath | String | Directory in which to store the file | true |
| metadata.priority | String | HIGH, NORMAL, LOW |
override should only be specified with Extraction or Creation requests.