The Health Level 7 (HL7) Fast Healthcare Interoperability Resources (FHIR) standard specifies how healthcare data can be exchanged, with the goal of improving interoperability. We have been implementing FHIR compliant Application Programming Interfaces (APIs) for the 3M Healthcare Data Dictionary (HDD), a terminology server, to support patient care applications in dealing with clinical data. After the September 2017 HL7 FHIR Connectathon (as reported in Dr. Senthil Nachimuthu’s blog), we decided to stand up a FHIR terminology server “sandbox” in the January 2018 HL7 FHIR Connectathon, for other developers to test against.
To participate in the Connectathon, we needed to:
1. Create a server according to the FHIR specification
2. Implement the FHIR server with performance in mind
3. Pull data from the HDD that the FHIR services would leverage
Hitting these marks required a combined effort from the HDD content team and the software development team. The content team has more expertise and experience with FHIR, and helped the software team to gain a solid understanding of the FHIR specification. For example, Dr. Nachimuthu guided us in making use of a FHIR library written in Java, known as HAPI FHIR. With this library, we were able to streamline a lot of our work into a JAX-RS server (Java API for Restful Web Service). In addition, as most of the developers did not have expertise in terminologies, the teams learned to communicate with each other so the developers could better understand what we’re trying to service and answer the “how” questions. The content team also provided generic database logic so the software team could programmatically treat all terminologies the same. In return, the developers provided feedback regarding the terminology content structure, and the teams coordinated in updating the database content to support the FHIR APIs.
One of the speed bumps we hit was performance issues when pulling data from our copy of the HDD relational database housed on Amazon Web Services (AWS). We used an Object-Relational Mapping (ORM) technology called Hibernate. To our great surprise, a query that took sub-ten seconds to pull data from a local database could be increased to a couple of minutes against the database on AWS. The performance difference was so great and unexpected, that development had to stop, to investigate the issue by measuring and tracing packets. After experimenting with our queries, we found that we could optimize the performance by projecting out an ORM object’s field instead of returning the object from a query.
We completed our project successfully and had a stimulating experience at the January 2018 HL7 FHIR Connectathon. It was helpful to exchange knowledge and lessons learned with other FHIR implementers. We also had discussions with testing organizations to help clarify our interpretation of the documentation so we can have a more reliable testing suite. I was able to find resources, such as classes, that can help improve our FHIR implementation. I could also see how the working groups make decisions that will end up going into the FHIR specifications. I look forward to continuing the evolution of our FHIR terminology server and participating in the next FHIR Connectathon.