Flexible Data Server Platform

At the core of the project sits a RESTful data server, with a well-defined set of programming language-agnostic interfaces. These endpoints take the form of web URLs using the HTTP protocol underpinning the web. Simple queries are encoded in the address, with responses often returned as JSON. The approach is standardized and widely used, with software that can automatically generate documentation of the interfaces. The data server provides persistence of data, metadata, and workflow execution to clients such as the Jupyter notebooks \cite{soton403913,jupyter}, desktop tools, command line clients, and other consumers of the platform.
The Girder project  \cite{documentation} was used as the central component because it already offered a large amount of the more general functionality such as user authentication, file/directory storage, upload, download, and access control. It also offers a structured way to augment its functionality using plugins developed in Python. An early version of the data server was described in a previous publication along with the Python plugins developed \cite{Hanwell2017}. This has since evolved into a more ambitious project, but the data server concept described there is still at the core of the design. Existing capabilities in the framework such as authentication, access control, computational job control, and integration with HPC queuing systems offered clear advantages in this project.
The data server provides the central point of integration, it is data-centric and avoids direct generation of any HTML/visualization on the server. The RESTful APIs are consumed by different clients, principally the single-page web application, JupyterLab \cite{documentationa} web widgets, and Python-based Jupyter kernels. The RESTful APIs are completely programming language agnostic, and can be consumed by others in the community either directly or by adapting reference examples developed as part of the project. We have developed a Python command-line client, Jupyter Python kernel extension, web widgets, and an Avogadro plugin to search and display data from the server. 
The server platform forms the central component of the open software platform, providing persistence, authentication, metadata generation, coordination with microservices, and generation of new data. It has been developed to use a plugin to extend the server component with specific functionality, and critical services have been moved into specialized microservices such as an Open Babel microservice for file translation, 3D coordinate generation, chemical utility functions and an Avogadro microservice offering some file services and molecular orbital cube generation. They provide reference interfaces that can be improved or replaced as the need arises in future projects. Additionally the use of microservices enables the decoupling of services so that more compute intensive tasks can be scaled separately, for example 3D coordinate generation or cube generation.