Interoperability Standards

A common problem faced by biomedical and health informatics researchers is that data needed to answer a particular research question are not always available in a single database. It is therefore often necessary to integrate data from multiple data sources. To further complicate matters, these data may be stored using various different database schemas and may be encoded using one of a large number of vocabularies. Interoperability standards address these problems by defining a shared format that can be used to transmit data from one health information system to another. These formats often allow for the use of multiple vocabularies and leave it up to the producer and consumer of the data to convert between them.

Application Programming Interfaces

Computer applications communicate with each other using application programming interfaces, more commonly referred to as APIs. Two important things to know about APIs are that they are uniquely identified by a Uniform Resource Identifier (e.g. a URL on the Internet), and they communicate using messages that conform to a specific format (the interoperability standard).

Although APIs are intended to be accessed by computers, you can often enter the URL into your browser to see the reponse that would be returned to the application. Try clicking this link to the Internet Chuck Norris Database API: http://api.icndb.com/jokes/random. You should see a random Chuck Norris joke in a machine readable format like:

{
	type: "success",
	value: {
		id: 328,
		joke: "Most people fear the Reaper. Chuck Norris considers him 'a promising Rookie'.",
		categories: [ ]
	}
}

Most times we want to query an API with specific parameters. For example, to fetch all Chuck Norris jokes in a specific category. The parameters can often be included directly in the URL. The following link replaces Chuck Norris with Your Name:

http://api.icndb.com/jokes/random?firstName=Your&lastName=Name

To add parameters, we first add a ? to the end of the URL, and then we add parameters using the convention ParameterName=Value. We separate multiple parameters using an &.


Question 1: Generate a random Chuck Norris joke using your actual name by changing the parameter values in the above URL. Provide the URL as well as the joke.

HL7 FHIR

FHIR (Fast Healthcare Interoperability Resources) is an interoperabilty standard developed by HL7 for the purposes of exchanging healthcare data.

FHIR is a RESTful API. The important thing to take from this is that each construct in the data model (e.g. Patient or Medication) has its own unique URL with the same name. These constructs are referred to as Resources.

Applications interact with a FHIR API by querying or posting to these resources.

FHIR Site Review

The FHIR site contains a huge amount of detailed documentation about a wide range of topics. Browse the website in order to answer the following questions.

Question 2: From the homepage, go to Documentation and then Community & Credits. List three organizations represented in the community along with a sentence (or more) describing the organization.

Question 3: Select Resources from the top (red) menu. Select any one resource and provide the link and a short description of the real-life entity it is designed to model. Also, list and describe one or two notable attributes listed in the Resource Content section.

For the following questions, we are going to interact with a FHIR API like we did with the Internet Chuck Norris Database API. The base URL we're going to use is https://r3.smarthealthit.org/. So, for example, to get a list of all the patients, we query the Patient resource at the following link: https://r3.smarthealthit.org/Patient.

Question 4: What is the name of the first patient in the returned Bundle?

Question 5: Use the same URL, but this time include the name parameter, and give it the value John. Refer to the Chuck Norris example above if necessary. How many patients are returned for this filtered search? Hint: See the total field.

Some APIs, including FHIR, allow you to access specific resources by including the resource identifier in the URL directly, without needing a ?. For example, to access the patient with ID 63c6cba8-c04b-432b-aa69-354eae9becb3, we can go to: https://r3.smarthealthit.org/Patient/63c6cba8-c04b-432b-aa69-354eae9becb3.

Question 6: What is the name of the patient with ID 63c6cba8-c04b-432b-aa69-354eae9becb3?

For the final question, we are going to try to find all the observations for a particular patient. If you've never programmed before and find yourself struggling, submit what you have done so far and participate in the discussion to get help.

Note that case is usually important in computer programming, so a parameter called patient is not the same as a parameter called Patient.

Question 7: Query the Observation resource, and include the patient parameter using the patient ID from the previous question as the value. You will need the ? here. How many observations are returned for this patient? List one of them with its value, units and the vocabulary (coding system) used to encode it.

Resources

Our colleagues have found the following resources useful or interesting.

About Me

I'm Pascal, I'm from Cape Town, South Africa and I'm a computer scientist and health information systems developer and open source software enthusiast. The biggest open source project I'm involved with is OpenMRS.