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
- Flask = simple & minimal REST API framework
- FastAPI = modern, typed, fast, best for production
- Use JSON for communication
- Support GET, POST, PUT, DELETE
- Use status codes for correct API responses
- Can return files, logs, and secure endpoints
- Supports path params, query params, and request bodies