What are ASAM ODS EXD-API plugins?
Transferring legacy data into standard data formats often requires data conversion. This can lead to increased data volume due to data copies and to disruption of existing tool chains that use this data. To avoid these conflicts, ASAM ODS version 6.2 introduced the EXD-API plugins. EXD-API plugins enable access to inventory data through microservices that expose the contained meta and mass data.
As a member of the ASAM ODS working group, Peak Solution played a major role in defining the EXD-API plugins, and the Peak ASAM ODS Server has supported EXD-API plugins from the beginning.
Working principle of ASAM ODS EXD-API plugins
EXD-API plugins exchange data using the Google gRPC Protokoll.
The data provided by EXD-API plugins is divided into two different operations: metadata retrieval (GetStructure) and bulk/channel data retrieval (GetValue). The metadata is returned in the form of name-value pairs and is used to provide descriptive and semantic information about the data, thus offering advanced search options.
Looking at a typical calling sequence, we see that as soon as a new file (or item) is recognized (1), the EXD-API plugin is called by the importer (GetStructure) to provide the metadata of that specific file (2). The EXD-API plugin then reads the file (3), creates the return structure (4) and returns the requested data (5).
Some of the returned metadata – often in combination with the file and folder name – is then used to identify and create the data context and the required data hierarchy (6).
The other part is then used to create the data structure in the server for receiving the bulk/channel data in subsequent calls and for (optionally) providing the file for download (7).
Now all the required data and information is available on the ASAM ODS server so that the clients can start using the data.
To do this, they connect to the ASAM ODS server (8) and usually start exploring the hierarchical data structure (9) until they reach the point where they access the actual channel data (10).
To access the channel data, the ASAM ODS server delegates the client call to the EXD-API plug-in (11) by invoking GetValue – including information about the file and the requested channel(s). The EXD-API plugin uses this information to open the file, retrieve the data (12), and return it to the ASAM ODS server (13), which passes it back to the client (14). From the client's point of view, there is no difference between a call handled directly by the ASAM ODS server and one delegated to an EXD-API plugin.
Developing ASAM ODS EXD-API plugins
Developing an EXD-API plugin starts with retrieving the gRPC definition file (.proto file) from the ASAM GitHub repository. Use the gRPC tools to generate initial server code from the proto file. The gRPC tools support many different programming languages, and you are best off choosing a programming language that already provides a library for reading the file or data format for which you want to create your EXD-API plugin.
Python is a popular programming language for creating gRPC services because of its ease of use and rich ecosystem. Some examples of Python-based EXD-API plugins can be found at totonga or Peak Solution GitHub repository.
Please note that in order to display your data in an ASAM ODS server, your EXD-API plugin must be registered with the ASAM ODS server and the corresponding import service.
Connected solutions
You can click on the links to get more information about the individual components.
Peak Data Transfer Tool
Imports data into an ASAM ODS server. Implements the EXD-API plugins for connecting inventory data.
Peak ODS Server
Imports data into an ASAM ODS server. Implements the EXD-API plug-ins for connecting inventory data.
Related topics
What is ASAM ODS?
The ASAM ODS standard defines APIs and formats for storing and retrieving test and measurement data.
Python ASAM ODS Utilities
Open-source tools and examples for working with ASAM ODS data using Python.
Open Source Projects
Find out more about Peak Solution's commitment to open source projects.