wiki:REST_API

Version 20 (modified by Dominic König, 14 years ago) ( diff )

--

S3 RESTful API

The S3 framework provides a generic RESTful API for many of the Eden data resources.

Important to know:

  • In XML and JSON, data resources are always exported/imported in compound with all their subresources and referenced resources.
  • In all other formats, main resources and subresources are addressed separately

Basic URL Syntax

Parts in { } are optional, [ ] indicate alternatives

The basic URL format is:

http://<path>/<prefix>/<name>{/<arguments>}{?<query>}

ItemExplanationExample
paththe domain and path of the Eden serverdemo.sahanafoundation.org/eden
prefixthe application prefixrms (=Request Management System)
namethe resource namereq (=Requests)
argumentsany method arguments
querythe resource query

The data format is specified as file extension to either the resource name or any of the method arguments, e.g.:

http://demo.sahanafoundation.org/rms/req .xml

If multiple data format extensions are specified, the rightmost applies. Any extension can be overridden by the format parameter in the query:

http://demo.sahanafoundation.org/rms/req ?format=json

Method Arguments

The method argument list uses the following syntax:

{ /id }{ / [ method | component { /component_id } { /method } ] }

where:

  • id is a record ID in the main resource
  • component is the name of a subresource (e.g. address is a subresource of person)
  • component_id is the record ID in the subresource
  • method is a URL method (only in GET/POST requests, e.g. "create", "read", "update")

Query Syntax

The basic query format is: resource.field{operator}=value

  • resource is the name of the resource or component (without prefix) or the name of the context
  • field is the name of the field to be tested
  • operator is the operator
  • value is the value or a comma-separated list of values to test against (a comma will be treated as OR)

Supported operators:

OperatorMethodComments
__eqequal, =can be omitted
__nenot equal, =||
__ltless than, <numeric and date types only
__leless than or equal, <numeric and date types only
__gtgreater than, >numeric and date types only
__gegreater than or equal, >numeric and date types only
__likelike, LIKE(%value%)string/text types only
__unlikenot like, NOT LIKE(%value%)string/text types only
__incontainment, contains(value)list types only
__exnegative containment, not contains(value)list types only

Examples

  • Testing a field in the main resource:
      /pr/person?person.first_name__like=Miriam
    
  • Testing a field in a subresource (component):
      /pr/person?address.city__like=Oslo
    

Context Queries

  • Testing a field in a referenced resource
  • Context must be specified like:

context.name={component.}field

where:

  • name is a name for the context (as reference for subsequent queries)
  • component is the name of the component resource (without prefix)
  • field is the field name of the foreign key field
   /pr/person?context.location=address.location_id&location.lat__gt=0

GET Methods

in interactive formats (e.g. HTML):

  • A GET without method and no record ID results in a list view of the resource
  • A GET without method but with a record ID results in a read view of this record. If the user is permitted to update the addressed record, an update form returned instead
  • you may specify a method in the method argument list, e.g. create (=create new record), read (=view this record), update (=update this record) or delete (=delete this record), all of which are returning a form
  • some resources support other methods, e.g. search_simple to perform a simple string search (currently supported by the pr/person and hms/hospital resources)

in non-interactive formats (e.g. XML):

  • method arguments work like in interactive formats, except they expect the data in the request body in the respective format
  • all records addressed by the URL are returned in the respective format, there is no difference between (single-record-)"read" and (multi-record-)"list" view
  • XLS and PDF format work read-only (create/update/delete being ignored)

POST Method

Interactive Formats

  • performs the respective method (if specified in the request)
  • expects the formdata as multi-part request body

Non-interactive Formats

  • see PUT

PUT Method

Interactive formats

  • see POST

Non-interactive formats

  • create/update records in a resource with the data from the request body (which must be in the specified format)
  • records being matched by the UIDs specified in the data, while any record IDs in the URL restrict the selection

DELETE Method

  • deletes those of the addressed records which are deletable by the current user

Main Resources

ApplicationPrefixResourceResource NameURLFormats
Person RegistryprPersonsperson/pr/personXML, JSON, PFIF, RSS, XLS, PDF
Person RegistryprGroupsgroup/pr/groupXML, JSON, RSS, XLS, PDF
MapgisLocationslocation/gis/locationXML, JSON, GeoRSS, KML, GPX, RSS, XLS, PDF
Organization RegistryorgOrganisationsorganisation/org/organisationXML, JSON, RSS, XLS, PDF
Organization RegistryorgOfficesoffice/org/officeXML, JSON, KML, GeoRSS, RSS, XLS, PDF
Organization RegistryorgProjectsproject/org_projectXML, JSON, RSS, XLS, PDF
Hospital Management SystemhmsHospitalshospital/hms/hospitalXML, JSON, KML, GeoRSS, RSS, XLS, PDF, HAVE
Shelter RegistrycrSheltersshelter/cr/shelterXML, JSON, KML, GeoRSS, RSS, XLS, PDF
DVIdviDead Body Recovery Requestsrecreq/dvi/recreqXML, JSON, KML, GeoRSS, RSS, XLS, PDF
DVIdviDead Body Filesbody/dvi/bodyXML, JSON, RSS, XLS, PDF
Incident Report SystemirsIncident Messagesincident/irs/incidentXML, JSON, KML, GeoRSS, RSS, XLS, PDF
Incident Report SystemirsIncident Reportsireport/irs/ireportXML, JSON, KML, GeoRSS, RSS, XLS, PDF
Incident Report SystemirsImpact Assessmentsiassessment/irs/iassessmentXML, JSON, RSS, XLS, PDF
Rapid Assessment ToolratAssessmentsassessment/rat/assessmentXML, JSON, KML, GeoRSS, RSS, XLS, PDF
Request Management SystemrmsRequestsreq/rms/reqXML, JSON, KML, GeoRSS, RSS, XLS, PDF

URL Examples

XML/JSON Format

Note: See TracWiki for help on using the wiki.