Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Project Title:

DSpace REST API

Student:

Bojan Suzic, University of Technology Graz

Mentors:

Aaron Zeckoski, Mark Diggory

Contacting author:

bojan AT student . tugraz DOT at .suzic AT gmail _DOT _com - using subject line DSpace

SCM Location for Project:

http://scm.dspace.org/svn/repo/modules/rest

...


In the following sections main activities are elaborated in detail.

REST API

...

Changes in comparison to existing support are marked with red color. Please note that changes may appear as:

...

Endpoints

In the following section listed are supported endpoints on the application level. The items market with dot (in C column) are in phase of implementation, while other items are considered already working. 

Please note that additional tests should be made in order to ensure proper stability of the whole application.

The sorting of the fields / output results is currently partially supported. This part of the application is implemented independently of the endpoints and will be worked on after the most of endpoints are completed.

...

Note
titleNaming convention for endpoints

DSpace 1.x and 2.x are treating the resources on different way. 2.x is more generalized, suggesting the use of RDF-like interrelation notations.

Repository browsing

Earlier Implementation Description - GSoC09

...

C

Verb

URL

Description

Mandatory parameters

Optional parameters

Sorting fields

Response Data

Formats

Response codes

 

GET

/communities

Returns a list of all communities on the system or return just top level communities.

-

topLevelOnly=true
idOnly=false

id 
name
countitems

The list of communities containing respective fields .

Response code details:
204 - if there are no communities on the system

json
xml

200, 204, 400, 500

 

GET

/communities/{id}

Return detailed information about id community.

id

idOnly=false

-

Fields describing community.

json
xml

200, 400, 404, 500

 

GET

/communities/{id}/{element}

Return a particular data field found in the community id

Anchor
com_elements
com_elements
Fields supported (for element):
id - entity identifier, internal to the system
name - entity name
countItems - number of items under community
handle - handle of the community (unique persistent resource identifier)
type - entity type (object type in the system)
collections - collections contained in the community, ordered by id
canedit - states user persmission on the community (editing)
anchestor - anchestors of the community
children - subcommunities, ordered by id
administrators - group administrators, ordered by id
recent - recent items in the community
shortDescription - short description
copyrightText - copyright text
sidebarText - sidebar text
introductoryText - introductory text


id

idOnly=false  
immediateOnly=true

id
name
countitems

Respective field info 

json
xml

200, 204, 400, 500

 

GET

/communities/{id}/logo

Return a community logo

id

-

-

Contains community logo (bitstream)

binary

200, 400

 

GET

/collections

Return a list of all collections in the system.

-

idOnly=false
isAuthorized=false

id 
name 
countitems

The list of the collections containing respective fields.

Response code details: 
204 - if there are no communities on the system

json
xml

200, 204, 400, 500

 

GET

/collections/{id}

Return detailed information about id collection

id

idOnly=false

id
name
countitems

Fields of the collection entity.

json
xml

200, 204, 400, 500

 

GET

/collections/{id}/{element}

Return a particular data field found in the collection id.

Anchor
col_elements
col_elements
Fields supported (for element):
id - entity identifier, internal to the system
name - collection name 
licence - collection licence
items - items contained in collection
handle - handle of the collection (unique persistent resource identifier)
canedit - states user permission on the collection (edit)
communities - communities collection is a part of
countItems - number of the items in the collection
type - entity type (object type in the system)
shortDescription - short description of the collection
introText - introductory text for the collection
copyrightText - copyright text for the collection
sidebarText - sidebar text for the collection
provenance - provenance

id

idOnly=false
immediateOnly=true

id 
name
countitems

Respective field info

json
xml

200, 204, 400, 500

 

GET

/items

Return a list of the items in the system

-

-

-

The list of the items containing related fields .

Response code details: 
204 - if there are no communities on the system

 

 

 

GET

/items/{id}

Return detailed information about an item.

id

-

id 
name 
lastmodified
submitter

Fields of the item entity.

json 
xml

200, 204, 400, 500

 

GET

/items/{id}/{element}

Return a particular data field fould in the item id

Anchor
ite_elements
ite_elements
Fields supported (for element):
metadata - item metadata 
submitter - submitter group
isArchived - archival status of the item
isWithdrawn - states if the item is withdrawn
owningCollection - owning collection of the item
lastModified - last modified time
collections - collections the item appears in
communities - communities the item appears is
name - name of the item
bitstreams - bitstreams related to the  item
handle - item handle (unique identified)
canedit - states can user edit the item
id - item id 
type - element type
bundles - bundles related to the item

id, element

-

-

Respective field info

json
xml

200, 204, 400, 500

 

GET

/bitstream/{id}

Return bitstream object - usually the library item file.

id

-

-

id - id of bitstream 
name - name of the bitstream 
bundles - bundles the related bitstream appears in 
checksum - checksum of bitstream 
checksumAlgorithm - checksum algorithm used 
description - bitstream description 
formatDescription - format description of bitstream 
handle - bitstream handle 
mimeType - mime type of bitstream 
sequenceId - sequence id  
size - bitstream size in bytes 
source - bitstream source, local 
storeNumber - store number 
type - object type 
userFormatDescription - description of user format

json, xml

200, 400, 401, 403, 404, 500

 

GET

/bitstream/{id}/receive

Return bitstream

id

-

-

Return bitstream

binary

200, 400, 401, 403, 404, 500

...

Parameter

Description

Anchor
toplevelonly
toplevelonly
topLevelOnly

returns only top level communities

Anchor
idonly
idonly
idOnly

if true return only the identifiers for the record

Anchor
immediateonly
immediateonly
immediateOnly

return only direct parent community

Anchor
isauthorized
isauthorized
isAuthorized

return only collections user has permission to work on

Anchor
inarchive
inarchive
inArchive

return archived items for respective collection



Sorting fields:
Info
titleNot completed!

The sorting of the fields / output results is currently partially supported. This part of the application is implemented independently of the endpoints and will be worked on after the most of endpoints are completed.

Parameter

Description

Ordering supported

Anchor
sort_id
sort_id
id

sort results by entity id

asc | ascending
desc | descending

Anchor
sort_name
sort_name
name

sort results by entity name

asc | ascending 
desc | descending

Anchor
sort_countitems
sort_countitems
countitems

sort results by number of items contained

asc | ascending 
desc | descending

Anchor
sort_lastmodified
sort_lastmodified
lastmodified

sort results by date of last item modification

asc | ascending 
desc | descending

Anchor
sort_submittername
sort_submittername
submitterName

sort results by submitter name

asc | ascending 
desc | descending

Anchor
sort_submitterid
sort_submitterid
submitterId

sort results by submitter id

asc | ascending 
desc | descending

...

C

Verb

URL

Description

Mandatory parameters

Optional parameters

Response Data

Formats

Response codes

 

POST

/communities

Action to be done under community id, adding new content or values.

Supported actions:
createAdministrators
createCollection
createSubcommunity

id, action



-
name
name

-

Id of newly created entity, depending on the action selected:
id of group of administrators
id of collection
id of subcommunity

json 
xml

200, 400, 401, 403, 500

 

PUT

/communities/{id}/{element}

Update the field element of the community id.

Supported fields:
name - change name
shortDescription - change short description
copyrightText - change copyright text
sidebarText - change sidebar text
introductoryText - change introductory text
collections - add existing collection
children - add existing subcommunity

id


value
value
value
value
value
cid
cid

-

Response code

 

200, 400, 401, 403, 500

 

PUT

/communities/{id}/logo

Set the logo for community id

id

-

Response code

binary

200, 400, 401, 403, 500


DELETE

/communities/{id}

Delete community from the system

id

-

Response code

json
xml

200, 400, 401, 403, 500


DELETE

/communities/{id}/{element}/{eid}

Remove attribute/value eid of element element from the community id.

Suported elements:
collections
children
administrators

id, eid



cid
cid
-

-

Response code

json
xml

 



POST

/collections

Action to be done under collection id, adding new content or values.

Supported actions:
createAdministrators
createSubmitters
createTemplateItem
createWorkflowGroup

id, action

 

-
-
-
step

-

Id ow newly created element

json
xml

200, 400, 401, 403, 500



PUT

/collections/{id}/{element}

Update field element of the collection id.

Supported elements:
shortDescription - short description
introText - introductory text
copyrightText - copyright text
sidebarText - sidebar text
provenance - provenance
licence - collection licence
name - collection name

id 


value
value
value
value
value
value
value

-

Response code

json
xml

200, 400, 401, 403, 500


DELETE

/collections/{id}

Delete collection from the system

-

-

Response code

json
xml

200, 400, 401, 403, 500

 

DELETE

/collections/{id}/{element}/{cid}

Remove attribute/value cid from collection id
Supported attributes:
administrators
item
submitters
templateItem

id, cid

-

Response code

json
xml

 

 

PUT

/collections/{id}/logo

Set the logo for collection id

id

 

Response code

binary

 

 

 

 

 

 

 

 

 

 

 

...

Content searching

Info
titleNot completed!

This is to be extended


C

Verb

URL

Description

Mandatory parameters

Optional parameters

Sorting fields

Response Data

Formats

Response codes

 

GET

/search

Return a list of all objects found by searching criteria.
Notice: community and collection are mutually exclusive options.

-

TBD modifiers{{query=query}}&(community=id or
collection={{id}}
idOnly=false

id
name
lastmodified
submitter

Item info with basic metadata for the search results. Additionally return only
identifiers when idOnly=true is used.

json
xml

200, 204, 400, 500

 

GET

/harvest

Return a list of all objects that have been created, modified or withdrawn within specified time range.

-

startdate
{enddate}}
community
collection
idOnly=false
withdrawn=false
Notice: community and collection are mutually exclusive options

-

Contains item info including id, name, handle, metadata, bitstreams according to
the defined requirements. Additionally when idOnly=true only identifiers of
results are returned. If the date is in incompatible format, error 400 is returned.

json
xml

200, 204, 400, 500

Item manipulation

Info
titleNot completed!

To be rewritten and moved to repository manipulation

C

Verb

URL

Description

Mandatory parameters

Optional parameters

Response Data

Formats

Response codes

POST

/items/{id}/action

Change parameters of item id

id

createBundle
createSingleBitstream
removeLicenses
removeDspaceLicense
licenseGranted

Response code

json 
xml

200, 400, 401, 403, 500

 

PUT

/items/{id}

Change parameters of an item id

-

isArchived
isWithdrawn
owningCollection
submitter
owningCollection

 

 

 

 

PUT

/items/{id}/bundles/

Add an existing bundle bid to item id

id
bid

 

 

 

 

 

DELETE

/items/{id}/bundles/

Remove bundle bid from item id

id
bid

 

 

 

 

 

 

 

Set archival status of an item

id

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PUT

/items/{id}/metadata

Add a single metadata field

id 
element
value
schema
qualifier
lang

 

 

 

 

 

DELETE

/items/{id}metadata

Remove a single metadata field

schema
element
qualifier
lang

 

 

 

 

 

DELETE

/items/{id}/metadata

 

 

 

 

 

 

POST

/communities

Add community to the system

name

logo 
parent 
other metadata

Id of newly created community

json 
xml

200, 400, 401, 403, 500

• 

DELETE

/communities/{id}{}

Delete community from the system

id

-

Response code

json 
xml

200, 400, 401, 403, 500

• 

PUT

/collections/{id}{}

Change description of id collection

id

 

Response code

json 
xml

200, 400, 401, 403, 500

• 

POST

/collections

Add collection to the system

name 
communityId

 

Id of newly created collection

json 
xml

200, 400, 401, 403, 500

• 

DELETE

/collections/{id}{}

Delete collection from the system

-

-

Response code

json 
xml

200, 400, 401, 403, 500

...

C

Verb

URL

Description

Mandatory parameters

Optional parameters

Sorting fields

Response Data

Formats

Response codes

 

GET

/stats

Return general statistics.

-

-

-

Cummulative list of statistics data for the system currently available.

json
xml

200, 400, 500

Administrative tasks

Workflow related tasks

...

Relationships interface

Info
titleExperimental feature

This is considered as a experimental feature in the phase of being considered for compability with future versions of DSpace. Consider not important section; the status of the feature for upcoming release yet to be determined.

C

Verb

URL

Description

Mandatory parameters

Optional parameters

Sorting fields

Response Data

Formats

Response codes


GET

/resource/{handle}/relations

Return entities according to relation and parameters specified

handle 
property

rtype
rfield

-

ontains entities selected and sorted in conformance to request parameters. For more details see description of rtype andrfield.

json 
xml

200, 204, 400, 401, 403, 500

...

Comment #2: Semantic mapping presented in this case should be probably hardcoded for 1.x branch, but on abstraction level which enables easy replacement with some auto-discovery method prepared for 2.x and eventually backported to 1.x. This way we would be able to call something similar to /communities/id or communities/id/capabilities in order to get supported mappings (amongst other data).

Suggesting new options:

Instead of changing wiki contents visitors can enter their suggestions as a comments.

1) Kevin S. Clarke and Tim Donhue suggested adding of the new feature related to HTTP Basic Auth. Ok, I will investigate how it could be done and included here. More info comming.

Integration in the system

...