Microservices using Flask — creating a basic web flask application
First part of the Microservices using Flask series where we will explore not only how to create a micro web application using Flask but also understand what makes the application robust and production ready.
For the purpose of the article let’s name our microservice as hello-world-service
App structure
The folder structure/content of hello-world-service will look like below. Although I talked about making application production ready, this structure might now adhere to certain production ready standards, but this article is to have a quick understanding on flask micro application. Future articles will have a more production ready touch.
hello-world-service
├── app.py
├── config.py
└── requirements.txt
app.py: The main file that will be used to initialize and start the application
config.py: encapsulates different settings you might want to change depending on the application environment like toggling the debug mode, setting the secret key, and other such environment-specific things.
requirements.txt: list of all dependencies required for the application.
Let’s start coding!
requirements.txt
Flask==1.1.1
As this just an introduction application, we have just the Flask dependency. All future dependencies should also go into this same file.
config.py
Usually articles show you a simple config.py or settings.py to load configuration, which works pretty well but you later realize that you need different configuration in different environment (development, testing, production etc.). This configuration will help you address that challenge. It has basic configurations listed under Config class which can be overridden by child classes specific to environment. Later we will know how to specify which class to use for configuration while creating the environment.
app.py
Line number 4 specifies that the configuration is loaded based on an environment variable CONFIG_SOURCE, which can have values like config.DevelopmentConfig to load development environment related configurations or config.ProductionConfig for production environment specific configuration
app.run() initiates the application which utilized the built-in Werkzeug app servers (only for development).
This application right now only handles the default route “/” and uses the hello() method to serve response(a static string “Hello World!”)
Creating environment and running the application
Specify the environment for the application to load configuration accordingly.
On macOS and Linux:
export CONFIG_SOURCE= config.DevelopmentConfigOn Windows:
SET CONFIG_SOURCE=config.DevelopmentConfig
Create a virtual environment
python -m venv env
Activate the virtual environment
On macOS and Linux:
source env/bin/activateOn Windows:
.\env\Scripts\activate
Install requirements
pip install -r requirements.txt
Starting the application
python app.py
You should get logs like below
* Restarting with stat* Debugger is active!* Debugger PIN: 227-585-361* Running on http://0.0.0.0:8001/ (Press CTRL+C to quit)
You can validate by access the page http://localhost:8001/
All the related code can be found below