API - Config data¶
Config types¶
Config values have a mandatory field ‘type’ which determines what kind of data is stored. When creating a config value in a project (-version) or updating (overwriting) it in a template or app, the ‘value’ field gets validated based on the contents of the ‘type’ field. This table shows the data types and what to keep in mind using them.
| Config-Type | Valid input | Description |
|---|---|---|
| checkbox | mixed boolean values:
1, 0, “1”, “0”, true, false
|
Simple Checkbox which can be checked or
unchecked
|
| color | string Hex value:
#FFFFFF - #000000
|
Sets a color in Hex format
|
| css | string CSS contents
|
CSS content optionally with variables
(config values), gets validated
|
| date | string Date in format:
“Y-m-d H:i:s”
|
Y = Year, m = Month, d = Day, H = Hour,
i = Minute, s = Second
|
| HTML | string
|
HTML contents in a string
|
| image | string URI to an image
e.g.: www.example.com/logo.jpg
|
Points to the location of an image
|
| input | string any string
|
Can be any string the user inputs e.g.
a custom name
|
| select | string any value contained
in the ‘options’ field in the
meta data
|
Allows the user to select one item out
of a list. The list is defined in the
meta-field ‘options’ of the config value
(see explanation below).
|
| multiselect | string multiple values
contained in the ‘options’
field in the meta data
|
Similar to ‘select’ but the user can
select multiple items
|
Meta data behaviour¶
POST/PUT requests addressing non existing fields (e.g. changing a non existing field with a PUT request or a typo in a JSON key when POSTing a new entity) usually lead to an error with the status code 400 (bad request). This is not the case when PUTting a config or info entry, or more specific, when changing an entry containing the meta data field: unrecognized fields are saved into the meta data array.
Add meta data¶
To clarify this concept, we go through the process in simple example.
Lets assume a config entry of an app/template/project with the configId ‘test_config’ and the type ‘input’ which means it is a text field. The meta data field is initially empty. A GET request on that entry would yield something like:
{
"_embedded": {
"data": {
"test_config": {
"configId": "test_config",
"lang": "de_DE",
"name": "noname",
"revision": 0,
"value": "some_value",
"meta": null,
"type": "input",
"description": "This is a test config entry.",
"appId": 1,
"_links": {
.
.
.
}
}
}
}
}
}
Now we want to give this entry some additional information in the meta data field, so we submit a PUT request. In this example the config entry lives in an app with the appId ‘1’, so the request url is
- PUT /apps/1/configs/test_config¶
{
"author" : "John Doe",
"content" : "this is an example"
}
Because the app config entry doesn’t have fields called ‘author’ and ‘content’ they will be created in the meta data. A GET request on this config entry now yields
Warning
In consequence, you cannot use meta-keys equal to existing fields of a config entry like: ‘configId’, ‘lang’, ‘value’, ...
{
"_embedded": {
"data": {
"test_config": {
"configId": "test_config",
"lang": "de_DE",
"name": "noname",
"revision": 1,
"value": "some_value",
"meta": {
"author": "John Doe",
"content": "this is an example"
},
"type": "input",
"description": null,
"appId": 1,
"_links": {
.
.
.
}
}
}
}
}
Add meta objects¶
As you can see, the meta field became an object with the newly created information on the top level. To create sub-levels, an object can be submitted. This way it is possible to create objects with unlimited depth. An example of a sub-level object:
{
"options": {"option1": "something", "option2": "something2"}
}
After this request, a GET on the ‘test_config’ yields:
{
"_embedded": {
"data": {
"test_config": {
"configId": "test_config",
"lang": "de_DE",
"name": "noname",
"revision": 1,
"value": "some_value",
"meta": {
"author": "John Doe",
"content": "this is an example",
"options": {
"option1": "something",
"option2": "something2"
}
},
"type": "input",
"description": null,
"appId": 1,
"_links": {
.
.
.
}
}
}
}
}
}
While it is possible to create deep level structures, you can only address the top-level entries. Keeping the meta object shallow is therefore recommended in order to avoid confusion and simplify the reading process.
Delete meta keys¶
To delete entries, send a PUT request with an empty value.
{
"options": null
}
Now a GET request yields:
{
"_embedded": {
"data": {
"test_config": {
"configId": "test_config",
"lang": "de_DE",
"name": "noname",
"revision": 1,
"value": "some_value",
"meta": {
"author": "John Doe",
"content": "this is an example"
},
"type": "input",
"description": null,
"appId": 1,
"_links": {
.
.
.
}
}
}
}
}
}
Change meta data¶
In order to change existing meta data entries use the same approach as adding data.
Warning
Changing a meta key will overwrite the existing data in that key completely!