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 UIFlask 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.