Each facility must contain the following core properties.
The internal system uid is denoted with “id”. The id most be universally unique.
id: '0X9OCW3JMV98EYOVN32SGN4II'
Note: the API does not providing a specific format for IDs. That is left up to the implementation.
URL link to the unique ID API resource for the facility
url: "http://facilityregistry.org/api/v1/facilities/0X9OCW3JMV98EYOVN32SGN4II.json"
One of the primary functions of the facility registry is facilitate a mapping of the different IDs used by different agencies to represent a particular facility.
Each external identifier consists of the following components:
identifiers : [
{agency: "MOH", context: "DHIS", id: "123"},
{agency: "UNICEF", context: "mtrac", id: "53adf"},
{ .... }
]
Geolocation represented by longitude and latitude coordinates in that order.
coordinates: [lng, lat]
ISO 8601 timestamp, including timezone, of when the facility was created.
createdAt: "2011-11-16T14:26:15Z"
ISO 8601 timestamp, including timezone, of when the facility was last updated.
updatedAt: "2011-11-16T14:26:15Z"
Extended properties are implementation specific properties in the properties block.
The property types that are supported are:
- When representing a single select question: should return the scalar that is the code of the selected value.
- When representing a multiple-select question: should return the codes of the selected values. eg) fruits: [“apples”,”oranges”,”bananas”]
- Can contain complex objects.
Sample properties
"properties": {
"numBeds": 55,
"services": ["XR","OBG","TR"],
"equipment": [
{
"id": 542,
"name": "Microscope"
},
{
"id": 942,
"name": "Vaccine Fridge"
}
],
"manager": "Mrs. Liz"
"hasMaternity": true,
},
Property field specification expectations
Note
Future releases will support:
Semantic versioning. (X.Y.Z) where X is the major version, Y the minor and Z the patch version. Minor version Y must be incremented if a new backwards compatible functionality is introduced to the API. A major version X must be incremented if any backwards incompatible changes are introduced to the public API.
The major version must be exposed in the URL. Note: the URL pattern may vary by implementation.
/api/v1/facilities.json
All prior versions still supported by the code should be exposed by its own URL.
Will be supported initially by HTTP Basic Authentication.
In the future, support for HTTP Digest Authentication in addition to OAuth 2.0 will be considered.
Returns HTTP Response 401 or 404 along with a human readable error message.
Optional Verbose Error messages
JSON
{
“message”: “human readable error message”,
“moreInfo” : “http://api.facilityregistry.org/errors/12345"
}
/facilities.json
POST: Creates facility. SUCCESS: HTTP 200 Returns URL to the generated facility.
If a duplicate is detected (up to the implementation) a 409 is returned
Note
Need to define JSON input status
GET: See below
PUT: Error, not supported
DELETE: Error, not supported
/facilities/<id>.json
POST:: Error, not supported
GET: See below
DELETE: Delete facility. SUCCESS: Returns: HTTP 200 and the ID of deleted facility
When the facility registry receives a request to obsolete a facility, the facility registry SHALL validate that the facility exists. If the requested target of deletion does not exist, the facility registry SHALL respond with an HTTP 404 error.
If the facility resource exists, the facility registry SHALL delete the facility resource such that the record is no longer discoverable to consumers. The process by which the facility registry marks the facility as deleted is not specified in this document, and is left to implementers to determine the most appropriate method.
Once the record is deleted, the facility registry SHALL return an HTTP 200 response with the URL of the deleted facility.
PUT: Update facility if exists, if not error. Success: HTTP 200, JSON collection
GET /facilities.json
Returns the list of facilities in json.
allProperties
allProperties is a boolean field (default true) that defines that all the core properties plus the user defined properties in the properties block should be returned.
/facilities.json?allProperties=true
This would return all the properties (core + specified)
Defining Partial Response with fields
/facilities.json?fields=name,id,properties:numBeds
This would return just the specified properties of name, id and numBeds (in the properties sub-object) in a partial response. This is very helpful in optimizing performance in bandwidth constrained settings. All properties in the facility registry are accessible by this method including the core properties and those in the property sub-object.
Filter facilities that are active or not. Supported parameters = true, false
/facilities.json?active=true/false
Returns facilities updated since a particular data expressed in the ISO 8601 format.
/facilities.json?updatedSince=2011-11-16T00:00:00Z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | {
"facilities": {
"facility": {
"name": "Kakamega HC",
"url": "http: //facilityregistry.org/api/v1/facilities/0X9OCW3JMV98EYOVN32SGN4II",
"id": "0X9OCW3JMV98EYOVN32SGN4II",
"active": true,
"createdAt": "2011-11-16T14:26:15Z",
"updatedAt": "2011-11-16T14:26:15Z",
"coordinates": [
-1.6917,
29.525
],
"identifiers": [
{
"agency": "MOH",
"context": "DHIS",
"id": "123"
},
{
"agency": "UNICEF",
"context": "mtrac",
"id": "53adf"
}
],
"properties": {
"numBeds": 55,
"services": [
"XR",
"OBG",
"TR"
],
"equipment": [
{
"id": 542,
"name": "Microscope"
},
{
"id": 942,
"name": "Vaccine Fridge"
}
],
"manager": "Mrs. Liz",
"hasMaternity": true,
"medicalOfficer": "Dr.Mukombo"
}
}
}
}
|
While it is not required, we suggest implementations support gzip, etags and cache headers which can help reduce uncessary data transfer which is helpful in low-bandwidth environments.
Cache headers if implemented could be especially useful, as a common use case seems to be maintaining a mirror of facility information.