In today's lesson, we will learn how to build basic Rest Api in Python and Flask. We will specifically focus on two different way of creating apis, both will be using flask. List of two ways. 1. using flask 2. using flask extension called flask restful
In this Lesson we are going to use flask restful to make our final api. But I'm also going to show to how to create one in `flask
Note! using flask is not the most official way of creating api. Flask is not efficient, code will look bad and have difficulty managing large files. flask restful flask extension restful is the best way of creating api. Because it handlea big files wasily. Very easy to work with And it was created special for making rest apis. I recommend you should use flask restful
Here what our final api will look like It will generate random content from a category and print it out in json format
What is REST?
Representational State Transfer (REST) is a software architectural style that defines a set of constraints to be used for creating web services. Web services that conform to the REST architectural style, termed RESTful web services, provide interoperability between computer systems on the Internet. RESTful web services allow the requesting systems to access and manipulate textual representations of web resources by using a uniform and predefined set of stateless operations. Other kinds of web services, such as SOAP web services, expose their own arbitrary sets of operations. In a RESTful web service, requests made to a resource's URI will elicit a response with a payload formatted in either HTML, XML, JSON, or some other format. For more info click here
We will only work with json format
Requirements
Basic Python knowledge
Flask
Flask-Restful
Jsonify
json
Installation
Inside your repl, creating an empty file called requirements.txt. Once you have to empty txt file ready, copy and paste this Flask==1.0.2 to your requirements.txt to install flask.
If this started to happen, that mean flask have been install, and if not, something is wrong and should re-copy and paste Flask==1.0.2 To install flask-restful, repeat the same procedure but use this line Flask-RESTful==0.3.6
Creating web server
We'll need to create basic web server. We need web server to run our code on repl.it here the basic code for creating basic web server
from flask import Flask
from threading import Thread
app = Flask('')
@app.route('/')
def home():
return "I'm alive"
def run():
app.run(host='0.0.0.0',port=8080)
t = Thread(target=run)
t.start()
I'm not going to explain this code, as I'm bad when it come to server stuff. But up there we just created a simple server.
if you run this code this screen is going to pop up on top right hand right with this text i'm alive. Now we have successfully created a web server.
Rest
REST have 4 methods:
GET
PUT
POST
DELETE
In this tutorial, we ony going to work with GET method.
Creating api
first we need to import another flask extension jsonify.
from flask import jsonify
we need jsonify to convert data in json and send it out to our server. Important Note:- we're going only going to work with json data, because json can be used in almost every modern language.
from flask import Flask, jsonify
from threading import Thread
app = Flask('')
#make sure you code is between this code
t = Thread(target=run) t.start()
here's a example of **GET** methods
```python
from flask import Flask, jsonify
from threading import Thread
app = Flask('')
@app.route('/')
def home():
return "I'm alive"
@app.route('/api/add', methods=['GET'])
def add():
return jsonify({"2 + 2": 2 + 2})
def run():
app.run(host='0.0.0.0',port=7000)
t = Thread(target=run)
t.start()
@app.route('/api/add', methods=['GET'])
/api/add is our api endpoint. you can name it what ever you want, im just gonna called it that. we need an endpoint to get to make requests to content, without any endpoint it will give you an error or simply return you home page if available. You also noticed that we in our @app.route. we have methods. We use methods to tell what kind of rest option, we are using. In this case we are GET.
ENDPOINT= your web server url + your app route so my url is https://rest-api-python.badvillain01.repl.co + route /api/add our endpoint is https://rest-api-python.badvillain01.repl.co/api/add
Note:- your url name will be different than mine. so put your url name and route together.
If you run my example you will get this result. {"2 + 2":4}
I recommend running my example first and once you have hold of it, then run you're owns.
Now in this example we will take user input and convert this to json data. I'm going to use to previous example but add user input. So user will put any number and it will double user input.
You may have noticed that our in route we have this <int:num>. This is how to take input. int is specify what type of content is it. And num is the name of variable we will storing our input. Once we have our input. Then we are going to use jsonify to convert data into json format and print it out on server. If you run this code now and endpoint /api/add/<any num you want> i'll be using 23, json data should look something like that.
{"23 + 23" = 46}
Now he's another example that takes string as input
we bascially did same thing, just change our variable type to string. and if we run this example result show look like this
{"Your name": "bad"}
That all i have for flask. If you wanna continued with flask, Good Luck, but i'll suggest you checkout flask-restful
Getting ready for flask-restful Api
So, the api i'm creating have two main categories, facts and quote. And then inside the folder, there are four json files, that contain some sort of json content. I hope this made any sense to you. If not, then i'm sorry
flask-restful
first we need to import two extension from flask-restful, We need Resource, and Api.
from flask_restful import Resource, Api
Here a simple example of flask-restful
from flask import Flask, jsonify
from threading import Thread
from flask_restful import Resource, Api
app = Flask('')
api = Api(app)
class Test(Resource):
def get(self):
return "Example with Flask-Restful"
#creating api endpoint
api.add_resource(Test, '/api/restful')
def run():
app.run(host='0.0.0.0',port=7210)
t = Thread(target=run)
t.start()
If you compare this with flask. You can clearly see this is more readable, official and best.
How flask-restful works
first we need to build api on top of app.
app = Flask('')
api = Api(app)
We just creating api. Now we dont need app. And we are going to use api to add new content.
class Test(Resource):
def get(self):
return "Example with Flask-Restful"
In flask-restful, all content need to be in class with Resource as parameters Methods are a little different. You don't assign Methods in route endpoint, instead you add methods directly to class. def get(self): or def post(self) Self: becuase we are using def inside class, so we need to add self as first parameter.
To create endpoint in flask-restful, it's pretty easy. api.add_resource(<your class name>, <your endpoint>) For this example api.add_resource(Test, '/api/restful')
If you run this now. You should get this "Example with Flask-Restful" NOTE
def get(self):
return "Example with Flask-Restful"
As you see, we didn't use jsonify. WHY. Becuase the content we're returning in not json. So to return json data. Here's an example
Becuase i'm gonna be selecting random from json fromat, so i need to import random and also need to import json
import random
import json
Now we are going to create a class called Facts. This class will return a random facts.
def get_facts(fact_type):
if fact_type == "random":
file_address = 'Facts/random.json'
elif fact_type == "technology":
file_address = 'Facts/technology.json'
else:
file_address = 'errormsg.json'
with open(file_address, 'r') as factfile:
data = json.load(factfile)
fact = random.choice(list(data['Facts']))
return fact
class Facts(Resource):
def get(self, fact_type):
return get_facts(fact_type)
api.add_resource(Facts, '/api/facts/<string:fact_type>')
So what i did that, instead of adding everything to my Facts class, i created a new def, outside of class. Now everythime, I'm calling Facts endpoint. It's sending requests back to get_facts() and return the data to def get(). And then this whole return the data to our server.
Creating new separate data will make your code more readable.
you may wonder what this for
def get_facts(fact_type):
if fact_type == "random":
file_address = 'Facts/random.json'
elif fact_type == "technology":
file_address = 'Facts/technology.json'
else:
file_address = 'errormsg.json'
with open(file_address, 'r') as factfile:
data = json.load(factfile)
fact = random.choice(list(data['Facts']))
return fact
fact_type is user input.
So i only want user to choose from my inputs, so im using if statement to check user input. If user input is equal to one of my inputs, I'm creating a new variable called file_address. This will contain file address i want to open.
with open(file_address, 'r') as factfile:
data = json.load(factfile)
fact = random.choice(list(data['Facts']))
now once if else are done. We need to open the file and select random items from it. Remember, we are storing file address in file_address. We are going to called this file factfile
Once we open the file, we need to load all content to json file. data = json.load(factfile) and now open we have all content in json file, we need to random select one. fact = random.choice(list(data['Facts']))
data:- name of variable which contain our json content data['Facts]: Facts is what we want from our json file. It will randomly select one thing from Facts and return to def get_fact and this will return everything to class Facts and this will return it to our server.
Now if you run your code, the output should look like this
Now we are going to do the same thing with Quotes. We'll create a class and remember to give Resource parameter to class.
def get_quotes(quote_type):
if quote_type == "motivation":
file_address = 'Quotes/motivation.json'
elif quote_type == "funny":
file_address = 'Quotes/funny.json'
else:
file_address = 'errormsg.json'
with open(file_address, 'r') as quotefile:
data = json.load(quotefile)
quote = random.choice(list(data['Quotes']))
return quote
class Quotes(Resource):
def get(self, quote_type):
return get_quotes(quote_type)
api.add_resource(Quotes, '/api/quotes/<string:quote_type>')
So we are just doing the same thing we did previously.
Congrats, you have successfully created your first rest api.
I hope you learned something today I know it's bad but i try my best to make a great tutorial
If you have any question dm me on discord, ask in repl.it official discord server or comment below
If you see any error or mistake. Please notify me.
Important Note:- your repl web server won't stay up 24/7. I will die after 60 min. So i suggest using free service UptimeRobot. If you never used UptimeRobot, then read this tutorial for help
Introduction
In today's lesson, we will learn how to build basic
Rest Api
inPython
andFlask
. We will specifically focus on two different way of creating apis, both will be using flask.List of two ways.
1. using flask
2. using flask extension called
flask restful
In this Lesson we are going to use
flask restful
to make our final api.But I'm also going to show to how to create one in `flask
What is REST?
Representational State Transfer (REST) is a software architectural style that defines a set of constraints to be used for creating web services. Web services that conform to the REST architectural style, termed RESTful web services, provide interoperability between computer systems on the Internet. RESTful web services allow the requesting systems to access and manipulate textual representations of web resources by using a uniform and predefined set of stateless operations. Other kinds of web services, such as SOAP web services, expose their own arbitrary sets of operations. In a RESTful web service, requests made to a resource's URI will elicit a response with a payload formatted in either HTML, XML, JSON, or some other format.
For more info click here
Requirements
Installation
Inside your repl, creating an empty file called
requirements.txt
. Once you have to empty txt file ready, copy and paste this Flask==1.0.2 to your requirements.txt to install flask.If this started to happen, that mean flask have been install, and if not, something is wrong and should re-copy and paste
Flask==1.0.2
To install flask-restful, repeat the same procedure but use this line
Flask-RESTful==0.3.6
Creating web server
We'll need to create basic web server. We need web server to run our code on repl.it
here the basic code for creating basic web server
if you run this code this screen is going to pop up on top right hand right with this text
i'm alive
. Now we have successfully created a web server.Rest
REST have 4 methods:
In this tutorial, we ony going to work with
GET
method.Creating api
first we need to import another flask extension
jsonify
.#make sure you code is between this code
t = Thread(target=run)
t.start()
/api/add is our api endpoint. you can name it what ever you want, im just gonna called it that. we need an endpoint to get to make requests to content, without any endpoint it will give you an error or simply return you home page if available.
You also noticed that we in our @app.route. we have methods. We use methods to tell what kind of
rest option
, we are using. In this case we areGET
.ENDPOINT= your web server url + your app route
so my url is
https://rest-api-python.badvillain01.repl.co
+ route/api/add
our endpoint is
https://rest-api-python.badvillain01.repl.co/api/add
If you run my example you will get this result.
{"2 + 2":4}
Now in this example we will take
user input
and convert this to json data. I'm going to use to previous example but add user input. So user will put any number and it will double user input.You may have noticed that our in route we have this
<int:num>
. This is how to take input.int
is specify what type of content is it. Andnum
is the name of variable we will storing our input. Once we have our input.Then we are going to use
jsonify
to convert data into json format and print it out on server.If you run this code now and endpoint
/api/add/<any num you want>
i'll be using 23, json data should look something like that.Now he's another example that takes string as input
we bascially did same thing, just change our variable type to string. and if we run this example result show look like this
That all i have for flask. If you wanna continued with flask, Good Luck, but i'll suggest you checkout
flask-restful
Getting ready for flask-restful Api
So, the api i'm creating have two main categories,

facts
andquote
. And then inside the folder, there are fourjson
files, that contain some sort of json content. I hope this made any sense to you. If not, then i'm sorryflask-restful
first we need to import two extension from
flask-restful
, We needResource
, andApi
.Here a simple example of flask-restful
If you compare this with flask. You can clearly see this is more readable, official and best.
How flask-restful works
first we need to build
api
on top ofapp
.We just creating
api
. Now we dont needapp
. And we are going to useapi
to add new content.To create
endpoint
in flask-restful, it's pretty easy.api.add_resource(<your class name>, <your endpoint>)
For this example
api.add_resource(Test, '/api/restful')
If you run this now. You should get this
"Example with Flask-Restful"
NOTE
As you see, we didn't use
jsonify
. WHY. Becuase the content we're returning in notjson
. So to returnjson
data. Here's an exampleOutput should be
{"Type":"flask-restful"}
Creating final Api
Becuase i'm gonna be selecting random from json fromat, so i need to import
random
and also need to importjson
Now we are going to create a class called
Facts
. This class will return a random facts.So what i did that, instead of adding everything to my
Facts
class, i created a new def, outside of class. Now everythime, I'm calling Facts endpoint. It's sending requests back toget_facts()
and return the data todef get()
. And then this whole return the data to our server.you may wonder what this for
So i only want user to choose from my inputs, so im using
if
statement to check user input. If user input is equal to one of my inputs, I'm creating a new variable calledfile_address
. This will contain file address i want to open.now once
if else
are done. We need to open the file and select random items from it. Remember, we are storing file address infile_address
. We are going to called this filefactfile
Once we open the file, we need to load all content to
json
file.data = json.load(factfile)
and now open we have all content in json file, we need to random select one.
fact = random.choice(list(data['Facts']))
Now if you run your code, the output should look like this

Now we are going to do the same thing with
Quotes
. We'll create a class and remember to giveResource
parameter to class.So we are just doing the same thing we did previously.
Congrats, you have successfully created your first rest api.
If you have any question dm me on discord, ask in repl.it official discord server or comment below
This api was just for tutorial. I'm not working on it anymore.
Please check out of my main api.
Source code
https://repl.it/@badvillain01/rest-api-python
@ThomasHagan nvm fixed