Build a REST API in Flask: one route per HTTP verb, jsonify(), get_or_404(), and status codes.
Building a REST API
from flask import Blueprint, jsonify, request
from .models import User, db
api = Blueprint("api", __name__)
@api.route("/users", methods=["GET"])
def get_users():
page = request.args.get("page", 1, type=int)
users = User.query.paginate(page=page, per_page=10)
return jsonify({
"data": [u.to_dict() for u in users.items],
"total": users.total,
"pages": users.pages,
})
@api.route("/users/", methods=["GET"])
def get_user(id):
user = db.get_or_404(User, id)
return jsonify(user.to_dict())
@api.route("/users", methods=["POST"])
def create_user():
data = request.get_json() or {}
if "email" not in data:
return jsonify({"error": "email required"}), 400
user = User(name=data["name"], email=data["email"])
db.session.add(user)
db.session.commit()
return jsonify(user.to_dict()), 201
@api.route("/users/", methods=["DELETE"])
def delete_user(id):
user = db.get_or_404(User, id)
db.session.delete(user)
db.session.commit()
return "", 204