You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Next »

Table of Contents

Alternative REST API

In this I will propose an alternative REST api to the one in the Fedora Documentation. It is based around the idea that every conceivable url should be gettable, and probably puttable. There should not be big methods with lots of parameters, but rather a bunch of small ones with very clear purpose. The interface should be usable without any documentation.

General principles

Content

Location

Objects

/objects/

Object presentation

/objects/{pid}

Object properties

/objects/{pid}/properties

Object relations

/objects/{pid}/relations

Object content models

/objects/{pid}/contentmodels

Datastreams

/objects/{pid}/datastreams

Datastream content

/objects/{pid}/datastreams/{dsID}

Datastream properties

/objects/{pid}/datastreams/{dsID}/properties

Datasteram relations

/objects/{pid}/datastreams/{dsID}/relations

Datastream versions

/objects/{pid}/datastreams/{dsID}/versions

Object Methods

/objects/{pid}/methods

Method invocation

/objects/{pid}/methods/{methodName}/from/{sdef}?params

Object-Centric methods

Create new object with given pid

PUT /objects/{pid}

Return: Nothing or pid of the new object

Creates a new, empty object

Create new object with autogenerated pid

POST /objects/

Return: pid of the new object (/objects/demo:newObject2)

Creates a new, empty object

Present Object

GET /objects/{pid}

Return: XML that presents the object....

Undetailed

Purge object

DELETE /objects/{pid}

Get the object properties

GET /objects/{pid}/properties
Return: list of property names (/object/demo:myPid2/properties/label)

Provides a list of property names that can be queried

Get a specific object property

GET /objects/{pid}/properties/{property}
Return: The value

Give the value of the specific property, or 404 if property not found

Example: /objects/demo:myPid2/properties/label

Write a specific property

PUT /objects/{pid}/properties/{property}
Contents: The new value
Return nothing, or 404 if property not found. New properties cannot be created.

Get content models for a object

GET /objects/{pid}/contentmodels
Return: Get the content models of the object (/objects/demo:contentmodel)

Get a list of the content models of this object

Add a content model to this object

PUT /objects/{pid}/contentmodels/{cmpid}
Contents: Nothing

Add cmpid to the list of content model for this object

Get all the relations of an object

GET /objects/{pid}/relations
Return: Return a list of relation names

Get a specific relation from an object

GET /objects/{pid}/relations/{rel-name}
Return: List of pids of objects referred by this relation

Add a relation to an object

PUT /objects/{pid}/relations/{rel-name}/to/{objpid}

Purge a relation to an object

DELETE /objects/{pid}/relations/{rel-name}/to/{objpid}

Add a literal relation

PUT /objects/{pid}/relations/{rel-name}/toLiteral/{value}[/withType/{type}]

Delete a literal relation

PUT /objects/{pid}/relations/{rel-name}/toLiteral/{value}

Datastream-Centric methods

Create a new datastream

PUT /objects/{pid}/datastreams/{dsID}[/withControlGroup/{cg}]
Contents: The initial contents of the datastream, if any

Creates a new datastream in the object with controlgroup X or {cg} if specified. Datastream is either empty or with the initial content

Delete a datastream

DELETE /objects/{pid}/datastreams/{dsID}

Purge the object from the repository

Get Contents of a datastream

GET /objects/{pid}/datastreams/{dsID}

Update an Inline or Managed Datastream

POST /objects/{pid}/datastreams/{dsID}
Contents: The new content of the datastream
TODO (overlaps with create a new datastream...)

Get the properties of a datastream

GET /objects/{pid}/datastreams/{dsID}/properties

Get a specific property

GET /objects/{pid}/datastreams/{dsID}/properties/{prop}
Return: The value

Update a property

PUT /objects/{pid}/datastreams/{dsID}/properties/{prop}
Contents: The new value

examples: versionable, state and so on.

Update an External or Redirect Datastream

Contentlocation is just a property of these datastreams

PUT /objects/{pid}/datastreams/{dsID}/properties/contentLocation
Contents: The URL to the contents of the datastream

Get the relations of the datastream

GET /objects/{pid}/datastreams/{dsID}/relations

The RELS-INT block "about" this datastream

Add a relation to the datastream

PUT /objects/{pid}/datastreams/{dsID}/relations/{rel-name}/to/{objPid}

Purge a relation from the datastream

DELETE /objects/{pid}/datastreams/{dsID}/relations/{rel-name}/to/{objPid}

Add a literal relation to the datastream

PUT /objects/{pid}/datastreams/{dsID}/relations/{rel-name}/toLiteral/{value}[/withType/{type}]

Purge a literal relation from a datastream

DELETE /objects/{pid}/datastreams/{dsID}/relations/{rel-name}/toLiteral/{value}

Get version timestamps of a datastream

The idea is that the old version of the datastream should support the same getter methods as the current version

GET /objects/{pid}/datastreams/{dsID}/versions

Get the contents of a specific version of a datastream

GET /objects/{pid}/datastreams/{dsID}/versions/{timestamp}

Get the versioned properties of a specific version

GET /objects/{pid}/datastreams/{dsID}/versions/{timestamp}/properties

Get a specific versioned property of a specific version

GET /objects/{pid}/datastreams/{dsID}/versions/{timestamp}/properties/{propertyname}

Get the relations of a specific version

GET /objects/{pid}/datastreams/{dsID}/versions/{timestamp}/relations/

Method-Centric methods

List the methods on an object

GET /objects/{pid}/methods
Return: a list of objects

Invoke a method on an object

GET/POST /objects/{pid}/methods/{methodName}/from/{sdef}?params

#trackbackRdf ($trackbackUtils.getContentIdentifier($page) $page.title $trackbackUtils.getPingUrl($page))
  • No labels