Note | ||
---|---|---|
| ||
This is the page describing GSoC 2010 project ended officially in August 2010. The REST API project is continued after official GSoC date. The new address of wiki page is located at https://wiki.duraspace.org/display/DSPACE/REST+API. Please bookmark this page as all further development will be described there. Current GSoC page stays here for historical/documentation purposes. |
DSpace REST API - Bojan Suzic
Excerpt |
---|
Integration, testing, documentation and further development of DSpace REST services for 1.x and 2.0 versions. - Bojan Suzic |
Panel | ||||||||
---|---|---|---|---|---|---|---|---|
|
Details
Project Title: | DSpace REST API |
Student: | Bojan Suzic, University of Technology Graz |
Mentors: | Aaron Zeckoski, Mark Diggory |
Contacting author: | bojan.suzic AT gmail _DOT _com |
DSpace REST API - Bojan Suzic
Excerpt |
---|
Integration, testing, documentation and further development of DSpace REST services for 1.x and 2.0 versions. - Bojan Suzic |
Info | ||
---|---|---|
| ||
This page is not completed. The work on specifications is ongoing. Everyone is welcome to comment or contribute! |
Panel | ||||||||
---|---|---|---|---|---|---|---|---|
|
Details
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 - using subject line DSpace |
SCM Location for Project: |
...
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 marked 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 | ||
---|---|---|
| ||
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 | ||
---|---|---|---|---|---|---|---|---|---|---|
| | | is Returns a description of what is happening in this current field eg it describes method etclist of all communities on the system or return just top level communities. | - | Contains... | The list of communities containing DSPACE:respective fields . | |
...
|
...
Name and description | Value and notes |
---|---|
Base URI: | |
Description: | Returns a list of all communities on the system or return just top level communities. |
HTTP method: | |
Optional parameters: | |
Sorting fields supported: | |
Response formats: | |
Status codes | 200: OK |
Response details | By default contains item count, identifier, handle and name and other |
Name and description | Value and notes |
---|---|
Base URI: | /communities/{id}/parents?idOnly=false&immediateOnly=true |
Description: | Returns a list of all parent communities of the |
HTTP method: | |
Optional parameters: | idOnly=false: if true return only the identifiers for the record, by default |
Sorting fields supported: | |
Response formats: | |
Status codes | 200: OK |
Response details | Contains item count, identifiers, handle and name or 204 if id is already |
Name and description | Value and notes |
---|---|
Base URI: | /communities/ |
Description: | Returns a list of immediate sub-communities (children) of the |
HTTP method: | |
Optional parameters: | idOnly=false: if true return only the identifiers for the record, by default |
Sorting fields supported: | |
Response formats: | |
Status codes | 200: OK |
Response details | Contains item count, identifiers, handle and name or 204 if none. |
Name and description | Value and notes |
---|---|
Base URI: | /communities/ |
Description: | Returns a list of collections in the |
HTTP method: | |
Optional parameters: | idOnly=false: if true return only the identifiers for the record, by default |
Sorting fields supported: | |
Response formats: | |
Status codes | 200: OK |
Response details | Contains item count, identifiers, name, archival status, last modification and |
Name and description | Value and notes |
---|---|
Base URI: | /communities/ |
Description: | Returns a list of recent submissions to a community |
HTTP method: | |
Optional parameters: | idOnly=false: if true return only the identifiers for the record, by default |
Sorting fields supported: | |
Response formats: | |
Status codes | 200: OK |
Response details | Contains complete items from recent submissions in community. |
Name and description | Value and notes |
---|---|
Base URI: | /collections?idOnly=false |
Description: | Returns a list of all collections in the system |
HTTP method: | |
Optional parameters: | idOnly=false: if true return only the identifiers for the record, by |
Sorting fields supported: | |
Response formats: | |
Status codes | 200: OK |
Response details | Contains item count, identifiers, name and handle of collections, or 204 if |
Name and description | Value and notes |
---|---|
Base URI: | /collections/ |
Description: | Returns a list of all communities a collection with |
HTTP method: | |
Optional parameters: | idOnly=false: if true return only the identifiers for the record, by |
Sorting fields supported: | |
Response formats: | |
Status codes | 200: OK |
Response details | Contains item count, identifier, name and handle of collections, or 204 if |
Name and description | Value and notes |
---|---|
Base URI: | /collections/ |
Description: | Returns a list of all items from the collection |
HTTP method: | |
Optional parameters: | idOnly=false: if true, return only identifiers of result records |
Sorting fields supported: | |
Response formats: | |
Status codes | 200: OK |
Response details | Contains full information info including name, submitter, collections related |
Content searching
Name and description | Value and notes |
---|---|
Base URI: | /search?query= |
Description: | Returns a list of all objects found by searching criteria |
HTTP method: | |
Optional parameters: | |
Sorting fields supported: | |
Sorting/ordering modifiers: | |
Response formats: | |
Status codes | 200: OK |
Response details | Item info with basic metadata for the search results. Additionally return only |
Name and description | Value and notes |
---|---|
Base URI: | /harvest?startdate= |
Description: | Returns a list of all objects that have been created, modified or withdrawn within specified time range |
HTTP method: | |
Optional parameters: | |
Sorting/ordering modifiers: | |
Response formats: | |
Status codes | 200: OK |
Response details | Contains item info including id, name, handle, metadata, bitstreams according to |
Item status and retrieval
Name and description | Value and notes |
---|---|
Base URI: | |
Description: | Returns detailed information about an item |
HTTP method: | |
Required parameters: | { |
Sorting fields supported: | |
Response formats: | |
Status codes | 200: OK |
Response details | Contains an information about an item including resource name, metadata, owning collection, collections stored in, communities stored in, bundle ids, last modified date, archival/withdrawn status and submitter of an item |
Name and description | Value and notes |
---|---|
Base URI: | |
Description: | Returns status of user permissions on this item |
HTTP method: | |
Required parameters: | { |
Response formats: | |
Status codes | 200: OK |
Response details | Boolean variable, stating can user edit the listed item |
Name and description | Value and notes |
---|---|
Base URI: | /items/ |
Description: | Returns communities this item is part of |
HTTP method: | |
Required parameters: | |
Sorting fields supported: | |
Response formats: | |
Status codes | 200: OK |
Response details | Communities listed |
Name and description | Value and notes |
---|---|
Base URI: | /items/ |
Description: | Returns collections this item is part of |
HTTP method: | |
Required parameters: | |
Sorting fields supported: | |
Response formats: | |
Status codes | 200: OK |
Response details | Collections listed |
Name and description | Value and notes |
---|---|
Base URI: | |
Description: | Returns bitstream object - usually the library item file |
HTTP method: | |
Required parameters: | { |
Response formats: | |
Status codes | 200: OK |
Response details | Includes all information about referenced bitstream, including file name, licence, corresponding ittem etc. It is possible only to get information for particular bitstreams. When the request is made without parameters/references, the blank list is presented (there is no list of all bitstreams in the system available). |
Name and description | Value and notes |
---|---|
Base URI: | |
Description: | Returns checksum of bitstream |
HTTP method: | |
Required parameters: | { |
Response formats: | |
Status codes | 200: OK |
Response details | Receive full bitstream |
User oriented functions
Name and description | Value and notes |
---|---|
Base URI: | /users?query= |
Description: | Returns list containing id, name and email of persons (optionally matching a query) |
HTTP method: | |
Optional parameters: | |
Sorting fields supported: | |
Response formats: | |
Status codes | 200: OK |
Response details | List with information on particular user. Additionaly only identifiers are sent if idOnly is true. |
Statistical info
Name and description | Value and notes |
---|---|
Base URI: | |
Description: | Returns general statistics |
HTTP method: | |
Response formats: | |
Status codes | 200: OK |
Response details | Returns cummulative list of statistics data for the system currently available |
Items ingestion
Administrative tasks
Workflow related tasks
Visitors' suggestions or wishes
...
Integration in the system
...
Documentation tasks
...
| | Return detailed information about | | | - | DSPACE:Fields describing community. | | ||||||||
| | | Return a particular data field found in the community
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 | | Respective field info | | |||||||||
| | | Return a community logo | | - | - | Contains community logo (bitstream) | | |||||||
| | | Return a list of all collections in the system. | - | The list of the collections containing DSPACE:respective fields. | | |||||||||
| | | Return detailed information about | | DSPACE:Fields of the collection entity. | | |||||||||
| | | Return a particular data field found in the collection
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 | | Respective field info | | |||||||||
| | | Return a list of the items in the system | - | - | - | The list of the items containing DSPACE:related fields . |
|
| ||||||
| | | Return detailed information about an item. | | - | | DSPACE:Fields of the item entity. | | 200, 204, 400, 500 | ||||||
| | | Return a particular data field fould in the item
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 | | - | - | Respective field info | | 200, 204, 400, 500 | ||||||
| | | Return bitstream object - usually the library item file. | | - | - | DSPACE:Fields of the bitstream entity. | | 200, 400, 401, 403, 404, 500 | ||||||
| | | Return a particular data field found in bitstream
Supported fields (for element ): mimeType - mime type of file bundles - bundles the bitstream is a part of checkSum - checksum of the file checkSumAlgorithm - checksum algorithm used description - bitstream description formatDescription - file format description sequenceId - sequence id of the file size - size of the file source - source (typically filename with path information) storeNumber - asset store number where the bitstream is stored userFormatDescription - user's format description name - bitstream name handle - unique id of the bitstream id - internal id of the bitstream type - type of the entity (referring to bitstream) | | - | - | Respective field info | | 200, 400, 401, 403, 404, 500 | ||||||
| | | Return bitstream | | - | - | Return bitstream | | 200, 400, 401, 403, 404, 500 | ||||||
| | | Return a list of the groups in the system | - | - | - | The list of the groups containing related DSPACE:fields . | | 200, 204, 400, 500 | ||||||
| | | Return a group object | | - | - | DSPACE:Fields of the group entity. | | 200, 204, 400, 500 | ||||||
| | | Return a particular data field found in the group entity
Supported fields (for element ): handle - unique id (external) id - internal id of the gruop isEmpty - is the group empty members - group members (as users) memberGroups - group members (as groups) name - group name type - entity type (referring to group) | | - | - | Respective field info | | 200, 204, 400, 500 | ||||||
| | | Return a list of the users in the system | - | - | - | The list of the users containing related DSPACE:fields . | | 200,204,400,500 | ||||||
| | | Return a user info | | - | - | DSPACE:Fields of the user entity. | | 200,204,400,500 | ||||||
| | | Return a particular data field found in the user
Supported fields (for element ): email - user's email firstName - first name fullName - full name handle - handle (unique, external) id - internal id of the user language - preferred language lastName - last name name - name netId - network id requireCertificate - requires certificate to login selfRegistered - is user self registered type - type of the object | | - | - | Respective field info | | 200,204,400,500 |
Note: modifier idOnly
is referred only to first layer of the results. For all other layers (e.g. nested results) only ids are returned in some cases, due to possible loops. Example: for community containing collections, on second level the response contains only ids for some elements where multiple loops may be created (community->has_collection->has_community....). Other data is modified according to idOnly
flag.
Optional parameters
Parameter | Description | ||||||
---|---|---|---|---|---|---|---|
topLevelOnly | returns only top level communities | ||||||
idOnly | if true return only the identifiers for the record | ||||||
immediateOnly | return only direct parent community | ||||||
isAuthorized | return only collections user has permission to work on | ||||||
inArchive | return archived items for respective collection |
Sorting fields:
Info | ||
---|---|---|
| ||
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 | ||||||
---|---|---|---|---|---|---|---|---|
id | sort results by entity id | | ||||||
name | sort results by entity name | | ||||||
countitems | sort results by number of items contained | | ||||||
lastmodified | sort results by date of last item modification | | ||||||
submitterName | sort results by submitter name | | ||||||
submitterId | sort results by submitter id | |
Controlling results
Parameter | Description | Default | Example |
---|---|---|---|
| position of the first entity to return | 0 (first) | |
| page of data to display | 0 (first) | |
| number of results to show on each page | 0 (all) | |
| maximum number of entities to return | 0 (all) | |
|
| the sort order to return entities in | |
Anchor | ||||
---|---|---|---|---|
|
Response codes
Code | Description |
---|---|
200 | OK |
201 | Created |
204 | No content |
400 | Bad request |
401 | Unauthorized |
403 | Forbidden |
404 | Not found |
405 | Method not allowed |
500 | Internal server error |
503 | Service unavailable |
Authentication/Authorization
Currently only standard authentication is supported. The authentication data is provided in the request or header body.
Example:
/rest/communities.json?user=user@email.com&pass=userpassword
The same elements user
and pass
are used for header based authentication.
Authorization is done on underlying api level; in the case of error the proper message and error code are returned to the user.
Repository manipulation
C | Verb | URL | Description | Mandatory parameters | Optional parameters | Response Data | Formats | Response codes |
---|---|---|---|---|---|---|---|---|
| | | Action to be done under community | | - | | | 200, 400, 401, 403, 500 |
| | /communities/{id}/{element} | Update the field | | - | Response code |
| 200, 400, 401, 403, 500 |
| | | Set the logo for community | | - | Response code | binary | 200, 400, 401, 403, 500 |
• | | | Delete community from the system | | - | Response code | | 200, 400, 401, 403, 500 |
• | | | Remove attribute/value | | - | Response code | |
|
| | Action to be done under collection | | - | Id ow newly created element | | 200, 400, 401, 403, 500 | |
| | Update field | | - | Response code | | 200, 400, 401, 403, 500 | |
• | | | Delete collection from the system | - | - | Response code | | 200, 400, 401, 403, 500 |
• | | | Remove attribute/value | | | Response code | | 200,400,401,403,500 |
• | | | Set the logo for collection | |
| Response code | binary | 200,400,401,403,500 |
• | | | Action to be done under item | |
| Id of newly created element | | 200,400,401,403,500 |
• | | | Update field | | - | Response code | | 200,400,401,403,500 |
• | | | Delete item from the system | | - | Response code | | 200,400,401,403,500 |
• | | | Delete element/attribute | | - | Response code | | 200,400,401,403,500 |
Content searching
C | Verb | URL | Description | Mandatory parameters | Optional parameters | Sorting fields | Response Data | Formats | Response codes |
---|---|---|---|---|---|---|---|---|---|
| | | Return a list of all objects found by searching criteria. | - | modifiers{{query= | | Item info with basic metadata for the search results. Additionally return only | | 200, 204, 400, 500 |
| | | Return a list of all objects that have been created, modified or withdrawn within specified time range. | - | | - | Contains item info including id, name, handle, metadata, bitstreams according to | | 200, 204, 400, 500 |
Statistical info
C | Verb | URL | Description | Mandatory parameters | Optional parameters | Sorting fields | Response Data | Formats | Response codes |
---|---|---|---|---|---|---|---|---|---|
| | | Return general statistics. | - | - | - | Cummulative list of statistics data for the system currently available. | | 200, 400, 500 |
Relationships interface
Info | ||
---|---|---|
| ||
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 | | | - | ontains entities selected and sorted in conformance to request parameters. For more details see description of | |
Mandatory parameters
Parameter | Description | Values | Example | ||||||
---|---|---|---|---|---|---|---|---|---|
property | Return entities satisfying requested property relation | Structural properties | | ||||||
rtype | restriction on type - only entity with specifed type(s) would be returned | | | ||||||
| restriction on fields - return only selected fields; by default all fields are returned | id | rfield=id,name - return only entity id and name in response |
Note: incomplete/orientative properties, for more info check [Vocabularies|http://code.google.com/p/dspace-sandbox/source/browse/#svn/modules/dspace-rdf/tags/dspace-rdf-1.5.1/src/main/java/org/dspace/adapters/rdf/vocabularies].
Visitors' suggestions or wishes
Here the visitors and stakeholders can insert their suggestions or describe the needs for their applications in detail.
Comment: In this case it is not clear how to treat recent
part of endpoint. If we stick to semantic mapping, then it should look like /resource/id/mapping
, but recent
in this case obviously do not represent a mapping, but the property.
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
It is planned to consult two external subjects for cooperation and the assistance during integration process (LMS and national library internal automation process). More information coming soon - awaiting approval of other parties.
Documentation tasks
Although provided software module exposes basic documentation automatically to the end user, in order to make it easier for other developers and users the documentation in the following forms is additionaly to be provided:
- Confluence pages, current location
- integrated documentation in PDF form (manual)
- short slides containing technology overview, advocacy/facts, configuration and usage guideliens and examples
- code will be additionally commented
Example of usage
At the end of the current stage of this project as a bonus task (if time constraints allow) the examples of usage will be provided for several languages, the use-cases will be presented (example of integration in other software, e.g. LMS) and optionally simple client system demonstrating UI customization will be demonstrated (e.g. Flex or JavaFX like).
Information for developers
In this section the main sections of the software will be briefly explained in order to ease update or extension of the components.
The REST API for DSpace uses Aaron Zeckoski's EntityBus and DSpace standard libraries, as dspace-api.
There are two main packages: org.dspace.rest.providers and org.dspace.rest.entities. Providers are responsible for serving content/feeds to the users. They usually prepare entities or particular entity and/or handle update/delete/create functions. The main class there is AbstractBaseProvider, which is extended by other providers.
In the providers, at the constructor level created are mappings between particular endpoints (e.g. /rest/items/1/collections) and related functions in entities (org.dspace.entities.items.getCollections). Thus, for each GET, PUT, POST or DELETE function in the entity provider's constructor defined are such mappings between URL endpoints and functions. After the client makes specific call, the provider prepares answer and in this phase calls mapped function and prepare results for display.
So, if you want to extend currently available endpoints for already present providers and entities, it is necessary to define mapping at provider level and prepare corresponding function at the entity level (based on the template). The system then calls this function and provides necessary arguments for its successfully handling.
If you want to develop a new provider, it is usually necessary to create new provider class in org.dspace.rest.providers and then create related entity in org.dspace.rest.entities. The currently available providers are good example how to do that
- Confluence pages, current location
- integrated documentation in PDF form (manual)
- short slides containing technology overview, advocacy/facts, configuration and usage guideliens and examples
- code will be additionally commented
Example of usage
At the end of the current stage of this project as a bonus task (if time constraints allow) the examples of usage will be provided for several languages, the use-cases will be presented (example of integration in other software, e.g. LMS) and optionally simple client system demonstrating UI customization will be demonstrated (e.g. Flex or JavaFX like).