Skip to content
Snippets Groups Projects
README.md 2.14 KiB
Newer Older
  • Learn to ignore specific revisions
  • David Trattnig's avatar
    David Trattnig committed
    # Engine API Server
    
    David Trattnig's avatar
    David Trattnig committed
    
    ## Overview
    
    
    David Trattnig's avatar
    David Trattnig committed
    The Project serves the Engine API and handles state management of multiple Engine instances.
    
    This project is based on a swagger-enabled Flask server using an *API First* approach. It also uses the [Connexion](https://github.com/zalando/connexion) library on top of Flask.
    
    David Trattnig's avatar
    David Trattnig committed
    
    ## Requirements
    
    David Trattnig's avatar
    David Trattnig committed
    
    
    David Trattnig's avatar
    David Trattnig committed
    Python 3.7+
    
    David Trattnig's avatar
    David Trattnig committed
    MariaDB (or similar Database)
    
    David Trattnig's avatar
    David Trattnig committed
    
    
    David Trattnig's avatar
    David Trattnig committed
    ## Installation
    
    David Trattnig's avatar
    David Trattnig committed
    
    
    David Trattnig's avatar
    David Trattnig committed
    Install the required dependencies:
    
    David Trattnig's avatar
    David Trattnig committed
    
    
    David Trattnig's avatar
    David Trattnig committed
    ```bash
    pip3 install -r requirements.txt
    # Additional requirements for the chosen database
    pip3 install -r contrib/mariadb-requirements.txt
    # Create database and user (change password in script)
    sudo mysql -u root -p < contrib/mariadb-database.sql
    
    David Trattnig's avatar
    David Trattnig committed
    ```
    
    David Trattnig's avatar
    David Trattnig committed
    
    
    David Trattnig's avatar
    David Trattnig committed
    ## Getting started
    
    David Trattnig's avatar
    David Trattnig committed
    
    
    David Trattnig's avatar
    David Trattnig committed
    To run the server, please execute the following from the root directory:
    
    
    David Trattnig's avatar
    David Trattnig committed
    ```bash
    
    David Trattnig's avatar
    David Trattnig committed
    ./run.sh api
    ```
    
    To run the API in an local development server execute:
    
    
    David Trattnig's avatar
    David Trattnig committed
    ```bash
    
    David Trattnig's avatar
    David Trattnig committed
    ./run.sh api-dev
    ```
    
    
    David Trattnig's avatar
    David Trattnig committed
    ## Running with Docker
    
    To run the server on a Docker container, please execute the following from the root directory:
    
    ```bash
    # Building the image
    ./run.sh docker:build
    
    # Push the current image to dockerhub.com
    ./run.sh docker:push
    
    # Starting up a container
    ./run.sh docker:api
    ```
    
    ## Using the API
    
    Adding some entry to the playlog:
    
    ```bash
    
    David Trattnig's avatar
    David Trattnig committed
    curl -d '{ "track_start": "2020-06-27 19:14:00", "track_artist": "Mazzie Star", "track_title": "Fade Into You", "log_source": 1 }' -H "Content-Type: application/json" -X POST http://localhost:8008/api/v1/playlog/store
    
    David Trattnig's avatar
    David Trattnig committed
    ```
    
    
    David Trattnig's avatar
    David Trattnig committed
    This newly added entry can be queried using your browser in one of the following ways:
    
    David Trattnig's avatar
    David Trattnig committed
    
    
    David Trattnig's avatar
    David Trattnig committed
    ```bash
    # Get the latest entry
    http://localhost:8008/api/v1/trackservice/current
    # Get a set of the most recent entries
    http://localhost:8008/api/v1/trackservice/
    # Filter some specific page (the three most recent entries)
    http://localhost:8008/api/v1/trackservice?page=0&limit=3
    ```
    
    All other API endpoints are listed in the interactive documentation.
    
    David Trattnig's avatar
    David Trattnig committed
    
    
    David Trattnig's avatar
    David Trattnig committed
    ```bash
    
    David Trattnig's avatar
    David Trattnig committed
    http://localhost:8008/api/v1/ui/
    
    David Trattnig's avatar
    David Trattnig committed
    ```
    
    
    David Trattnig's avatar
    David Trattnig committed
    Your OpenAPI definition lives here:
    
    David Trattnig's avatar
    David Trattnig committed
    
    
    David Trattnig's avatar
    David Trattnig committed
    ```bash
    
    David Trattnig's avatar
    David Trattnig committed
    http://localhost:8008/api/v1/openapi.json
    
    David Trattnig's avatar
    David Trattnig committed
    ```
    
    
    David Trattnig's avatar
    David Trattnig committed
    ## Testing
    
    
    David Trattnig's avatar
    David Trattnig committed
    To launch the integration tests, use tox:
    
    David Trattnig's avatar
    David Trattnig committed
    
    ```bash
    
    David Trattnig's avatar
    David Trattnig committed
    sudo pip install tox
    
    David Trattnig's avatar
    David Trattnig committed
    ./run.sh test
    
    David Trattnig's avatar
    David Trattnig committed
    ```
    
    
    David Trattnig's avatar
    David Trattnig committed
    > Note, the test-cases are currently not functional.