Ad – 728Γ—90
🌐 Real-World

Python API Development – Build REST APIs

APIs are the backbone of modern web services. Python offers FastAPI for high performance and Flask for simplicity to build production-ready REST APIs quickly.

⏱️ 20 min read🎯 Real-WorldπŸ“… Updated 2026

FastAPI – Quick Start

Python
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    price: float
    in_stock: bool = True

items_db = {}

@app.get("/items/{item_id}")
def get_item(item_id: int):
    if item_id not in items_db:
        return {"error": "Not found"}
    return items_db[item_id]

@app.post("/items/{item_id}")
def create_item(item_id: int, item: Item):
    items_db[item_id] = item
    return {"message": "Created", "item": item}

@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
    items_db[item_id] = item
    return {"message": "Updated"}

@app.delete("/items/{item_id}")
def delete_item(item_id: int):
    items_db.pop(item_id, None)
    return {"message": "Deleted"}

Running the API

Bash
pip install fastapi uvicorn
uvicorn main:app --reload
# Visit http://localhost:8000/docs for Swagger UI

Flask Alternative

Python
from flask import Flask, request, jsonify

app = Flask(__name__)
items = {}

@app.route("/items/", methods=["GET"])
def get_item(item_id):
    return jsonify(items.get(item_id, {"error": "Not found"}))

@app.route("/items/", methods=["POST"])
def create_item(item_id):
    data = request.get_json()
    items[item_id] = data
    return jsonify({"message": "Created"}), 201

if __name__ == "__main__":
    app.run(debug=True)

Token Authentication

Python
from fastapi import Depends, HTTPException, status
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
import secrets

security = HTTPBearer()
API_KEY = "secret-token-123"

def verify_token(credentials: HTTPAuthorizationCredentials = Depends(security)):
    if not secrets.compare_digest(credentials.credentials, API_KEY):
        raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid token")
    return credentials.credentials

@app.get("/secure", dependencies=[Depends(verify_token)])
def secure_endpoint():
    return {"data": "Protected resource"}

Pydantic Validation

Python
from pydantic import BaseModel, validator, Field

class UserCreate(BaseModel):
    username: str = Field(..., min_length=3, max_length=50)
    email: str
    age: int = Field(..., ge=0, le=150)

    @validator("email")
    def validate_email(cls, v):
        if "@" not in v:
            raise ValueError("Invalid email")
        return v.lower()

@app.post("/users/")
def create_user(user: UserCreate):
    return {"created": user.dict()}
Tip: Use FastAPI for new projects β€” auto-generated Swagger docs at /docs, async support, and Pydantic validation built-in.