RESTful API Design & OpenAPI Specifications
Build enterprise REST APIs. Master HTTP verbs (GET, POST, PUT, PATCH, DELETE), pagination, status codes, rate limiting, JWT auth, idempotency, and OpenAPI schema generation.
Ad-Hoc RPC URLs vs Resource-Oriented REST Standards
Avoid arbitrary verb URLs like `/getUserById`. Use HTTP nouns with standard HTTP method verbs (`GET`, `POST`, `PATCH`, `DELETE`).
# ❌ Arbitrary verbs & status 200 for errors
POST /api/getUserById?id=123
POST /api/deleteUser?id=123
# Returns HTTP 200 OK: {"error": "Not Found"}
# ✅ Semantic verbs & standard status codes
GET /api/v1/users/123 -> 200 OK
PATCH /api/v1/users/123 -> 200 OK
DELETE /api/v1/users/123 -> 204 No Content
🌐 HTTP Method Verbs & Idempotency Rules
GET
POST
201 Created. Non-Idempotent.PUT
PATCH
DELETE
204 No Content. Idempotent.💻 Production Blueprint: Paginated & Filtered REST Route
Observe how query parameters provide page, limit, filtering, and sorting while returning standardized response headers.
from fastapi import APIRouter, Query, Depends
from schemas.user import UserResponse
from schemas.pagination import PageResponse
router = APIRouter(prefix="/api/v1/users", tags=["Users"])
@router.get("", response_model=PageResponse[UserResponse])
def list_users(
page: int = Query(1, ge=1),
limit: int = Query(20, ge=1, le=100),
status: str | None = None,
sort_by: str = Query("-created_at"),
service = Depends()
) -> PageResponse[UserResponse]:
return service.get_paginated_users(page, limit, status, sort_by)