Python REST APIs

Introduction

Python is one of the best languages for building REST APIs thanks to frameworks like Flask, FastAPI, and Django REST Framework. In this tutorial you’ll learn the fundamentals of building API routes, JSON responses, request parsing, and HTTP methods.

1. Simple REST API with Flask

from flask import Flask, jsonify, request

app = Flask(__name__)

@app.get("/api/hello")
def hello():
    return jsonify({"message": "Hello from Flask API!"})

app.run(port=3000)
    

2. POST Endpoint (Accept JSON)

@app.post("/api/user")
def create_user():
    data = request.json
    return jsonify({"received": data})
    

3. URL Parameters

@app.get("/api/user/<name>")
def user(name):
    return jsonify({"user": name})
    

4. Query Parameters

@app.get("/api/search")
def search():
    q = request.args.get("q")
    return jsonify({"query": q})
    

5. PUT / DELETE Routes

@app.put("/api/update")
def update():
    return jsonify({"status": "updated"})

@app.delete("/api/remove")
def remove():
    return jsonify({"status": "deleted"})
    

6. Return Custom Status Codes

return jsonify({"error": "not found"}), 404
    

7. Using FastAPI (More Modern)

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def root():
    return {"message": "FastAPI rocks"}
    

Run with:

uvicorn main:app --reload
    

8. Path, Query & Body in FastAPI

@app.get("/user/{id}")
def get_user(id: int):
    return {"id": id}

@app.get("/search")
def search(q: str):
    return {"query": q}

@app.post("/data")
def data(payload: dict):
    return {"received": payload}
    

9. Response Models (FastAPI)

from pydantic import BaseModel

class User(BaseModel):
    name: str
    age: int

@app.post("/user")
def create(user: User):
    return user
    

10. CORS Support

pip install flask-cors
    
from flask_cors import CORS
CORS(app)
    

11. Authentication (Bearer Token Example)

@app.get("/secure")
def secure():
    token = request.headers.get("Authorization")
    if token != "Bearer 123":
        return jsonify({"error":"Unauthorized"}), 401
    return {"ok": True}
    

12. Returning Files

from flask import send_file

@app.get("/download")
def dl():
    return send_file("report.pdf")
    

13. Logging Requests

@app.before_request
def log():
    print(request.method, request.path)
    

14. Error Handling

@app.errorhandler(404)
def nf(e):
    return {"error":"not found"}, 404
    

15. Summary