Skip to content
aworkman edited this page May 28, 2014 · 13 revisions

Content Hosting Service Documentation

For the purposes of this project, this service contains the following endpoints:

  • Search
  • Advanced Search
  • GetKeys
  • GetMetadata
  • SetMetadata
  • UploadFile
  • DownloadFile
  • DeleteFile
  • GetAllVersions

Installation

Install Riak

Riak 2.0.0pre20 Download page

Download the Riak package relevant to your operating system and architecture. Install according to the instructions.

Install the Prototype

$ 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

Running

to start riak:

$ sudo riak start

to start the webserver:

(env)$ cd content-repo
(env)$ source env/bin/activate
(env)$ python main.py

Stopping

to stop riak:

$ sudo riak stop

to stop the webserver:

(env)$^C

Usage

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.

Endpoint /CHS/keys/

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.

Endpoint /CHS/search

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 searchterm

400 Bad Request (No body)

The request body is not a valid JSON body, or does not contain the required term field.

Example JSON request:

{
    "search": {
        "term": "some term"
    }
}

Endpoint /CHS/advanced_search

POST /CHS/advanced_search

(This method is currently stubbed out for testing responses).

Arguments

None

Returns

200 OK

404 Not Found

Example JSON request:

{
    "advanced_search": {
        "author": "some term",
        "keywords": "some term",
        "resource_type": "some term"
    }
}

Endpoint /CHS/get_metadata/{id}

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

Endpoint /CHS/set_metadata/{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"
    }
}

Endpoint /CHS/upload_file

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.

Endpoint /CHS/download_file/{id}

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

Endpoint /CHS/{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}.

Endpoint /CHS/get_all_versions/{id}

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

Clone this wiki locally