FastAPI Python Library CheatSheet

FastAPI is a modern, fast (high-performance), web framework for building APIs with Python 3.7+ based on standard Python type hints. It is designed to be easy to use and efficient, making it a popular choice among developers for building robust and scalable APIs. To help you harness the power of FastAPI more effectively, here’s a cheatsheet that covers some of the essential concepts and features.

Installation

pip install fastapi

Creating a FastAPI Application

from fastapi import FastAPI

app = FastAPI()

Define Endpoints

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

@app.get("/items/{item_id}")
def read_item(item_id: int, query_param: str = None):
    return {"item_id": item_id, "query_param": query_param}

Request Parameters

Query Parameters

from fastapi import FastAPI

app = FastAPI()

@app.get("/items/")
def read_item(skip: int = 0, limit: int = 10):
    return {"skip": skip, "limit": limit}

Path Parameters

from fastapi import FastAPI

app = FastAPI()

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

Request Body

from fastapi import FastAPI, Body

app = FastAPI()

@app.post("/items/")
def create_item(item: dict = Body(...)):
    return {"item": item}

Query Parameters and Types

from fastapi import FastAPI, Query

app = FastAPI()

@app.get("/items/")
def read_item(skip: int = Query(0, title="Skip", description="Number of items to skip")):
    return {"skip": skip}

Path Parameters and Types

from fastapi import FastAPI, Path

app = FastAPI()

@app.get("/items/{item_id}")
def read_item(item_id: int = Path(..., title="Item ID", description="The ID of the item")):
    return {"item_id": item_id}

Request Body and Types

from fastapi import FastAPI, Body

app = FastAPI()

class Item:
    name: str
    description: str = None
    price: float
    tax: float = None

@app.post("/items/")
def create_item(item: Item):
    return {"item": item}

Request Headers

from fastapi import FastAPI, Header

app = FastAPI()

@app.get("/items/")
def read_item(api_key: str = Header(..., convert_underscores=False)):
    return {"api_key": api_key}

Dependency Injection

from fastapi import FastAPI, Depends

app = FastAPI()

async def get_db():
    db = DBSession()
    try:
        yield db
    finally:
        db.close()

@app.get("/items/")
async def read_items(db: Session = Depends(get_db)):
    return db.query(Item).all()

OAuth2 Authentication

from fastapi import Depends, FastAPI, HTTPException, status
from fastapi.security import OAuth2PasswordBearer

app = FastAPI()

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

@app.get("/items/")
def read_items(token: str = Depends(oauth2_scheme)):
    return {"token": token}

Middleware

from fastapi import FastAPI, Request

app = FastAPI()

async def simple_middleware(request: Request, call_next):
    print("Middleware Before Request")
    response = await call_next(request)
    print("Middleware After Request")
    return response

app.middleware(simple_middleware)

@app.get("/")
def read_root():
    return {"Hello": "World"}

This cheatsheet covers some of the key features and concepts of FastAPI. For more detailed information, refer to the official documentation. Use this cheatsheet as a quick reference guide to accelerate your development process with FastAPI.

FAQ

1. What is FastAPI, and how does it differ from other web frameworks?

FastAPI is a modern, high-performance web framework for building APIs with Python. It stands out for its use of Python type hints to enable automatic data validation and documentation generation. Unlike traditional frameworks, FastAPI leverages the capabilities of Python 3.7+ to provide fast, efficient, and type-safe API development.

2. How do I handle authentication in FastAPI?

FastAPI supports various authentication methods, including OAuth2, API keys, and others. For example, you can use OAuth2PasswordBearer for token-based authentication. By defining dependencies using the Depends function, you can easily integrate authentication into your route functions, ensuring secure access to your API endpoints.

3. Can I use FastAPI with an asynchronous database?

Yes, FastAPI is built with asynchronous programming in mind, and it works seamlessly with asynchronous databases. You can use tools like SQLAlchemy with an asynchronous driver (such as databases or databases[asyncpg]) to perform asynchronous database operations. This allows you to take full advantage of the performance benefits of asynchronous programming.

4. How can I handle request validation and serialization in FastAPI?

FastAPI utilizes Python type hints for automatic request validation and serialization. By declaring the types of your function parameters or request bodies, FastAPI will automatically validate incoming requests and generate detailed API documentation. This feature not only enhances code readability but also ensures that your API inputs are correctly formatted.

5. Does FastAPI support middleware for additional processing?

Yes, FastAPI supports middleware, allowing you to perform additional processing before and after handling requests. Middleware functions are defined using asynchronous request-response patterns, enabling tasks such as logging, authentication checks, or modifying the request/response cycle. This flexibility makes it easy to integrate custom logic into your FastAPI application.