Repository Service API

Repository Service API

Introduction

The Query API is loosely modeled after Facebook's Query Language.

The REST API took inspiration from several successful REST APIs:

See Service API Design for more information regarding the rationale and design details.

Encoding

The primary request and response encoding for the service is JSON. Here's a handy tool to make a blob of JSON more readable: http://jsonformatter.curiousconcept.com/

In responses from the service, dates are serialized as long integers expressing epoch time - the number of seconds elapsed since midnight Coordinated Universal Time (UTC) of January 1, 1970, not counting leap seconds. Here's a handy tool to convert from epoch time to human readable dates: http://www.epochconverter.com/

In requests to the service, dates can be serialized either as long integers expressing epoch time or human readable dates in http://www.ietf.org/rfc/rfc3339.txt format such as '2011-01-31' or '2011-01-31T22:00:00'

Security

Eventually these services will be HTTPS only and disallow HTTP. For all requests requiring authentication, users will pass a special header sessionToken with
each request to the service.

Log into Synapse

You must have an account with permission to create entities in Synapse.

Request

curl -i -k -H Accept:application/json -H Content-Type:application/json -d '{ "email": "me@myEmail.com", "password": "thisIsAFakePassword" }' https://auth-prod.sagebase.org/auth/v1/session

Response

HTTP/1.1 201 Created Content-Type: application/json Date: Tue, 28 Aug 2012 23:03:04 GMT Server: Apache-Coyote/1.1 Content-Length: 43 Connection: keep-alive { "sessionToken":"XXXXXXXXXXXXXXX" }

Create/Update/Delete Examples

You can create entities, update entities, read entities, and delete entities. More advanced querying is implemented as a separate API. Partial updates (e.g., just updating two fields in a dataset) are not supported. In a nutshell, when you update something like a dataset, you GET the dataset first, modify the properties you want to change, and then send the entire object back to the service so that this revised entity overwrites the previously stored entity. Conflicting updates are detected and rejected through the use of the ETag header.

Create a Entity

An entity is created with a POST where the entity body is passed with a content type of application/json.  The only required property for any entity is the 'entityType' which indicates the type of entity you wish to create.  See the following table for common entity types:

entityType

Alias (for query)

Description

entityType

Alias (for query)

Description

org.sagebionetworks.repo.model.Project

project

A project entity serves as the root for collaboration.  It is a common practices to place all other entities within a project.

org.sagebionetworks.repo.model.Folder

folder

A simple tool for organizing entities.  This is similar to a file folder.

org.sagebionetworks.repo.model.Link

link

An entity that points to another entity, similar to a Window's Short Cut or a Linux/Mac Link.

org.sagebionetworks.repo.model.Code

code

An entity where the location is composed of source code.

org.sagebionetworks.repo.model.PhenotypeData

phenotypedata

Used for phenotypic data.

org.sagebionetworks.repo.model.GenotypeData

genotypedata

Used for genotypic data.

org.sagebionetworks.repo.model.ExpressionData

expressiondata

Used for expression data.

org.sagebionetworks.repo.model.RObject

robject

Language specific 'R' object.

org.sagebionetworks.repo.model.Study

study

Used for a study.

org.sagebionetworks.repo.model.Data

data

Generic data.

For more information on entity types see: Synapse Entity Types.

Note that the request is a POST and the content type of the data we are sending to the service is json

In the following example we are going to create a project entity:

Request

curl -i -k -H sessionToken:YourSessionToken -H Accept:application/json -H Content-Type:application/json -d '{"entityType": "org.sagebionetworks.repo.model.Project"}' https://repo-prod.sagebase.org/repo/v1/entity

Response

Content-Type: application/json Date: Wed, 29 Aug 2012 03:34:01 GMT ETag: 0 Location: /repo/v1/entity/syn1058078 Server: Apache-Coyote/1.1 Content-Length: 396 Connection: keep-alive { "createdOn":"2012-08-29T03:34:00.967Z", "id":"syn1058078", "parentId":"syn4489", "modifiedOn":"2012-08-29T03:34:00.967Z", "createdBy":"John Hill", "accessControlList":"/repo/v1/entity/syn1058078/acl", "etag":"0", "modifiedBy":"John Hill", "name":"syn1058078", "annotations":"/repo/v1/entity/syn1058078/annotations", "entityType":"org.sagebionetworks.repo.model.Project", "uri":"/repo/v1/entity/syn1058078" }

 

In the above example, we created an entity with only the 'entityType' but the returned entity had many more fields set.  In the next section we will cover the basic fields of an entity.

Basic Entity Fields

The following are fields that are common to all entities and entity types:

Field Name

Type

Description

Editable

Default Value

Field Name

Type

Description

Editable

Default Value

id

String

The ID issued to this entity by Synapse to unique identify it.  This ID is immutable and guaranteed to be unique within Synapse.  Once an ID is issue to entity the ID will never be issued to another entity even if the original entity is deleted.

false

auto-generated

parentId

String

This is the ID of this entity's parent.  This is used to build a hierarchy of entities.

true

Root folder

createdOn

ISO 8601 date-time

The date and time when the entity was original created.

false

auto-generated

modifiedOn

ISO 8601 date-time

The date and time when the entity was last modified.

false

auto-generated

createdBy

String

The name of the user that originally created the entity.

false

auto-generated

modifiedBy

String

The name of the user that last modified the entity.

false

auto-generated

name

String

The name of the entity.  This is the most prominent fields of the entity and will show up everywhere.  Just like a file must have a unique name within a folder, an Entity must have a unique name within its parent.

true

entity id

description

String

The description provides more details about an Entity.  This field is very prominent on the Synapse web site.

true

null

etag

String

Used to concurrency and change detection.

false

auto-generated

uri

String

Relative URI of the entity.

false

auto-generated

annotations

String

The relative URL for the entity annotations.

false

auto-generated

accessControlList

String

The relative URL for the entity Access Control List ACL.

false

auto-generated

Any editable field can be set at creation time or updated.

Update an Entity

In this example we want to give our project entity from the previous example a more meaningful name (the default name is the same as the entity's id) .

Note that the request is a PUT. Also note that we add a header 'ETag' with a value that is the same as current etag of the entity.  If the entity has been modified since we last fetched it the etag will not match and we will receive a concurrent modification error.

Request

curl -i -k -H sessionToken:YourSessionToken -H ETag:0 -H Accept:application/json -H Content-Type:application/json -X PUT -d '{ "createdOn":"2012-08-29T03:34:00.967Z", "id":"syn1058078", "parentId":"syn4489", "modifiedOn":"2012-08-29T03:34:00.967Z", "createdBy":"John Hill", "accessControlList":"/repo/v1/entity/syn1058078/acl", "etag":"0", "modifiedBy":"John Hill", "name":"Example Project", "annotations":"/repo/v1/entity/syn1058078/annotations", "entityType":"org.sagebionetworks.repo.model.Project", "uri":"/repo/v1/entity/syn1058078" }' https://repo-prod.sagebase.org/repo/v1/entity/syn1058078

Response

HTTP/1.1 200 OK Content-Type: application/json Date: Wed, 29 Aug 2012 04:16:18 GMT ETag: 1 Server: Apache-Coyote/1.1 Content-Length: 401 Connection: keep-alive { "createdOn":"2012-08-29T03:34:00.967Z", "id":"syn1058078", "parentId":"syn4489", "modifiedOn":"2012-08-29T04:16:18.234Z", "createdBy":"John Hill", "accessControlList":"/repo/v1/entity/syn1058078/acl", "etag":"1", "modifiedBy":"John Hill", "name":"Example Project", "annotations":"/repo/v1/entity/syn1058078/annotations", "entityType":"org.sagebionetworks.repo.model.Project", "uri":"/repo/v1/entity/syn1058078" }

 

Creating Hierarchy

Hierarchy is created in Synapse by setting the "parentId" field of an entity.  In this example we are going to create a new folder entity as a child to our project:

Request

curl -i -k -H sessionToken:YourSessionToken -H Accept:application/json -H Content-Type:application/json -d '{"entityType": "org.sagebionetworks.repo.model.Data", "parentId":"syn1058078", "name":"Sample Data"}' https://repo-prod.sagebase.org/repo/v1/entity

Response

HTTP/1.1 201 Created Content-Type: application/json Date: Thu, 13 Sep 2012 02:33:06 GMT ETag: c5dc66a6-c864-4886-a8f1-25c4c84ba48b Location: /repo/v1/entity/syn1151499 Server: Apache-Coyote/1.1 Content-Length: 620 Connection: keep-alive { "s3Token":"/repo/v1/entity/syn1151499/s3Token", "versionLabel":"0.0.0", "etag":"c5dc66a6-c864-4886-a8f1-25c4c84ba48b", "accessControlList":"/repo/v1/entity/syn1151499/acl", "versionUrl":"/repo/v1/entity/syn1151499/version/1", "modifiedBy":"John Hill", "entityType":"org.sagebionetworks.repo.model.Data", "uri":"/repo/v1/entity/syn1151499", "id":"syn1151499", "createdOn":"2012-09-13T02:33:06.314Z", "modifiedOn":"2012-09-13T02:33:06.314Z", "parentId":"syn1058078", "versions":"/repo/v1/entity/syn1151499/version", "createdBy":"John Hill", "name":"Sample Data", "annotations":"/repo/v1/entity/syn1151499/annotations", "versionNumber":1 }

 

Entity Annotations

Get Annotations

First get the current annotations for your newly created data entity.

Request

curl -i -k -H sessionToken:YourSessionToken -H Accept:application/json https://repo-prod.sagebase.org/repo/v1/entity/syn1151499/annotations

Response

HTTP/1.1 200 OK Content-Type: application/json Date: Thu, 13 Sep 2012 02:38:03 GMT ETag: c5dc66a6-c864-4886-a8f1-25c4c84ba48b Server: Apache-Coyote/1.1 Content-Length: 244 Connection: keep-alive { "id":"syn1151499", "creationDate":"1347503586314", "stringAnnotations":{ }, "dateAnnotations":{ }, "etag":"c5dc66a6-c864-4886-8f1-25c4c84ba48b", "doubleAnnotations":{ }, "longAnnotations":{ }, "blobAnnotations":{ }, "uri":"/entity/syn1151499/annotations" }

 

Update Annotations

Then you add new annotations to the existing annotations, or modify the existing annotations, and do a PUT. Note that annotation values must always be arrays even if the array is only of length one.

Request

curl -i -k -H sessionToken:YourSessionToken -H ETag:843bddfc-d6f8-45d2-b88e-09b4aa27a1cf -H Accept:application/json -H Content-Type:application/json -X PUT -d ' { "id":"syn1151499", "creationDate":"1347503586314", "stringAnnotations":{ "stringExampleA":[ "one", "two" ], "stringExampleB":[ "cat", "dog" ] }, "dateAnnotations":{ "dateExample":[ 1347519600000, 1347606000000 ] }, "etag":"843bddfc-d6f8-45d2-b88e-09b4aa27a1cf", "doubleAnnotations":{ "floatExample":[ 1.234, 99.789 ] }, "longAnnotations":{ "longExample":[ 123, 456879 ] }, "blobAnnotations":{ }, "uri":"/entity/syn1151499/annotations" }' https://repo-prod.sagebase.org/repo/v1/entity/syn1151499/annotations

Response

HTTP/1.1 200 OK Content-Type: application/json Date: Thu, 13 Sep 2012 02:51:54 GMT ETag: 2526dd09-565e-4989-b8c4-a82e724672c6 Server: Apache-Coyote/1.1 Content-Length: 403 Connection: keep-alive { "id":"syn1151499", "creationDate":"1347503586314", "stringAnnotations":{ "stringEampleB":[ "cat", "dog" ], "stringExampleA":[ "one", "two" ] }, "dateAnnotations":{ "dateEample":[ 1347519600000, 1347606000000 ] }, "etag":"2526dd09-565e-4989-b8c4-a82e72467c6", "doubleAnnotations":{ "floatExample":[ 1.234, 99.789 ] }, "longAnnotations":{ "longExample":[ 123, 456879 ] }, "blobAnnotations":{ }, "uri":"/entity/syn1151499/annotations" }

 

Set Entity Location

In this example we will be uploading a simple text file with the following content:

Some simple text!

We will need to know the md5 of our file before we start.  For this example the text the MD5 is:

6b65ca38d3596e0e0e6e1ed3cfa981eb

There are three steps required to set an Entity's location data:

  1. Create an S3 Token.  We will use this token to upload the file to Amazon's S3.

    1. Request

      curl -i -k -H sessionToken:YourSessionToken -H Accept:application/json -H Content-Type:application/json -d '{"path": "SampleTextFile.txt", "md5":"6b65ca38d3596e0e0e6e1ed3cfa981eb"}' https://repo-prod.sagebase.org/repo/v1/entity/syn1151499/s3Token

      Response

  2. Use the "presignedUrl" from the previous step to upload the file to Amazon S3:  Note: For more information on uploading files to S3 see: http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectPUT.html

    1. Request

      curl -v -k -X PUT -H Content-MD5:a2XKONNZbg4Obh7Tz6mB6w== -H x-amz-acl:bucket-owner-full-control -H Content-Type:text/plain --data-ascii SampleTextFile.txt https://s3.amazonaws.com/proddata.sagebase.org/1151499/1159148/SampleTextFile.txt?Expires=1347598777&x-amz-security-token=AQoDYXdzEG4asAKFXWZXVmnAG7q1zyUzRjVz6rnN6wIRT0msXgSRBC3suTAItfuQjJRv9YOAw3Fr4nlJL2HAnRbNvF1NC4xnW5%2Bj6VUNnJYGtZUj%2Bwii%2BbTGYncNrruXLxqqLM8Kg%2FdmGQGWluVZkYy7rLDbofrWcWunRjSYBb7uEe74EURM1jg1ae3qMnNgwBUHWJvJb1AjOojpNujh0N5KX0C3ux6VCDcFrgHR6K%2BsiyfiPqSW25XmabA5jGAnV6EGXn1iazywrl2ZW8z%2BfYAZB1kgsoTCQgCZMsPxpXxh%2FBdQi7cc7rwflCr%2FP1wD51N9PGFakFhJkbm8glGhE%2BYQDYEOpvRmOF0%2BS2%2BxrstIzsEAoZ5NXmMg97pqOWx1sBQVvKp8NXgdkXn422CFJLFPW8u%2BVd%2FHzO6EILnQxYIF&AWSAccessKeyId=ASIAIGRZMDNEEK777KGA&Signature=c%2BC0HOBQ2MOzS4L89ev4OPbzD1w%3D
  3. Once the file has been successfully uploaded to S3 update the Entity using the S3 Token:

    1. Request

      curl -i -k -H sessionToken:YourSessionToken -H ETag:2526dd09-565e-4989-b8c4-a82e724672c6 -H Accept:application/json -H Content-Type:application/json -X PUT -d '{ "s3Token":"/repo/v1/entity/syn1151499/s3Token", "versionLabel":"0.0.0", "etag":"2526dd09-565e-4989-b8c4-a82e724672c6", "accessControlList":"/repo/v1/entity/syn1151499/acl", "versionUrl":"/repo/v1/entity/syn1151499/version/1", "modifiedBy":"John Hill", "contentType":"text/plain", "entityType":"org.sagebionetworks.repo.model.Data", "uri":"/repo/v1/entity/syn1151499", "id":"syn1151499", "createdOn":"2012-09-12T19:33:06.314-07:00", "modifiedOn":"2012-09-12T19:44:39.544-07:00", "parentId":"syn1058078", "versions":"/repo/v1/entity/syn1151499/version", "createdBy":"John Hill", "locations":[ { "path":"/1151499/1158826/SampleTextFile.txt", "type":"awss3" } ], "name":"Sample Data", "md5":"6b65ca38d3596e0e0e6e1ed3cfa981eb", "annotations":"/repo/v1/entity/syn1151499/annotations", "versionNumber":1 }' https://repo-prod.sagebase.org/repo/v1/entity/syn1151499

      Response

Versions Create/Read/Update/Delete (and Promote)

Any leaf entity that is version-able will have additional metada. Here is the JSON schema for these additional fields:

{ "properties": { "versionLabel": {"type": "string"}, "versionNumber": {"type": "number"}, "versionUrl": {"type": "string"}, "versions": {"type": "string"}, "versionComment" {"type": "string"}, }, "type": "object" }

Field Name

User Provided / Auto-generated

Description

Field Name

User Provided / Auto-generated

Description

versionLabel

User Provided

The user visible label for this revision. It is up to the user to provide a meaningful label

versionComment

User Provided

The user provided comment for this version. For example, what is this version, and why was it created?

versionNumber

Auto-generate

The contiguous number representing this version. The first version will be '1', followed by '2'...'n'

versionUrl

Auto-generated

The URL that can be used to fetch this version of the entity

versions

Auto-generated

The URL to list all versions of this entity

Version-able Entity Metadata

For version-able Entities, some metadata applies to the root object and is therefore version independent, while other metadata applies to the version and is therefore, version dependent. For example, the Access Control List (ACL) of an entity is version independent. This means it is not possible to apply different permissions to different versions of an entity. While the Annotations of an entity are version dependent. This means each version of the same entity can have different Annotations. The following table lists the various entity metadata and whether it is version dependent or independent.

Metadata

Version Dependent /Independent

Implications

Metadata

Version Dependent /Independent

Implications

Access Control List

Independent

Access to all versions is controlled with a single ACL

Name

Independent

One name applies to all versions of an entity

Description

Independent

One description applies to all versions of an entity

Created-On

Independent

An entity can only be created once

Created-By

Independent

An entity can only be created once

Parent-Id

Independent

All version of an entity must have the same parent

Annotations

Dependent

Each version of an entity can have its own annotations

Modified-By

Dependent

First set when a new version is created, and updated every time its version is change. Once a new version is created the Modified-By fields of older versions will remain static as older versions are immutable

Modified-On

Dependent

First set when a new version is created, and updated every time its version is change. Once a new version is created the Modified-On fields of older versions will remain static as older versions are immutable

All Entity specific matadata

Dependent

Each version of an entity can have its own values for all entity specific metadata. For example, the Location.path can have a unique value for each version.

Current API

The following table describes how versioning effects the current entity CRUD API:

URL

HTTP Type

Description

URL

HTTP Type

Description

/{entityType}

POST

Creates a new entity of the given {entityType}. For version-able entities, this will create the first version of this entity. This entity will have a versionNumber=1

/{entityType}

GET

Get a list of all entities of the given type: {entityType}. For version-able entity types, this will list the current version of each entity of that type.

/{entityType}/{id}

GET

Get an entity using its type and id. For version-able entities this will return the current version of the entity.

/{entityType}/{id}

PUT

Update the entity identified by type and id. For a version-able entity this will update the current version of the entity.

/{entityType}/{id}

DELETE

Delete the entity identified by type and id. For a version-able entity this will delete the entity and all versions of the entity.

/{entityType}/{id}/annotations

GET

Get the annotations for the entity identified by type and id. For a version-able entity this will return the annotations of the current entity.

/{entityType}/{id}/annotations

PUT

Update the annotations for the entity identified by type and id. For a version-able entity this will update the annotations of the current entity.

Version-able Additions to the API

The following table describes the new methods for manipulating the versions of a version-able entity.

URL

HTTP Type

Description

URL

HTTP Type

Description

/{versionable-entityType}/{entityId}/version

PUT

Create a new version of a given version-able entity. The user should provide a versionLabel and Synapse will auto-generate a new versionNumber. When this called on a version-able entity, the annotations of the current entity will be copied and applied to the newly created version.

/{versionable-entityType}/{entityId}/version

GET

Returns a list of all versions of this entity. This will be a paginated list with a default sort on versionNumber descending

/{versionable-entityType}/{entityId}/version/{versionNumber}

GET

Get a particular version of a version-able entity using the given id and version number. Note that the specific version fetched cannot be used to update the current version. Instead, promote it to the current version.

/{versionable-entityType}/{entityId}/version/{versionNumber}

PUT

Not supported! Only the current version of an entity can be updated using the existing API.

/{versionable-entityType}/{entityId}/version/{versionNumber}

DELETE

Delete a particular version of a version-able entity using the given id and version number.

/{versionable-entityType}/{entityId}/version/{versionNumber}/annotations

GET

Get the annotations of a particular version of a version-able entity using the given id and version number.

/{versionable-entityType}/{entityId}/version/{versionNumber}/annotations

PUT

Not Supported! You can only change the annotations of the current version.

/{versionable-entityType}/{entityId}/promoteVersion/{versionNumber}

POST

Promote the specified versionNumber to be the current version. Effectively, this just changes the number of that version to be current + 1.

Version API Examples:

Get the Location to Version

Get the location object we created earlier:

Request

curl -i -H sessionToken:YourSessionToken -H Accept:application/json 'https://repo-staging.sagebase.org/repo/v1/location/17338'

Response

HTTP/1.1 200 OK Content-Type: application/json Date: Wed, 05 Oct 2011 16:34:48 GMT ETag: 0 Server: Apache-Coyote/1.1 Content-Length: 675 Connection: keep-alive { "accessControlList": "/repo/v1/location/17338/acl", "annotations": "/repo/v1/location/17338/annotations", "contentType": "application/zip", "creationDate": 1317832487819, "etag": "0", "id": "17338", "md5sum": "b513a23fc54b7b0d65312e1a900af5a6", "name": "17338", "parentId": "17337", "path": "https://s3.amazonaws.com/stagingdata.sagebase.org/17338/0.0.0/mskcc_prostate_cancer.phenotype.zip?Expires=1317918889&AWSAccessKeyId=AKIAJQBSYCAUPIYF5WTA&Signature=2vTczuWgJ88Z0tiau1%2BPse4L2NA%3D", "type": "awss3", "uri": "/repo/v1/location/17338", "versionComment": null, "versionLabel": "0.0.0", "versionNumber": 1, "versionUrl": "/repo/v1/location/17338/version/1", "versions": "/repo/v1/location/17338/version" }

 

Create New Version

To create a new version of a location, we set the version comment and label. We also want to set a new path for this version:

Request

curl -i -H sessionToken:YourSessionToken -H ETag:0 -H Accept:application/json -H Content-Type:application/json -X PUT -d '{ "contentType": "application/zip", "etag": "0", "id": "17338", "md5sum": "b513a23fc54b7b0d65312e1a900af5a6", "name": "17338", "parentId": "17337", "path": "https://s3.amazonaws.com/stagingdata.sagebase.org/17338/0.0.2/mskcc_prostate_cancer.phenotype.zip?Expires=1317918889&AWSAccessKeyId=AKIAJQBSYCAUPIYF5WTA&Signature=2vTczuWgJ88Z0tiau1%2BPse4L2NA%3D", "type": "awss3", "uri": "/repo/v1/location/17338", "versionComment": "The second version of this location.", "versionLabel": "0.0.2" }' https://repo-staging.sagebase.org/repo/v1/location/17338/version

Response

HTTP/1.1 200 OK Content-Type: application/json Date: Wed, 05 Oct 2011 16:34:49 GMT ETag: 1 Server: Apache-Coyote/1.1 transfer-encoding: chunked Connection: keep-alive { "accessControlList": "/repo/v1/location/17338/acl", "annotations": "/repo/v1/location/17338/annotations", "contentType": "application/zip", "creationDate": 1317832487819, "etag": "1", "id": "17338", "md5sum": "b513a23fc54b7b0d65312e1a900af5a6", "name": "17338", "parentId": "17337", "path": "https://s3.amazonaws.com/stagingdata.sagebase.org/17338/0.0.2/mskcc_prostate_cancer.phenotype.zip?Expires=1317918889&AWSAccessKeyId=AKIAJQBSYCAUPIYF5WTA&Signature=o9gfXP8rb35RRxrNSrjaW0EpBGM%3D", "type": "awss3", "uri": "/repo/v1/location/17338", "versionComment": "The second version of this location.", "versionLabel": "0.0.2", "versionNumber": 2, "versionUrl": "/repo/v1/location/17338/version/2", "versions": "/repo/v1/location/17338/version" }

 

List Versions

List all of the version of this location. The current version will be the first in the list:

Request

curl -i -H sessionToken:YourSessionToken -H Accept:application/json 'https://repo-staging.sagebase.org/repo/v1/location/17338/version'

Response

HTTP/1.1 200 OK Content-Type: application/json Date: Wed, 05 Oct 2011 16:34:49 GMT Server: Apache-Coyote/1.1 transfer-encoding: chunked Connection: keep-alive { "paging": {}, "results": [ { "id": "17338", "modifiedOn": "2012-09-13T05:12:26.121Z", "modifiedByPrincipalId": "John Hill", "versionComment": "The second version of this location.", "versionLabel": "0.0.2", "versionNumber": 2 }, { "id": "17338", "modifiedOn": "2012-10-13T06:12:16.001Z", "modifiedByPrincipalId": "John Hill", "versionComment": null, "versionLabel": "0.0.0", "versionNumber": 1 } ], "totalNumberOfResults": 2 }

 

Get a Previous Version

To get a previous version we must provide the version number we would like to fetch:

Request

curl -i -H sessionToken:YourSessionToken -H Accept:application/json 'https://repo-staging.sagebase.org/repo/v1/location/17338/version/1'

Response

HTTP/1.1 200 OK Content-Type: application/json Date: Wed, 05 Oct 2011 16:34:51 GMT ETag: 1 Server: Apache-Coyote/1.1 Content-Length: 675 Connection: keep-alive { "accessControlList": "/repo/v1/location/17338/acl", "annotations": "/repo/v1/location/17338/annotations", "contentType": "application/zip", "creationDate": 1317832487819, "etag": "1", "id": "17338", "md5sum": "b513a23fc54b7b0d65312e1a900af5a6", "name": "17338", "parentId": "17337", "path": "https://s3.amazonaws.com/stagingdata.sagebase.org/17338/0.0.0/mskcc_prostate_cancer.phenotype.zip?Expires=1317918891&AWSAccessKeyId=AKIAJQBSYCAUPIYF5WTA&Signature=xAjgB1Bffb9URkleySoO%2FMZ6pB4%3D", "type": "awss3", "uri": "/repo/v1/location/17338", "versionComment": null, "versionLabel": "0.0.0", "versionNumber": 1, "versionUrl": "/repo/v1/location/17338/version/1", "versions": "/repo/v1/location/17338/version" }

 

Get Annotations of a Previous Version

To get the annotations of a previous version we must provide the version number we would like to fetch:

Request

curl -i -H sessionToken:YourSessionToken -H Accept:application/json 'https://repo-staging.sagebase.org/repo/v1/location/17338/version/1/annotations'

Response

HTTP/1.1 200 OK Content-Type: application/json Date: Wed, 05 Oct 2011 16:34:51 GMT ETag: 1 Server: Apache-Coyote/1.1 Content-Length: 217 Connection: keep-alive { "blobAnnotations": {}, "creationDate": 1317832487819, "dateAnnotations": {}, "doubleAnnotations": {}, "etag": "1", "id": "17338", "longAnnotations": {}, "stringAnnotations": {}, "uri": "/repo/v1/location/17338/version/1/annotations" }

 

Delete a Version

To delete a specific versoin we must provide the version number. Note: You cannot delete the last version of an entity.

Request

curl -i -H sessionToken:YourSessionToken -H Accept:application/json -X DELETE https://repo-staging.sagebase.org/repo/v1/location/17338/version/1

Response

HTTP/1.1 204 No Content Content-length: 0 Content-Type: text/plain; charset=UTF-8 Date: Wed, 05 Oct 2011 16:34:51 GMT Server: Apache-Coyote/1.1 Connection: keep-alive

Promote a Version

To promote a specific version we must provide the version number.  Note: you can promote the current version of an entity, but it is a no-op

Request

curl -i -H sessionToken:YourSessionToken -H Accept:application/json -X DELETE https://repo-staging.sagebase.org/repo/v1/location/17338/promoteVersion/1

Response

TODO!!!!

Finally List Versions Again

List all of the version of this location. Since we deleted the first version, only the second remains:

Request

curl -i -H sessionToken:YourSessionToken -H Accept:application/json 'https://repo-staging.sagebase.org/repo/v1/location/17338/version'

Response

HTTP/1.1 200 OK Content-Type: application/json Date: Wed, 05 Oct 2011 16:34:51 GMT Server: Apache-Coyote/1.1 transfer-encoding: chunked Connection: keep-alive { "paging": {}, "results": [{ "id": "17338", "modifiedOn": "2012-09-13T05:12:26.121Z", "modifiedByPrincipalId": "John Hill", "versionComment": "The second version of this location.", "versionLabel": "0.0.2", "versionNumber": 2 }], "totalNumberOfResults": 1 }

 

Delete a Project