- Spec files
pypi-fastapi
Describes: pkg:pypi/fastapi@0.116.x
- Description
- FastAPI framework, high performance, easy to learn, fast to code, ready for production
- Author
- tessl
- Last updated
request-parameters.md docs/
1# Request Parameters23FastAPI provides type-safe parameter declaration functions for handling different types of request data including path parameters, query parameters, headers, cookies, request bodies, form data, and file uploads. These functions enable automatic validation, serialization, and OpenAPI documentation generation.45## Capabilities67### Path Parameters89Declare path parameters extracted from the URL path with automatic type conversion and validation.1011```python { .api }12def Path(13default: Any = ...,14*,15alias: str = None,16title: str = None,17description: str = None,18gt: float = None,19ge: float = None,20lt: float = None,21le: float = None,22min_length: int = None,23max_length: int = None,24regex: str = None,25example: Any = None,26examples: dict = None,27openapi_examples: dict = None,28deprecated: bool = None,29include_in_schema: bool = True,30**extra: Any,31) -> Any:32"""33Declare a path parameter with validation constraints.3435Parameters:36- default: Default value (use ... for required parameters)37- alias: Alternative name for the parameter in OpenAPI38- title: Title for documentation39- description: Description for documentation40- gt: Greater than validation for numbers41- ge: Greater than or equal validation for numbers42- lt: Less than validation for numbers43- le: Less than or equal validation for numbers44- min_length: Minimum length for strings45- max_length: Maximum length for strings46- regex: Regular expression pattern for string validation47- example: Example value for documentation48- examples: Multiple examples for documentation49- deprecated: Mark parameter as deprecated50- include_in_schema: Include in OpenAPI schema5152Returns:53Parameter declaration for use in function signatures54"""55```5657### Query Parameters5859Declare query parameters from URL query strings with optional defaults and validation.6061```python { .api }62def Query(63default: Any = Undefined,64*,65alias: str = None,66title: str = None,67description: str = None,68gt: float = None,69ge: float = None,70lt: float = None,71le: float = None,72min_length: int = None,73max_length: int = None,74regex: str = None,75example: Any = None,76examples: dict = None,77openapi_examples: dict = None,78deprecated: bool = None,79include_in_schema: bool = True,80**extra: Any,81) -> Any:82"""83Declare a query parameter with validation constraints.8485Parameters:86Same as Path() but with optional default values.87Use default=Undefined for required query parameters.8889Returns:90Parameter declaration for use in function signatures91"""92```9394### Header Parameters9596Declare HTTP header parameters with automatic conversion and validation.9798```python { .api }99def Header(100default: Any = Undefined,101*,102alias: str = None,103convert_underscores: bool = True,104title: str = None,105description: str = None,106gt: float = None,107ge: float = None,108lt: float = None,109le: float = None,110min_length: int = None,111max_length: int = None,112regex: str = None,113example: Any = None,114examples: dict = None,115openapi_examples: dict = None,116deprecated: bool = None,117include_in_schema: bool = True,118**extra: Any,119) -> Any:120"""121Declare an HTTP header parameter with validation constraints.122123Parameters:124- convert_underscores: Convert underscores to hyphens in header names125- Other parameters same as Path() and Query()126127Returns:128Parameter declaration for use in function signatures129"""130```131132### Cookie Parameters133134Declare HTTP cookie parameters with validation and type conversion.135136```python { .api }137def Cookie(138default: Any = Undefined,139*,140alias: str = None,141title: str = None,142description: str = None,143gt: float = None,144ge: float = None,145lt: float = None,146le: float = None,147min_length: int = None,148max_length: int = None,149regex: str = None,150example: Any = None,151examples: dict = None,152openapi_examples: dict = None,153deprecated: bool = None,154include_in_schema: bool = True,155**extra: Any,156) -> Any:157"""158Declare an HTTP cookie parameter with validation constraints.159160Parameters:161Same as Query() and Header() without convert_underscores.162163Returns:164Parameter declaration for use in function signatures165"""166```167168### Request Body169170Declare request body parameters with JSON serialization and validation via Pydantic models.171172```python { .api }173def Body(174default: Any = Undefined,175*,176embed: bool = None,177media_type: str = "application/json",178alias: str = None,179title: str = None,180description: str = None,181gt: float = None,182ge: float = None,183lt: float = None,184le: float = None,185min_length: int = None,186max_length: int = None,187regex: str = None,188example: Any = None,189examples: dict = None,190openapi_examples: dict = None,191deprecated: bool = None,192include_in_schema: bool = True,193**extra: Any,194) -> Any:195"""196Declare a request body parameter with validation constraints.197198Parameters:199- embed: Embed single values in a JSON object200- media_type: Media type for the request body201- Other parameters same as other parameter functions202203Returns:204Parameter declaration for use in function signatures205"""206```207208### Form Data209210Declare form data parameters for application/x-www-form-urlencoded content.211212```python { .api }213def Form(214default: Any = Undefined,215*,216media_type: str = "application/x-www-form-urlencoded",217alias: str = None,218title: str = None,219description: str = None,220gt: float = None,221ge: float = None,222lt: float = None,223le: float = None,224min_length: int = None,225max_length: int = None,226regex: str = None,227example: Any = None,228examples: dict = None,229openapi_examples: dict = None,230deprecated: bool = None,231include_in_schema: bool = True,232**extra: Any,233) -> Any:234"""235Declare a form data parameter with validation constraints.236237Parameters:238- media_type: Media type for form data (default: application/x-www-form-urlencoded)239- Other parameters same as other parameter functions240241Returns:242Parameter declaration for use in function signatures243"""244```245246### File Upload247248Declare file upload parameters for multipart/form-data content with UploadFile objects.249250```python { .api }251def File(252default: Any = Undefined,253*,254media_type: str = "multipart/form-data",255alias: str = None,256title: str = None,257description: str = None,258gt: float = None,259ge: float = None,260lt: float = None,261le: float = None,262min_length: int = None,263max_length: int = None,264regex: str = None,265example: Any = None,266examples: dict = None,267openapi_examples: dict = None,268deprecated: bool = None,269include_in_schema: bool = True,270**extra: Any,271) -> Any:272"""273Declare a file upload parameter with validation constraints.274275Parameters:276- media_type: Media type for file uploads (default: multipart/form-data)277- Other parameters same as other parameter functions278279Returns:280Parameter declaration for use in function signatures281"""282```283284## Usage Examples285286### Path Parameters287288```python289from fastapi import FastAPI, Path290291app = FastAPI()292293@app.get("/items/{item_id}")294def get_item(295item_id: int = Path(..., title="Item ID", description="The ID of the item", ge=1)296):297return {"item_id": item_id}298299@app.get("/users/{user_id}/posts/{post_id}")300def get_user_post(301user_id: int = Path(..., ge=1),302post_id: int = Path(..., ge=1, le=1000)303):304return {"user_id": user_id, "post_id": post_id}305```306307### Query Parameters308309```python310from fastapi import FastAPI, Query311from typing import Optional, List312313app = FastAPI()314315@app.get("/items/")316def read_items(317skip: int = Query(0, ge=0, description="Number of items to skip"),318limit: int = Query(10, ge=1, le=100, description="Number of items to return"),319q: Optional[str] = Query(None, min_length=3, max_length=50, description="Search query"),320tags: List[str] = Query([], description="Filter by tags")321):322return {"skip": skip, "limit": limit, "q": q, "tags": tags}323324# Multiple query parameters with the same name325@app.get("/items/search")326def search_items(category: List[str] = Query(..., description="Categories to search")):327return {"categories": category}328```329330### Header Parameters331332```python333from fastapi import FastAPI, Header334from typing import Optional335336app = FastAPI()337338@app.get("/items/")339def read_items(340user_agent: Optional[str] = Header(None),341x_token: str = Header(..., description="Authentication token"),342accept_language: Optional[str] = Header(None, convert_underscores=True)343):344return {345"User-Agent": user_agent,346"X-Token": x_token,347"Accept-Language": accept_language348}349```350351### Cookie Parameters352353```python354from fastapi import FastAPI, Cookie355from typing import Optional356357app = FastAPI()358359@app.get("/items/")360def read_items(361session_id: Optional[str] = Cookie(None),362ads_id: Optional[str] = Cookie(None)363):364return {"session_id": session_id, "ads_id": ads_id}365```366367### Request Body with Pydantic Models368369```python370from fastapi import FastAPI, Body371from pydantic import BaseModel372from typing import Optional373374app = FastAPI()375376class Item(BaseModel):377name: str378description: Optional[str] = None379price: float380tax: Optional[float] = None381382class User(BaseModel):383username: str384email: str385386@app.post("/items/")387def create_item(item: Item):388return item389390@app.put("/items/{item_id}")391def update_item(392item_id: int,393item: Item,394user: User,395importance: int = Body(..., gt=0, description="Item importance level")396):397return {"item_id": item_id, "item": item, "user": user, "importance": importance}398399# Single value in body400@app.post("/items/{item_id}/priority")401def set_priority(402item_id: int,403priority: int = Body(..., embed=True, ge=1, le=5)404):405return {"item_id": item_id, "priority": priority}406```407408### Form Data409410```python411from fastapi import FastAPI, Form412413app = FastAPI()414415@app.post("/login/")416def login(417username: str = Form(..., min_length=3),418password: str = Form(..., min_length=8)419):420return {"username": username}421422@app.post("/contact/")423def contact(424name: str = Form(...),425email: str = Form(..., regex=r'^[^@]+@[^@]+\.[^@]+$'),426message: str = Form(..., min_length=10, max_length=1000)427):428return {"name": name, "email": email, "message": message}429```430431### File Upload432433```python434from fastapi import FastAPI, File, UploadFile, Form435from typing import List436437app = FastAPI()438439@app.post("/upload/")440def upload_file(file: UploadFile = File(...)):441return {"filename": file.filename, "content_type": file.content_type}442443@app.post("/upload-multiple/")444def upload_multiple_files(files: List[UploadFile] = File(...)):445return {"filenames": [file.filename for file in files]}446447@app.post("/upload-with-form/")448def upload_with_form_data(449file: UploadFile = File(...),450name: str = Form(...),451description: str = Form(...)452):453return {454"filename": file.filename,455"name": name,456"description": description457}458459# File as bytes460@app.post("/upload-bytes/")461def upload_file_bytes(file: bytes = File(...)):462return {"file_size": len(file)}463```464465### Combined Parameters466467```python468from fastapi import FastAPI, Path, Query, Header, Cookie, Body, Form, File, UploadFile469from pydantic import BaseModel470from typing import Optional471472app = FastAPI()473474class Metadata(BaseModel):475title: str476description: Optional[str] = None477478@app.post("/items/{item_id}/process")479def process_item(480# Path parameter481item_id: int = Path(..., ge=1),482483# Query parameters484force: bool = Query(False),485notify_users: bool = Query(True),486487# Headers488user_agent: Optional[str] = Header(None),489x_api_key: str = Header(...),490491# Cookies492session_id: Optional[str] = Cookie(None),493494# Request body495metadata: Metadata,496priority: int = Body(..., ge=1, le=5),497498# Form data and file499notes: str = Form(...),500attachment: Optional[UploadFile] = File(None)501):502return {503"item_id": item_id,504"force": force,505"notify_users": notify_users,506"user_agent": user_agent,507"session_id": session_id,508"metadata": metadata,509"priority": priority,510"notes": notes,511"attachment": attachment.filename if attachment else None512}513```