-
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
- 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/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/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.
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"
}
}
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}.