A privacy sensitive platform that aggregates data from popular APIs and enables us to connect with custom services. Ampersand is easily scalable and does not introduce a bias on the data collected.
What it does
Ampersand enables us to authenticate, collect, store and retrieve data from different sources. It allows for customisation based on specific needs. For example, it can use custom subscription webhooks to trigger the collection of data, or it can use custom code to store data in a Graph database.
When you want to get data from a standard API source, you need to write custom code for the following steps:
Authentication - prove your identity to the API you're calling
Authorisation - prove you have the right to access this API
Collect data - make a fetch, subscription, or other requests to get the data
Storage - store the data and make it available again for internal services
Retrieve - get your data from storage for further processing
Ampersand implements all of these functions in a distributed way and defines the interfaces between different microservice applications.
This image shows an overview of Ampersand's microservice software architecture. You can use Ampersand as a unified system, but since it is formulated in a microservice structure, you can also choose to implement only the parts you need. Ampersand can run as a server-less application which keeps the running costs at a minimum.
We currently use Ampersand to collect data from Fitbit in the Flex RCT. Previously Ampersand has been used to collect data from Garmin as well.
Why we developed it
Services and code of our previous aggregation and distribution system were tied to the infrastructure (VM). Ampersand advances beyond that by decoupling the application logic from the infrastructure management using (Kubernetes) containers. This enables us to scale up quickly and infinitely.
The responsibilities for the services are redefined and restricted to their simplest forms. This increases the number of services, but services have a considerable overlap in the code to facilitate similar functionalities. This overlap can be considered as a service template to write services consistently.