/
Reporting REST API (Design Page)

Reporting REST API (Design Page)

Background

The reportingrest module was created "long ago" when @Darius Jazayeri and @Ben Wolfe were working with Pentaho and before the OpenMRS REST API was realized. Per @Darius Jazayeri: "it works, but probably not with the 'right' RESTful API." Reporting's REST API does not have its own JIRA project. Any REST-related work for reporting has been done in the REPORT project.

Goals

  • An intentionally-designed, externally-usable format for report definitions (e.g., a well-described JSON format)

    • Historically, the reporting framework has used XStream heavily to serialize objects. We'd like to move away from using serialized auto-generated XML of Java classes for definitions, perhaps toward a more formal, standard, and nicer format for defining reports.

  • TBD

Design Ideas

 

/report /report?download=true vs. /report/{uuid}/raw or /report/{uuid}/download (get URL from /report/{uuid} resource) /report/{uuid}/request (or "run") list of prior/current requests /report/{uuid}/request/{uuid} status ± link to download /query (e.g., cohort) question: would we want /query?type=cohort, or to have /cohort (cohortdefinition, encounterquery, ...) Darius: I would expect resources for cohortquery, encounterquery, obsquery, etc (not one single "query" resource, and also not one resource for every query implementation, like "gendercohortdefinition") Mike: you need to be able to *both* create a new definition (e.g. persist it to the DB) and *also* execute a query based on a definition GET /patientquery => lists saved cohort queries POST /patientquery => creates a new cohort query (persists it to the DB) GET /patientquery/{uuid}/request => list available runs of this query that I could download (or, are still in progress) POST /patientquery/{uuid}/request => asynchronously execute a new run of this query GET /patientquery/{uuid}/request => list available requests/runs of this query GET /patientquery/{uuid}/request/{uuid} => get result of a specific request/run of this query POST /patientquery/{uuid}/execute => synchronously execute a new run of this query POST /patientquery/request => execute a new run of a (dynamically-defined) cohort query by its definition (asynchronous, instantly returns a link to the request) POST /patientquery/execute => execute a new run of a (dynamically-defined) cohort query by its definition (synchronous, returns actual result, after a while) Burke: "execute" is bad because it's an action verb, not a resource name /data (e.g., calculation) /dataset

 

See Also

 

Related content

Implementation Plan
Implementation Plan
More like this
Building customized reports inside modules (For Developers)
Building customized reports inside modules (For Developers)
More like this
XML Reports
XML Reports
More like this
Challenges with Existing OpenAPI Documentations
Challenges with Existing OpenAPI Documentations
More like this
XML Reports
XML Reports
More like this
How to run a Reporting Module report through a URL
How to run a Reporting Module report through a URL
More like this