Method | URL | Parameters | Description | Notes |
---|---|---|---|---|
POST | /ehr |
| Create a new EHR | |
GET | /ehr/{ehrId}/ehr_status | Retrieve EHR_STATUS | ||
PUT | /ehr/{ehrId}/ehr_status | Update EHR_STATUS | ||
GET | /ehr/{ehrId}/ehr_access | Retrieve EHR_ACCESS | ||
PUT | /ehr/{ehrId}/ehr_access | Update EHR_ACCESS |
Method | URL | Parameters | Description | Notes |
---|---|---|---|---|
GET | /ehr/{ehrId}/folder | List folders | R1 | |
GET | /ehr/{ehrId}/folder/{folderId} | List folder content (list of links/IDs of contained objects) | R1 | |
POST | /ehr/{ehrId}/folder | Create a folder for this EHR | ||
PUT | /ehr/{ehrId}/folder | Update a folder for this EHR |
Method | URL | Parameters | Description | Notes |
---|---|---|---|---|
POST | /composition /ehr/{ehrId}/composition | ehrId, committer | Create a new composition | |
GET | /composition/{compositionId} /ehr/{ehrId}/composition/{compositionId} | Retrieve a composition | R1 | |
PUT | /composition/{compositionId} /ehr/{ehrId}/composition/{compositionId} | committer | Update a composition | |
DELETE | /composition/{compositionId} /ehr/{ehrId}/composition/{compositionId} | committer | Delete a composition |
Composition format is the canonical openEHR JSON or XML format. Sample JSON and XML are attached. JSON is using the attribute names based on the RM (snake-case, i.e.: composition.archetype_details.archetype_id) and it also adds the type information - this is the extra attribute "@class" which allows such JSON to be deserialised into proper objects of the target language.
Authentication, sessions should be up to the implementation.
Method | URL | Parameters | Description | Notes |
---|---|---|---|---|
GET POST | /query
| aql | Execute an AQL | QL1 GET has a max limit on the query length that will be too short for some queries. (Also if using GET make sure that the server sends proper caching headers.) Should we allow both POST and GET? Added post for querying to allow loooong queries |
POST | /q/{query-language} | Stores query, generates query-id and redirects to resulting resource (se rows below) | QL2 (see http://www.biomedcentral.com/1472-6947/13/57) By default the query-id could be a SHA hash of the query itself (that way repeated identical queries do not need to be re-parsed/stored) If we want to support different query languages (or query language versions) we might want urls on the form q/{QUERY_LANGUAGE}/ (examples: /q/AQL, /q/AQL2/, /q/AQLinXQuery/) | |
GET | q/{query-language}/{query-id} | the dynamic parameters defined when query was stored | Executes named query (using dynamic parameters) | QL2 |
GET | /ehr/{ehrId}/q/{query-language}/{query-id} | the dynamic parameters defined when query was stored | Executes stored query (using named parameters) | QL2 |
Method | URL | Parameters | Description | Model | Notes | |
---|---|---|---|---|---|---|
POST | /contribution | Atomically commits a set of changes (composition creates, updates or deletes). |
| This call might also be under /composition resource. | ||
It can be hard for some implementers to support all kinds of calls, we could provide a well specified conformance ladder with basic levels that are easy to add but still are very useful for integrations. Defining R1+W1+Q1 should probably be first priority timewise.
Level | |
---|---|
R1 | Basic read-only. COMPOSITION+FOLDER listing and retrieval. |
R2 | Level 2 read-only. R1 as above plus: Support for listing and retrieval of CONTRIBUTIONS, EHR_STATUS and EHR_ACCESS... |
W1 | Basic write. Writing/updating COMPOSITIONS one by one. Creating new EHRs... |
W2 | Level 2 write. W1 as above plus Writing several changes at once using a CONTRIBUTION... |
QL1 | Basic Query... |
QL2 | Level 2 Query. Named/identified queries with dynamic parameters (allows stored procedures and other optimizations). |
CDS1...? | Clinical Decision Support? |
A system could for example support R1+QL1 another might support R2+W2
EHRScape API https://www.ehrscape.com/reference.html and https://www.ehrscape.com/api-explorer.html
Applying representational state transfer (REST) architecture to archetype-based electronic health record systems (Erik Sundvall et. al.): http://www.biomedcentral.com/1472-6947/13/57
Corresponding test implementation (LiU-EEE) available at https://github.com/LiU-IMT/EEE/,
html for the index page of the demo server https://github.com/LiU-IMT/EEE/blob/master/src/main/resources/www-file-root/index.html
Possibly interesting java Restlet routers: https://github.com/LiU-IMT/EEE/tree/master/src/main/java/se/liu/imt/mi/eee/ehr
Comments: