Message\Value | NEW | XXXX | NNNN |
---|---|---|---|
Patient block (see 6 - Administration) | Y | DRB3/4/5 | DRB3/4/5 |
Donor block (see 6 - Administration) | Y | DRB3/4/5 | DRB3/4/5 |
Typing response | Y | DRB3/4/5 | DRB3/4/5 |
Sample response | Y | DRB3/4/5 | DRB3/4/5 |
As previously indicated in Section 2.1, the OpenAPI specification forms an integral component of our updated documentation set. Henceforth, we will refer to this API documentation as "Swagger." You can access it via the following publicly available URL: https://apispecs.wmda.info/
At this address, both Search & Match API specifications and Connect API specifications can be found:
Since the communication is now split to communication with WMDA's Search & Match and messaging with other registries, each API request in this semantics document may be represented in two styles:
Wherever suitable, we included EMDIS names of the messages in parentheses, e.g. 5.1 - Typing Request (TYP_REQ).
In contrast to the flat FML messages used in the EMDIS communication, the REST API based Match-Connect communication uses nested (multi-level) data structures. Furthermore, the field designations have been improved, e.g. the EMDIS field REQ_DATE is named as requestDate in the API model classes.
EMDIS rules from the EMDIS Semantics are modified accordingly to the REST API based approach and are added to each message, where applicable.
The table below shows recommended sets of API endpoints to be implemented depending on your use of services:
Service in use API endpoint \ | Recommended for Patient & Search | Recommended for Patient & Search, download Registry | Mandatory for Connect | Mandatory for Connect, Download Registry | Comment |
---|---|---|---|---|---|
SEARCH & MATCH | |||||
PATIENTS | |||||
/patients [POST] | yes | no | yes (PR) | no | |
/patients [PUT] | no | no | yes (PR) | no | |
/patients [GET] | no | no | no | no | Search & Match Service Graphical User Interface (GUI) content, optional for participating organisations |
/patients/{wmdaId} [GET] | no | no | no | no | Search & Match Service GUI content, optional for participating organisations |
/patients/status [PUT] | yes | no | no | no | Recommended if search results need to stay up-to-date. In that case patient status can be set to "ACT" in Search & Match. |
/patients/user [PUT] | no | no | no | no | Search & Match Service GUI content, optional for participating organisations |
SEARCH | |||||
/searches [POST] | yes | no | yes (PR) | no | |
/searches/patientSearches/{wmdaId} [GET] | yes | no | yes (PR) | no | |
/searches/refreshAllPatientSearches [POST] | no | no | no | no | Not required. Search results will stay up-to-date if patient status is set to "ACT" in Search & Match. |
/searches/{searchId} [GET] | no | no | no | no | Highly recommended |
/searches/searchResultsRefresh | no | no | no | no | Not required. Search results will stay up-to-date if patient status is set to "ACT" in Search & Match. |
/searches/searchResults/donors [POST] | yes | no | yes (PR) | no | At least one of those is mandatory, |
/searches/searchResults/cbus [POST] | |||||
/searches/{searchId}/searchResults/adcu [GET] | |||||
/searches/{searchId}/searchResults/registries [GET] | no | no | no | no | Search & Match Service GUI content, optional for participating organisations |
/searches/{searchId}/searchResults/cbbs [GET] | no | no | no | no | Search & Match Service GUI content, optional for participating organisations |
/searches/selected/donors [POST] | no | no | no | no | Search & Match Service GUI content, optional for participating organisations |
/searches/selected/cbus [POST] | no | no | no | no | Search & Match Service GUI content, optional for participating organisations |
/searches/donors/{searchResultsId} [GET] | no | no | no | no | Search & Match Service GUI content, optional for participating organisations |
/searches/cbus/{searchResultsId} [GET] | no | no | no | no | Search & Match Service GUI content, optional for participating organisations |
DASHBOARD | |||||
for all | no | no | no | no | Search & Match Service GUI content, optional for participating organisations |
CONNECT API | |||||
ATTACHMENT | |||||
/api/v1/attachmentTicket [POST] | no | no | Optional for participating organisations | ||
/api/v1/attachmentDownloadURL [POST] | no | no | Optional for participating organisations | ||
/api/v1/attachmentDownloadedNotification [POST] | no | no | Optional for participating organisations | ||
RETRIEVE | |||||
/api/v1/availableMessages [POST] | yes | yes | Mandatory so individual endpoints will only be called if there is a message available at that endpoint. | ||
ADMIN | |||||
/api/v1/alertRetrieve [GET] | no | no | Recommended | ||
/api/v1/alertUpdateRetrieve [GET] | no | no | Recommended | ||
PATIENT | |||||
/api/v1/updateRegisteredPatient [POST] | yes (PR) | yes (PR) | |||
/api/v1/updateRegisteredPatientRetrieve [GET] | yes (DR) | yes (DR) | |||
PING | |||||
/api/v1/pingRequest [POST] | no | no | Optional for participating organisations | ||
/api/v1/pingRetrieve [POST] | no | no | Optional for participating organisations | ||
TEXT MESSAGE | |||||
/api/v1/textMessageRequest [POST] | no | no | Optional for participating organisations | ||
/api/v1/TextMessageRetrieve [GET] | no | no | Optional for participating organisations | ||
REQUEST | |||||
/api/v1/genericRequestRequest [POST] | no | no | |||
/api/v1/genericRequestRetrieve [GET] | no | no | |||
/api/v1/extendedTypingRequestRequest [POST] | yes (PR) | yes (PR) | |||
/api/v1/extendedTypingRequestRetrieve [POST] | no | no | recommended for DCs with incompletely typed donors | ||
/api/v1/extendedTypingResponseRequest [POST] | no | no | recommended for DCs with incompletely typed donors | ||
/api/v1/extendedTypingResponseRetrieve [POST] | yes (PR) | yes (PR) | |||
/api/v1/sampleRequestRequest [POST] | yes (PR) | yes (PR) | |||
/api/v1/sampleRequestRetrieve [POST] | yes (DR, CBB) | yes (DR, CBB) | |||
/api/v1/sampleInfoRequest [POST] | yes (DR, CBB) | yes (DR, CBB) | |||
/api/v1/sampleInfoRetrieve [POST] | yes (PR) | yes (PR) | |||
/api/v1/sampleArrivalRequest [POST] | yes (DR, CBB) | yes (DR, CBB) | |||
/api/v1/sampleArrivalRetrieve [POST] | yes (PR) | yes (PR) | |||
/api/v1/sampleResponseRequest [POST] | yes (PR) | yes (PR) | |||
/api/v1/sampleResponseRetrieve [POST] | yes (DR, CBB) | yes (DR, CBB) | |||
/api/v1/infectiousDiseaseMarkerRequest [POST] | yes (PR) | yes (PR) | |||
/api/v1/infectiousDiseaseMarkerRequestRetrieve [POST] | yes (DR) | yes (DR) | |||
/api/v1/infectiousDiseaseMarkerResultRequest [POST] | yes (DR) | yes (DR) | |||
/api/v1/infectiousDiseaseMarkerResultRetrieve [POST] | yes (PR) | yes (PR) | |||
/api/v1/reservationRequestRequest [POST] | no (PR) | no (PR) | reservations are mandatory upon any other request | ||
/api/v1/reservationRequestRetrieve [POST] | yes (DR) | yes (DR) | |||
/api/v1/reservationResponseRequest [POST] | yes (DR) | yes (DR) | |||
/api/v1/reservationResponseRetrieve [POST] | yes (PR) | yes (PR) | reservation response will be sent after every request | ||
/api/v1/reservationReleaseRequest [POST] | yes (PR) | yes (PR) | |||
/api/v1/reservationReleaseRetrieve [POST] | yes (DR) | yes (DR) | |||
/api/v1/requestCancellationRequest [POST] | yes (PR) | yes (PR) | |||
/api/v1/requestCancellationRetrieve [POST] | yes (DR) | yes (DR) | |||
/api/v1/requestRejectedRequest [POST] | yes (DR) | yes (DR) | |||
/api/v1/requestRejectedRetrieve [POST] | yes (PR) | yes (PR) | |||
/api/v1/resultReminderRequest [POST] | no | no | recommended | ||
/api/v1/resultReminderRetrieve [POST] | no | no | recommended | ||
GENERAL | |||||
/api/v1/messageResponse [POST] | yes | yes | |||
/api/v1/messageResponseRetrieve [POST] | yes | yes | |||
CBU | |||||
/api/v1/cordBloodUnitReportRequestRequest | no | no | should be generalised to CBU and ADCUs, etc... | ||
/api/v1/cordBloodUnitReportRequestRetrieve | yes (CBB) | yes (CBB) | |||
/api/v1/cordBloodUnitReportResponseRequest | no | no | |||
/api/v1/cordBloodUnitReportResponseRetrieve | yes (CBB) | yes (CBB) | |||
The general reasons behind message ordering are:
Message ordering will be realized by:
For the message ordering to work properly, there are different responsibilities of the different parties involved:
The sender is responsible for ensuring the desired order of calls to the Connect APIs.
If API calls are to be scheduled/batched, it is suggested that the sender maintains a queue of outgoing calls/messages so that the message sequence is persistent in the event of system failure.
Make sure the next message is sent only when the status of the previous one has been marked "OK" by SMC.
The central system provides a sequence number which is contained in the response body (wmda response) to each connect message and in the message retrieved by the receiving registry (meta block).
The sequence number is part of the meta block. The receiver has to check that the sequence number is correct (no numbers missing) and only process the messages if that is ok. Otherwise, go back to the central system and claim the missing message.
Pro:
Messages can be collected via individual API calls against the different "retrieve" APIs.
It is left for the retrieving registry to choose how to collect the messages, by picking one of the following scenarios:
In the development of Match Connect, we have adhered to RESTful best practices to ensure optimal performance and maintainability.
The design-choices for Match Connect prioritize simplicity, scalability and standardization.
Justification for some of these decisions are further explained below: