-
Notifications
You must be signed in to change notification settings - Fork 0
Home
For the purposes of this project, this service contains the following endpoints:
- Search
- Advanced Search
- GetKeys
- GetMetadata
- SetMetadata
- GetParadata
- SetUserReviewParadata
- SetUserCommentParadata
- UploadFile
- DownloadFile
- DeleteFile
- DeleteAll
- GetAllVersions
Download the Riak package relevant to your operating system and architecture. Install according to the instructions.
$ git clone https://github.com/adlnet/Content-Hosting-Service.git
$ cd content-repo
$ pip install virtualenv
$ virtualenv env
$ source env/bin/activate
(env)$ pip install -r requirements.txt
to quit and leave the virtualenv:
(env)$ deactivate
to start riak:
$ sudo riak start
to start the webserver:
(env)$ cd content-repo
(env)$ source env/bin/activate
(env)$ python main.py
to stop riak:
$ sudo riak stop
to stop the webserver:
(env)$^C
This is a very simple API. It exposes several endpoints:
- /CHS/keys/ for checking the keys stored in the database,
- /CHS/search/ that sends and receives JSON documents to conduct a search of the database using one term,
- /CHS/advanced_search/ that sends and receives JSON documents to conduct an advanced, more specific search of the database using three terms,
- /CHS/get_metadata/{id} that sends and receives JSON documents to retrieve a file's metadata, where {id} is the filename,
- /CHS/set_metadata/{id} that sends and receives JSON documents to set a file's metadata, where {id} is the filename,
- /CHS/get_paradata/{id} that sends and receives JSON documents to retrieve a file's paradata, where {id} is the filename,
- /CHS/set_user_review_paradata/{id} that sends and receives JSON documents to set a file's user review oriented paradata, where {id} is the filename,
- /CHS/set_user_comment_paradata/{fid}/{rid} that sends and receives JSON documents to set a file's user comment oriented paradata, where {fid} is the filename and {rid} is the review_id of the related user review for the file {fid},
- /CHS/upload_file for uploading a file, or multiple files to the database,
- /CHS/download_file/{id} for downloading a file from the database, where {id} is the filename,
- /CHS/{id} for deleting a file from the database, where {id} is the filename,
- /CHS/deleteAll/ for deleting all files from the database,
- /CHS/get_all_versions/{id} that sends and receives JSON documents for obtaining a list of versions of a file in the database, where {id} is the filename.
dataProfile = {
'file_location': {
'local_path': None
},
'metadata': {
'author': None,
'title': None,
'description': None,
'upload_date': None,
'last_modified_date': None,
'mime_type': None,
'resource_type': None,
'keywords': None,
'version': None
},
'paradata': {
'user_reviews': [{
'review_id': None,
'user_rating': None,
'user_name': None,
'user_review_title': None,
'user_review': None,
'timestamp': None
}
],
'user_comments': [{
'review_id': None,
'comment_id': None,
'helpful': None,
'user_name': None,
'user_comment': None,
'timestamp': None
}
]
}
}
GET /CHS/keys/
Returns an HTML template with a list of all the keys in the database.
Arguments
None
Returns
200 OK (HTML)
Returns HTML with a list of the keys in the database.
404 Not Found (HTML)
There are no keys. The database is empty.
POST /CHS/search
Use this method to perform a simple search of the database object's metadata. It takes a JSON document with a single search term. (This method is currently stubbed out for testing responses).
Arguments
None
Returns
200 OK (JSON)
Returns JSON with a list of files' metadata that match the search-term.
400 Bad Request (No body)
The request body is not a valid JSON body, or does not contain the required term field.
404 Not Found (no body)
There were no results returned.
Example JSON request:
{
"search": {
"term": "some term"
}
}
POST /CHS/advanced_search
Use this method to perform an advanced search of the database object's metadata. It takes a JSON document with three required search terms (author, keywords, resource_type). (This method is currently stubbed out for testing responses).
Arguments
None
Returns
200 OK (JSON)
A list of metadata matching the search criteria was successfully returned.
400 Bad Request (No body)
The request body is not a valid JSON body, or does not contain the required term fields.
404 Not Found (No body)
There were no results returned.
Example JSON request:
{
"advanced_search": {
"author": "some term",
"keywords": "some term",
"resource_type": "some term"
}
}
GET /CHS/get_metadata/{id}
Use this method to retrieve the metadata JSON document stored with the given {id}.
Arguments
None
Returns
200 OK (JSON)
The metadata was successfully retrieved.
404 Not Found (no body)
There were no files associated with the {id}.
POST /CHS/set_metadata/{id}
This method is for setting or updating the metadata for the file. Currently, the required fields are:
- author
- title
- description
- keywords
- mime_type
- version
Other fields set by/updated by the system:
- upload_date
- last_modified_date
- resource_type
Arguments
None
Returns
200 OK
The metadata was successfully set or updated.
400 Bad Request (no body)
The request body is not a valid JSON body, or does not contain the required field(s).
Example JSON request:
{
"metadata": {
"author": "some author",
"title": "some title",
"description": "some description",
"mime_type": "some mime_type",
"keywords": "some keyword, some keyword",
"version": "some version"
}
}
GET /CHS/get_paradata/{id}
Use this method to retrieve the paradata JSON document stored with the given {id}.
Arguments
None
Returns
200 OK (JSON)
The paradata was successfully retrieved.
404 Not Found (no body)
There were no files associated with the {id}.
Example JSON return:
{
"paradata": {
"user_reviews": [
{
"review_id": "5303de2e-307d-4dac-b86e-498671834d00",
"timestamp": "2014-06-24 13:25:36",
"user_rating": "5.0",
"user_review_title": "review of file content",
"user_review": "this file is awesome",
"user_name": "Alan"
}
],
"user_comments": [
{
"timestamp": "2014-06-24 14:01:31",
"comment_id": "4c84a785-cb48-4d87-a0ad-625fba3244a9",
"helpful": "yes",
"user_name": "Bill",
"review_id": "5303de2e-307d-4dac-b86e-498671834d00",
"user_comment": "this review really helped me"
}
]
}
}
POST /CHS/set_user_review_paradata/{id}
This method takes a POST request with a key (filename) {id} and a JSON document with the user review paradata and is for setting or updating the user review paradata for the file. Currently, the required fields are:
- user rating
- user name
- user review title
- user review
Other fields set by/updated by the system:
- review_id
- timestamp
Arguments
None
Example JSON request:
{
"user_reviews": {
"user_rating": "5.0",
"user_review_title": "review of file content",
"user_review": "this file is awesome",
"user_name": "Alan"
}
}
Returns
200 OK
The user review paradata was successfully set or updated.
400 Bad Request (no body)
The request body is not a valid JSON body, or does not contain the required field(s).
Example JSON return:
{
"paradata": {
"user_reviews": [
{
"review_id": "5303de2e-307d-4dac-b86e-498671834d00",
"timestamp": "2014-06-24 13:25:36",
"user_rating": "5.0",
"user_review_title": "review of file content",
"user_review": "this file is awesome",
"user_name": "Alan"
}
],
"user_comments": [
{
"timestamp": "2014-06-24 14:01:31",
"comment_id": "4c84a785-cb48-4d87-a0ad-625fba3244a9",
"helpful": "yes",
"user_name": "Bill",
"review_id": "5303de2e-307d-4dac-b86e-498671834d00",
"user_comment": "this review really helped me"
}
]
}
}
POST /CHS/set_user_comment_paradata/{fid}/{rid}
This method takes a POST request with key (filename) {fid}, review id {rid} and a JSON document with the user comment paradata and is for setting or updating the user comment paradata for the file. Currently, the required fields are:
- user name
- user comment
- helpful
Other fields set by/updated by the system:
- comment_id
- timestamp
Arguments
None
Example JSON request:
{
"user_comments": {
"helpful": "yes",
"user_name": "Bill",
"user_comment": "this review really helped me"
}
}
Returns
200 OK
The user comment paradata was successfully set or updated.
400 Bad Request (no body)
The request body is not a valid JSON body, or does not contain the required field(s).
Example JSON return:
{
"paradata": {
"user_reviews": [
{
"review_id": "5303de2e-307d-4dac-b86e-498671834d00",
"timestamp": "2014-06-24 13:25:36",
"user_rating": "5.0",
"user_review_title": "review of file content",
"user_review": "this file is awesome",
"user_name": "Alan"
}
],
"user_comments": [
{
"timestamp": "2014-06-24 14:01:31",
"comment_id": "4c84a785-cb48-4d87-a0ad-625fba3244a9",
"helpful": "yes",
"user_name": "Bill",
"review_id": "5303de2e-307d-4dac-b86e-498671834d00",
"user_comment": "this review really helped me"
}
]
}
}
POST /CHS/upload_file
This method allows for one or more files to be selected from a web form for upload. Currently, the accepted file formats are zip, pdf, and xml but it can be setup to accept others. The current design has the uploaded files stored to an uploads folder on the server and the path to the file stored as part of the file's object metadata.
Arguments
None
Returns
200 OK
Successful file upload.
400 Bad Request (no body)
The file being uploaded is not an accepted file format.
409 Conflict (no body)
The file already exists in the database.
GET /CHS/download_file/{id}
This method takes a filename {id} and downloads the file from the database.
Arguments
None
Returns
200 OK
The file {id} is successfully downloaded.
404 Not Found (no body)
There were no files associated with the {id}.
DELETE /CHS/{id}
This method takes a filename {id} and deletes it from the database.
Arguments
None
Returns
200 OK (JSON)
The file with the given {id} was successfully deleted.
404 Not Found (no body)
There were no files associated with the {id}.
GET /CHS/DeleteAll/
This method deletes all entries from the database.
Arguments
None
Returns
200 OK (JSON)
The operation was successfully completed.
GET /CHS/get_all_versions/{id}
Use this method to get a list of all the versions of a file with the given {id} stored in the database. (This method is currently stubbed out for testing responses).
Arguments
None
Returns
200 OK (JSON)
Returns a document with a list of file versions for the file with the given {id}.
404 Not Found (no body)
There were no files associated with the {id}.