Creating APIs with Python Flask

Application Programming Interface

What is API ?

Application Programming Interface (API) is an application interface that allows two applications to communicate each other. Creating API is creating routes(endpoint and parameter) and response back some data. Means that other application can use our service with requesting API. RESTFul (Representational state transfer) is style or rules of creating APIs.

Example of API and HTTP request, response

For example, there is application A and application B. Application A wants weather forecast data to show user the weather data in application. Application B have weather data and create some routes(api routes) to allow other application to use weather data(services). Then application A request application B (creating HTTP request) and application B response back requested weather data to application A. Then application A can use data to show user the weather data in application.

Creating RESTFUL APIs

RESTFUL ➜ Representational state transfer

  • use suitable request method (GET, POST, PUT, PATCH, DELETE)
  • represent resources in url

Mostly use in authentication, user login. Server record data or not when client request to server. Next time client request to server, server remember the user.

store information in server and waiting for the next request. Session make stateful protocols. Example session authentication, user state store in server memory. In flask, flask-login use cookies-server authentication.

No information remain in server when communicate client and server. when client request to server, server create jwt with user information and response jwt back to client. Client store in cookies or localstorage in browser. Every time requesting to server, client pass that token to server. Server only check token(jwt) and no need to store user information to server memory. Token authentication are stateless. You can test python json web token.

Creating API with Flask

  • use module jsonify to response json data
  • method ➜ GET
  • represent resource ➜ posts
from flask import Flask, jsonify@app.route("/posts/all", methods=['GET'])
def get_all_post():
return jsonify(posts)
  • method ➜ POST
  • represent resource ➜ posts
@app.route("/posts/", methods=['POST'])
def add():
new_post = Post(
title = request.form["title"],
content = request.form["content"],
)
db.session.add(new_post)
db.session.commit()
return jsonify({"success": "Successfully added."})
  • method ➜ PUT (update all data that match with id)
  • represent resource ➜ posts
@app.route("/posts/<id>", methods=['PUT'])
def update(id):
# get post that match with requested id
post = Post.query.get(request.args['id'])

if post:
# update data
post.title = request.form['title']
post.content = request.form['content']
db.session.add(post)
db.session.commit()
return jsonify({"success": "Successfully updated"})
else:
return jsonify({"error": "not found id"})
  • method ➜ PATCH (update some data that match with id)
  • represent resource ➜ posts
@app.route("/posts/<id>", methods=['PATCH'])
def update_title(id):
post = Post.query.get(id)
if post:
try:
# get title parameter in url
post.title = request.args["title"]
except:
return jsonify({"error": "you must pass title as parameter"})
else:
db.session.commit()
return jsonify({"success": "Successfully updated"})
else:
return jsonify({"error": "not found id"})
  • method ➜ DELETE
  • represent resource ➜ posts
@app.route("/posts/<id>", methods=['DELETE'])
def delete(id):
post = Post.query.get(id)
db.session.delete(cafe)
db.session.commit()
return jsonify({"success": "successfully deleted"})
else:
return jsonify({"error": "not found id"})

--

--

Learning javascript and web-development

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store