Capabilities#
In order to offer a unified form of communication, the MarketPlace has defined a list of typical functionalities, which we call capabilities, that a user might expect and an application can choose to support. Each capability will have a name and a definition of the expected parameters and errors it can generate.
A capability is associated with an operation ID (capability and operation ID should match) and a specification of a unique REST-API endpoint + HTTP method.
For instance, there can only be one capability under the /dataset
path for the get
method.
Capabilities are case sensitive.
Capability types#
Different types of capabilities are clustered into groups based on their purpose. Thus, we can define applications as:
Data source: Applications for online data repositories which store generic data that can be used in different use cases. Examples of such data repositories are databases within Materials Cloud and NOMAD.
Data sink: Applications that offer persistent data storage services.
Transformation: Applications that manipulate data. A simulation tool that generates data is an example of such an application.
Front page: Applications that have a web page.
System: Capabilities related to operability of applications.
The MarketPlace will be able to automatically infer the type of the application to the users, while recognizing the functionalities that are supported by it. This allows the MarketPlace to use the applications in workflows that require apps with specific capabilities. However, the capabilities are not enforced, and an application may choose to implement a mixed subset of capabilities.
Since the API is uniform, it is easy for the user to switch one application with another in case it is favourable.
Integration levels#
The information returned by the applications (payload) is not restricted, and can be varied in format and readability. To differentiate the degree of interoperability an application enables, the following levels have been defined.
Level 1 integration#
It is the default integration level, which is simply achieved by adhering to the capabilities defined by the platform. Any application registered to the platform must (at least) comply to Level 1 integration.
Level 2 integration#
This level tries to enforce a higher degree of interoperability between applications by making sure the data sent is understandable, both by humans and machines.
Mappings between the data and ontology concepts should exist, and the corresponding mapping be sent out with the data in the headers, e.g.:
{
'x-semantic-mappings': 'MappingA'
}
The id can then be used to query the semantic mapping capability for the specific mapping.
List of supported capabilities#
These are the currently supported capabilities:
Type |
Method |
Capability |
Description |
---|---|---|---|
FrontPage |
get |
frontend |
Open the frontend of the app |
System |
get |
globalSearch |
Respond to global search queries |
System |
get |
heartbeat |
Check if the application is running and available |
DataSource, DataSink |
get |
listCollections |
List all collections |
DataSource |
get |
listDatasets |
List all datasets in a collection |
DataSink |
put |
createOrUpdateCollection |
Create or update a collection |
DataSink |
delete |
deleteCollection |
Delete an empty collection |
DataSource |
head |
getCollectionMetadata |
Get a collection’s metadata |
DataSink |
put |
createCollection |
Create a collection |
DataSink |
put |
createDataset |
Create a dataset |
DataSink |
post |
createDatasetMetadata |
Create a dataset’s metadata |
DataSource |
get |
getDataset |
Get a dataset |
DataSink |
put |
createOrReplaceDataset |
Create or replace a dataset |
DataSink |
post |
createOrReplaceDatasetMetadata |
Create or replace a dataset’s metadata |
DataSink |
delete |
deleteDataset |
Delete a dataset |
DataSource |
head |
getDatasetMetadata |
Get a dataset’s metadata |
DataSource, DataSink |
get |
listSemanticMappings |
List all semantic mappings |
DataSource, DataSink |
get |
getSemanticMapping |
Get a specific semantic mapping |
Transformation |
get |
getTransformationList |
List all transformations |
Transformation |
post |
newTransformation |
Create a new transformation |
Transformation |
get |
getTransformation |
Get a transformation |
Transformation |
delete |
deleteTransformation |
Delete a transformation |
Transformation |
patch |
updateTransformation |
Update a transformation |
Transformation |
get |
getTransformationState |
Get the state of a transformation |