Python Flask is a popular microframework utilized for web application development. In this article, we’ll delve deep into how to harness the power of Flask-RESTful to craft RESTful APIs efficiently.

Flask-RESTful is an extension for Python, specifically designed to facilitate rapid REST API development. This extension offers a straightforward abstraction ideal for integrating with ORM and other libraries.

Setting Up the Environment

Before diving into application creation, it’s imperative to set up a conducive environment that ensures the isolated installation of Python packages.

To achieve this, virtualenv is your go-to solution:

sudo pip install virtualenv

Following its installation, you can create and then activate a virtual environment, aptly named venv:

virtualenv venv
source venv/bin/activate

With the virtual environment up and running, it’s time to install Flask and Flask-RESTful:

pip install Flask
pip install flask-restful

Flask virtual environment setup

Crafting a Flask Rest API

With the required libraries installed, let’s initiate the creation of a file named main.py. First on the agenda is importing Flask and the flask_restful module:

from flask import Flask
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

For the sake of this demonstration, we’ll curate a small class as illustrated below:

class Quotes(Resource):
def get(self):
return {
'bukowski': {
'quote': ['Some people never go crazy. What truly horrible lives they must lead.',
'Can you remember who you were, before the world told you who you should be?'
]
},
'angelou': {
'quote': ['You will face many defeats in life, but never let yourself be defeated']
}
}

Despite the static data used here, the flexibility of Flask allows for integration with dedicated servers. Following this, we need to add the crafted class to our API:

api.add_resource(Quotes, '/')

Collating everything, the final code resembles the following:

from flask import Flask
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

class Quotes(Resource):
def get(self):
return {
'bukowski': {
'quote': ['Some people never go crazy. What truly horrible lives they must lead.',
'Can you remember who you were, before the world told you who you should be?'
]
},
'angelou': {
'quote': ['You will face many defeats in life, but never let yourself be defeated']
}
}

api.add_resource(Quotes, '/')

if __name__ == '__main__':
app.run(debug=True)

Once you run the script, the following output emerges:

~ » python api.py 
* Serving Flask app "case" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 730-804-219

Just navigate to localhost:5000/ to view the comprehensive JSON object.

Visual representation of the Flask API

Diving into Resourceful Routing

For this segment, let’s begin by crafting the script showcased below:

from flask import Flask, request
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

users = {}

class UserSimple(Resource):
def get(self, user_id):
return {user_id: users[user_id]}

def put(self, user_id):
users[user_id] = request.form['data']
return {user_id: users[user_id]}

api.add_resource(UserSimple, '/user/<string:user_id>')

if __name__ == '__main__':
app.run(debug=True)

To get a sense of this API’s capabilities, add a few users to the initially empty users dictionary via HTTP PUT requests. The Python shell is an excellent environment to emulate web browser requests:

from requests import put,get

put('http://localhost:5000/user/alice', data={'data': 'Alice'}).json()
put('http://localhost:5000/user/bob', data={'data': 'Bob'}).json()

get('http://localhost:5000/user/alice').json()
get('http://localhost:5000/user/bob').json()

Furthermore, these GET requests can be executed directly from your web browser for a visual inspection.

Overview of the Flask RESTful API