This is a simple Flask API project that uses Redis caching and can be run in a Docker container. The API has the following endpoints:
/getdata/<device_fk_id>
: Returns the latest information for a given device ID, including device_fk_id, latitude, longitude, time_stamp, sts, and speed./getlocation/<device_fk_id>
: Returns the start location and end location for a given device ID as a tuple of (latitude, longitude)./getinfo
: Takes in device ID, start time, and end time and returns all the location points as a list of latitude, longitude, and time stamp.
- Clone the repository:
git clone https://github.com/<username>/Flask-RedisCaching-in-Docker.git
- Navigate to the project directory in your terminal.
- Build the Docker image:
docker build -t flask-api-with-caching
. - Start the Docker containers:
docker-compose
. - Access the API endpoints at
http://127.0.0.1:5000/
- Note Replace
<username>
with your GitHub username in step 1.
Returns the latest information for all device ID, including device_fk_id, latitude, longitude, time_stamp, sts, and speed.
Request URL: http://127.0.0.1:5000/alldata
Request Method: GET
URL Params:
- None
Response:
[{
"device_fk_id": "<device_fk_id>",
"latitude": "<latitude>",
"longitude": "<longitude>",
"time_stamp": "<time_stamp>",
"sts": "<sts>",
"speed": "<speed>"
},
{
"device_fk_id": "<device_fk_id>",
"latitude": "<latitude>",
"longitude": "<longitude>",
"time_stamp": "<time_stamp>",
"sts": "<sts>",
"speed": "<speed>"
}
...
]
Returns the latest information for a given device ID, including device_fk_id, latitude, longitude, time_stamp, sts, and speed.
Request URL: http://127.0.0.1:5000/getdata/<device_fk_id>
Request Method: GET
URL Params:
device_fk_id
(required): The device ID for which you want to retrieve information.
Response:
{
"device_fk_id": "<device_fk_id>",
"latitude": "<latitude>",
"longitude": "<longitude>",
"time_stamp": "<time_stamp>",
"sts": "<sts>",
"speed": "<speed>"
}
Returns the start location and end location for a given device ID as a tuple of (latitude, longitude).
Request URL: http://127.0.0.1:5000/getlocation/<device_fk_id>
Request Method: GET
URL Params:
device_fk_id
(required): The device ID for which you want to retrieve location information.
Response:
{
"start_location": [
"<latitude>",
"<longitude>"
],
"end_location": [
"<latitude>",
"<longitude>"
]
}
Takes in device ID, start time, and end time and returns all the location points as a list of latitude, longitude, and time stamp.
Request URL: http://127.0.0.1:5000/getinfo
Request Method: GET
URL Params:
deviceId
(required): The device ID for which you want to retrieve location information.starttime
(optional): The start time for the location points (format: %Y-%m-%dT%H:%M:%SZ).endtime
(optional): The end time for the location points (format: %Y-%m-%dT%H:%M:%SZ).
Response:
[
{
"latitude": "<latitude>",
"longitude": "<longitude>",
"time_stamp": "<time_stamp>"
},
{
"latitude": "<latitude>",
"longitude": "<longitude>",
"time_stamp": "<time_stamp>"
},
...
]
- Flask
- Flask-Caching
- Redis
- SQLAlchemy
Flask-RedisCaching-in-Docker
├── app/
│ ├── init.py
│ ├── getData.py
│ ├── getInfo.py
│ ├── location.py
│ └── allData.py
├── utils/
│ └── raw_data.csv
├── .gitignore
├── data.py
├── constant.py
├── Dockerfile
├── docker-compose.yml
└── model.py
app/
: Contains the Flask application code.__init__.py
: Initializes the Flask app and registers the routes.getData.py
: Contains the code for the/getdata/<device_fk_id>
endpoint.getInfo.py
: Contains the code for the/getinfo
endpoint.location.py
: Contains the code for the/getlocation/<device_fk_id>
endpoint.allData.py
: Contains the code for the/alldata
endpoint.
utils/
: Contains the raw data inraw_data.csv
file..gitignore
: Specifies files that should be ignored by Git.data.py
: Contains functions for retrieving data.constant.py
: Contains constant values used throughout the application.Dockerfile
: Contains instructions for building the Docker image.docker-compose.yml
: Contains instructions for running the Docker container.model.py
: Contains the data model for the application.
The application uses Redis as the caching layer, with a caching timeout of 120 seconds.