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