RESTful Web API with Flask

RESTful Web API with Flask


Flask makes it very easy to create a RESTful web API. The known route() decorator besides its methods optional argument may be used to declare the routes. That controls the resource URLs exposed by the service. JSON data working is too simple. Because JSON data comprised with a request is automatically exposed as a request.json Python dictionary. A response that requires to contain JSON may be simply created from a Python dictionary using Flask’s jsonify() helper function.

In this article, we will learn how to create a RESTful web API with Flask.


Flask-RESTful is an extension for Flask. It provides help for fast building REST APIs. It is a lightweight abstraction, which does work with the existing libraries. Flask-RESTful supports best practices with minimal setup. Flask-RESTful should be simple to pick up if we are familiar with Flask.


Using pip install Flask-RESTful

pip install flask-restful

A Minimal Flask App

from flask import Flaskapp = Flask(__name__)@app.route('/hello/', methods=['GET', 'POST'])
def welcome():
    return "Hello World!"if __name__ == '__main__':'', port=105)
  • Save this as and run it using the python interpreter.
  • Go to terminal and type python (i.e. python <filename>.py )

We would see something like this:

Running on
Press CTRL+C to quit
  • Launch any web browser.
  • To look at the app in action, go to http://localhost:105/hello/ .

Working of the code line-by-line

  • Import the Flask class as from flask import Flask
  • Create an instance of the class as app = Flask(__name__)
  • We use the route() decorator to ask the Flask what URL should trigger the function.
  • @app.route('/hello/', methods=['GET', 'POST'])
  • methods indicates which HTTP methods are allowed. The default is ['GET']
  • if __name__ == '__main__' → __name__ is a specific variable in Python.
  • It takes the value of the script name.
  • This line makes sure that our Flask app runs only when it is executed in the main file.
  • It will not be executed when it is imported into some other file.
  • Run the Flask'', port=105)
  • host indicates the server on which we want the flask application to run.
  • The default value for host is localhost and
  • show as all IPv4 addresses on the local machine. 
  • This makes sure that the server will be reachable from all addresses.
  • The default port value is 5000.
  • We may set the parameterportto use the port number of our choice.

Rules For Variables

  • We can add variable sections to a URL by using <variable_name>.
  • The function gets the variable as a keyword argument.
from flask import Flask
app = Flask(__name__)@app.route('/<int:number>/')
def incrementer(number):
    return "Incremented number is " + str(number+1)@app.route('/<string:name>/')
def hello(name):
    return "Hello " +
  • To start the Flask application run the above code.
  • Open the browser and go to http://localhost:5000/Jimit.
  • We will look at the output as Hello Jimit .
  • The output will be Incremented number is 11when we go to http://localhost:5000/10  .
  • The routes linked with a RESTful API form a self-contained subset of the application.
  • Therefore, putting them in their own blueprint is the best way to keep them well organized.
  • A common structure of the API blueprint within the application is shown in the below example.
  • Note that how the package used for the API added a version number in its name.
  • It can be included as another package with a different version number and both APIs may be served at the same time when a backward-incompatible version of the API requires to be introduced.
  • This API blueprint applies each resource in a separate module.
  • Modules are similarly added to take care of authentication, error handling, and to provide custom decorators.
  • The blueprint constructor can be seen in the below example.
from flask import Blueprint
api = Blueprint('api', __name__)
from . import authentication, posts, users, comments, errors

The registration of the API blueprint may be seen in the following example.

def create_app(config_name):
# ...
from .api_1_0 import api as api_1_0_blueprint
app.register_blueprint(api_1_0_blueprint, url_prefix='/api/v1.0')
# ...


Mansoor Ahmed is Chemical Engineer, web developer, a writer currently living in Pakistan. My interests range from technology to web development. I am also interested in programming, writing, and reading.
Posts created 422

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top