Hey Darius,

I've been staring at these choices and keep going back and forth among all 3, so I guess I don't have a strong preference. I would lean towards whatever best fits in with standard practice and convention. Option C seems like my preference at the moment, but I'm going to hit send before I change my mind again. One tangential question - can we use /ws/reporting/... rather than /ws/reportingrest/... ? Isn't "rest" implied here? I'm happy for "reporting" to give up it's namespace to "reportingrest" with an objective of one day bringing that functionality into the reporting module and doing away with the reportingrest module...

Mike


On 02/16/2012 08:32 PM, Burke Mamlin wrote:
What about Option C?

GET|POST /ws/reportingrest/cohortdefinition/{uuid}
GET /ws/reportingrest/cohortdefinitions[?q={query}]
GET|POST /ws/reportingrest/datasetdefinition/{uuid}
GET /ws/reportingrest/datasetdefinitions[?q={query}]
GET /ws/reportingrest/cohort/{uuid}
GET /ws/reportingrest/dataset/{uuid}[?param=value[&param2=value2]]

-Burke

On Thu, Feb 16, 2012 at 7:46 PM, Darius Jazayeri <[email protected] <mailto:[email protected]>> wrote:

    Hi All, especially Mike, Burke, and Saptarshi,

    While working on the Pentaho sprint, we've realized that it one
    key way to help people populate data warehouses from OpenMRS
    without writing lots of brittle SQL is to write a PDI plugin for
    Kettle that accesses OpenMRS data via web services. We've always
    intended to have the Reporting module expose the ability to
    evaluate cohorts and datasets via web service. This will be
    broadly useful, but this sprint gives us an excuse to do it.

    So, we want to let Reporting expose the list of available
    CohortDefinitions, and DataSetDefinitions, and allow you to
    evaluate those, RESTfully. Ben and I discussed this today and came
    up with two approaches, so we wanted to get opinions about which
    way to go. Ben plans to code one up tomorrow morning...

    *Option A (Exposes more of the way the Reporting module really
    works. I prefer this, though it may be more confusing.)*

    /Definition Resources/

    GET /ws/reportingrest/cohortdefinition -> list of all cohort
    definitions
    GET /ws/reportingrest/cohortdefinition/UUID -> one particular
    cohort definition

    GET /ws/reportingrest/datasetdefinition -> list of all DSDs
    GET /ws/reportingrest/datasetdefinition/UUID -> one particular DSD

    Also allow definitions to be created and edited via POSTs

    cohortdefinition resource:
        uuid
        name
        description (in default)
        list of parameters (in default)
        href to /ws/reportingrest/evaluatedcohort/UUID // tells you
    how to evaluate this

    datasetdefinition is similar

    /Definitions are evaluated via different resources/
    /
    /
    GET /ws/reportingrest/evaluatedcohort // ERROR
    GET /ws/reportingrest/evaluatedcohort/UUID // evaluate the
    cohortdefinition with that UUID

    GET /ws/reportingrest/evaluateddataset // ERROR
    GET /ws/reportingrest/evaluateddataset/UUID?date=2011-01-01 //
    evaluate a DSD that has a "date" parameter against all patients
    GET
    /ws/reportingrest/evaluateddataset/UUID?cohort=UUID&date=2011-01-01 //
    evaluate a DSD with a parameter against a specified cohort

    evaluateddataset resource:
        uuid // of the underlying DSD
        metadata // column definitions, etc
        rows // either a list of lists (in the order of the columns in
    metadata) or a list of column.name <http://column.name> -> cell
    value maps

    *Option B (Simpler, and doesn't expose the key
    definition/evaluated distinction from Reporting. Ben prefers this.)*
    *
    *
    /A single resource for each definition/evaluated pair/
    /
    /
    GET /ws/reportingrest/cohort -> list all cohort definitions (as v=ref)
    GET /ws/reportingrest/cohort/UUID -> specific definition (as
    v=default)
    GET /ws/reportingrest/cohort/UUID?v=evaluated -> expensive
    operation; evaluates the cohort and includes the result as a
    "members" property
    GET /ws/reportingrest/cohort?v=evaluated -> ERROR

    cohort resource
        uuid // of the cohortDefinition
        name
        description (in v=default)
        members (in v=evaluated)
        evaluationContext (in v=evaluated)

    GET /ws/reportingrest/dataset -> list all DSDs (as v=ref)
    GET /ws/reportingrest/dataset/UUID -> specific DSD (as v=default)
    GET /ws/reportingrest/dataset/UUID?v=evaluated -> evaluates the DSD
    GET /ws/reportingrest/dataset/UUID?v=evaluated&date=2011-01-01 ->
    evalutes DSD with a date parameter
    GET /ws/reportingrest/dataset/UUID?v=evaluated&cohort=UUID ->
    evaluates DSD against a specified cohort

    This doesn't lend itself to letting you create cohort definitions
    or DSDs by POSTing to WS, at least not via these resources.

    -Darius
    ------------------------------------------------------------------------
    Click here to unsubscribe
    <mailto:[email protected]?body=SIGNOFF%20openmrs-devel-l> from
OpenMRS Developers' mailing list

------------------------------------------------------------------------
Click here to unsubscribe <mailto:[email protected]?body=SIGNOFF%20openmrs-devel-l> from OpenMRS Developers' mailing list

_________________________________________

To unsubscribe from OpenMRS Developers' mailing list, send an e-mail to 
[email protected] with "SIGNOFF openmrs-devel-l" in the  body (not 
the subject) of your e-mail.

[mailto:[email protected]?body=SIGNOFF%20openmrs-devel-l]

Reply via email to