Web Services for OMRS10

This is a compilation of notes written during a session at the ?2010 Implementers Group Meeting in South Africa.

What's there now?

There are currently two modules: JAXP and REST modules.

What's coming

For OpenMRS, we intend to build out more functionality. The goal is to reflect the core API in a distributed module and then allow other modules to extend the web service functions for implementation- or application-specific uses. As we find popular web service methods, these could be pushed down to the core API.

Will help support mobile, Ruby, and PHP apps.

Most importantly, by 1.9 we want to have a clear & solid strategy for web service support.

Web Services to get at aggregate data

Why bother with SOAP?

In some environments, SOAP libraries could make it easier to work with SOAP over REST. REST calls are also less familiar to some folks.

Ideas on an approach

Heavyweight vs. lightweight objects? This is similar to Amazon.com's approach. We could consider small & big versions objects OR consider having a standard object with the option to list additive properties (e.g., custom object).

Based on Canada's experience with WS, Returning a "summary" of objects in a list may lead to a chatty interaction.

Look at Google Charts.

Consider that we may want to support both publish & subscribe – i.e., OpenMRS may

Features to include

  1. CRUD methods (patient, encounter, obs)

  2. Cohorts & indicators

  3. Run rule(s)

  4. Get reports for a time period

What do people want?

Documentation.

Known use cases: mobile devices, other applications

Support for reporting methods.

The mobile group plans to present their web service needs to OpenMRS.

Interoperability for DHIS.

Make it easy for modules to reflex methods as web services. Would be really nice if modules could make annotations without requiring the web service module.

How are people currently using Web Services

AMPATH is using the REST module to look up patients. For the lab system, REST calls are sent to an interface module that proxies the calls to the REST module.

Mobile solutions are using calls from the X/Forms modules, primarily to add new data to OpenMRS

Jembi has extended the JAXP module to push patient records into OpenMRS and retrieve them. This includes code to proxy calls, queue requests, and allow transfer via USB. You can also

How are people doing authentication?

OAuth is used commonly.

REST module uses basic authentication and IP filtering.