Under the Hood

The REST model

Check out the wikipedia page if you are not familiar with REST.


[1]http://en.wikipedia.org/wiki/REST

The REST model in XNAT

Basically the resources are accessible pairing a level and its ID in a sequence representing a URI starting by /REST.

Uniquely identifiable resources:
  • /REST/projects/{ID}
  • /REST/projects/{ID}/subjects/{ID}
Listing the resources is done by not giving an ID at the end of a URI:
  • /REST/projects
  • /REST/projects/{ID}/subjects
Requesting specific data in specific format is done with a query string:
  • /REST/projects?format=csv
  • /REST/projects/{ID}?format=xml

[2]http://www.xnat.org/Web+Services

REST in Python

The REST resource levels supported by this Python library are the following:

- projects
    - subjects
        - experiments
            - scans
            - reconstructions
            - assessors

Attached to each resource level are:

- resources
    - files

Every level corresponds to a Python class sharing common methods from ResourceObject and adding methods relevant to the specific resource.

REST resource Python Class
REST Interface
projects Project
subjects Subject
experiments Experiment
scans Scan
reconstructions Reconstruction
assessors Assessor
resources Resource
files File

This classes may but should not be instantiated manually.

The HTTP requests are handled by a slightly modified version of httplib2, which is shipped the package. The main fix was made to enable back the built-in HTTP cache to avoid downloading again files that are already in the cache. This changes nothing for other resources that don’t have to necessary HTTP headers to enable a cache service.