Changeset 2202


Ignore:
Timestamp:
Mar 30, 2012, 7:22:29 PM (5 years ago)
Author:
work@…
Message:
  • updated api specification
  • added in-code documentation
  • added try/catch block to getMeasurementDataForAssay API call to check for valid module REST implementation
Location:
trunk/grails-app
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/controllers/api/ApiController.groovy

    r2201 r2202  
    3131    }
    3232
     33    /**
     34     * authenticate with the api using HTTP_BASIC authentication
     35     *
     36     * This means
     37     * 1. the client should send the HTTP_BASIC authentication header
     38     *    which is an md5 hash of the username + password concatenated:
     39     *
     40     *    Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
     41     *
     42     * 2. the user used to authenticate with the API should have
     43     *    the ROLE_CLIENT role
     44     *
     45     * @param string deviceID
     46     */
    3347    @Secured(['ROLE_CLIENT', 'ROLE_ADMIN'])
    3448    def authenticate = {
     
    7286    }
    7387
     88    /**
     89     * get all readable studies
     90     *
     91     * @param string deviceID
     92     * @param string validation md5 sum
     93     */
    7494    def getStudies = {
    7595        println "api::getStudies: ${params}"
     
    124144    }
    125145
     146    /**
     147     * get all subjects for a study
     148     *
     149     * @param string deviceID
     150     * @param string studyToken
     151     * @param string validation md5 sum
     152     */
    126153    def getSubjectsForStudy = {
    127154        println "api::getSubjectsForStudy: ${params}"
     
    163190    }
    164191
     192    /**
     193     * get all assays for a study
     194     *
     195     * @param string deviceID
     196     * @param string studyToken
     197     * @param string validation md5 sum
     198     */
    165199    def getAssaysForStudy = {
    166200        println "api::getAssaysForStudy: ${params}"
     
    202236    }
    203237
     238    /**
     239     * get all samples for an assay
     240     *
     241     * @param string deviceID
     242     * @param string assayToken
     243     * @param string validation md5 sum
     244     */
    204245    def getSamplesForAssay = {
    205246        println "api::getSamplesForAssay: ${params}"
     
    242283    }
    243284
     285    /**
     286     * get all measurement data from a linked module for an assay
     287     *
     288     * @param string deviceID
     289     * @param string assayToken
     290     * @param string validation md5 sum
     291     */
    244292    def getMeasurementDataForAssay = {
    245293        println "api:getMeasurementDataForAssay: ${params}"
     
    267315
    268316            // iterate through measurementData and build data matrix
    269             measurementData.each { data ->
    270                 if (!matrix.containsKey(data.sampleToken)) matrix[ data.sampleToken ] = [:]
    271                 matrix[ data.sampleToken ][ data.measurementToken ] = data.value
    272             }
    273 
    274             // define result
    275             def result = [
    276                 'count'         : matrix.size(),
    277                 'measurements'  : matrix
    278             ]
    279 
    280             // set output headers
    281             response.status = 200
    282             response.contentType = 'application/json;charset=UTF-8'
    283 
    284             if (params.containsKey('callback')) {
    285                 render "${params.callback}(${result as JSON})"
    286             } else {
    287                 render result as JSON
     317            try {
     318                measurementData.each { data ->
     319                    if (!matrix.containsKey(data.sampleToken)) matrix[data.sampleToken] = [:]
     320                    matrix[data.sampleToken][data.measurementToken] = data.value
     321                }
     322
     323                // define result
     324                def result = [
     325                        'count'         : matrix.size(),
     326                        'measurements'  : matrix
     327                ]
     328
     329                // set output headers
     330                response.status = 200
     331                response.contentType = 'application/json;charset=UTF-8'
     332
     333                if (params.containsKey('callback')) {
     334                    render "${params.callback}(${result as JSON})"
     335                } else {
     336                    render result as JSON
     337                }
     338            } catch (Exception e) {
     339                response.sendError(500, "module '${assay.module}' does not properly implement getMeasurementData REST specification (${e.getMessage()})")
    288340            }
    289341        }
  • trunk/grails-app/views/api/index.gsp

    r2201 r2202  
    532532<h2>example reply</h2>
    533533<blockquote>
    534 ...todo...
     534    {
     535    "count":
     536    14,
     537    "measurements":
     538    {
     539    "07378e29-3233-4e3f-b4ea-007f9f9b1317":
     540    {
     541    "Fat Depot":
     542    310
     543    },
     544    "198183b1-d402-4f24-9c5a-396f79bb6a55":
     545    {
     546    "Fat Depot":
     547    1918
     548    },
     549    "2c719340-eb7f-4a70-8527-c64cc74dc542":
     550    {
     551    "Fat Depot":
     552    1039
     553    },
     554    "4861fc77-1320-4401-b18a-66b1cd67d2c8":
     555    {
     556    "Fat Depot":
     557    411
     558    },
     559    "4edff5ad-c3af-41da-8efe-87f5a018912a":
     560    {
     561    "Fat Depot":
     562    368
     563    },
     564    "6bfe2a0d-3af0-4ed8-8144-56840e934f6e":
     565    {
     566    "Fat Depot":
     567    456
     568    },
     569    "775666dd-05b1-4f35-ac9c-d36f8257eb1a":
     570    {
     571    "Fat Depot":
     572    2075
     573    },
     574    "7e9930bc-ec8c-4e74-bd2b-49d6c852eeda":
     575    {
     576    "Fat Depot":
     577    945
     578    },
     579    "a4d16db8-49f2-4dc2-81bb-910e574c804a":
     580    {
     581    "Fat Depot":
     582    311
     583    },
     584    "a556b145-dd37-4568-92f1-e3a251653276":
     585    {
     586    "Fat Depot":
     587    1150
     588    },
     589    "c180d727-8d6c-4673-a5fd-1c28f04b8aaa":
     590    {
     591    "Fat Depot":
     592    347
     593    },
     594    "e888b1b1-1dc8-45ed-8196-00338fa3b36f":
     595    {
     596    "Fat Depot":
     597    1387
     598    },
     599    "f7392df1-a754-4957-a1d0-c98bbb91080d":
     600    {
     601    "Fat Depot":
     602    318
     603    },
     604    "fc755220-b2b4-43ed-adf8-e4323fc62b55":
     605    {
     606    "Fat Depot":
     607    1308
     608    }
     609    }
     610    }
    535611</blockquote>
    536612</p>
Note: See TracChangeset for help on using the changeset viewer.