Performance: API versioning strategies
API versioning strategies affect the server response time and client load by influencing routing complexity and cache efficiency.
from fastapi import FastAPI, APIRouter app = FastAPI() v1_router = APIRouter(prefix='/api/v1') @v1_router.get('/items') def get_items_v1(): return {'version': 'v1', 'items': []} v2_router = APIRouter(prefix='/api/v2') @v2_router.get('/items') def get_items_v2(): return {'version': 'v2', 'items': []} app.include_router(v1_router) app.include_router(v2_router)
from fastapi import FastAPI app = FastAPI() @app.get('/api/v1/items') def get_items_v1(): return {'version': 'v1', 'items': []} @app.get('/api/v2/items') def get_items_v2(): return {'version': 'v2', 'items': []} @app.get('/api/items') def get_items(): # Logic to detect version from headers or query params pass
| Pattern | Routing Complexity | CPU Usage | Response Latency | Verdict |
|---|---|---|---|---|
| Header or query param version detection with single endpoint | High (multiple checks) | High | Higher latency | [X] Bad |
| Prefix-based versioning with APIRouter | Low (direct match) | Low | Lower latency | [OK] Good |
/api/items with header X-API-Version: 2?
from fastapi import FastAPI, Header, HTTPException
app = FastAPI()
@app.get('/api/items')
async def get_items(x_api_version: str | None = Header(None)):
if x_api_version == '1':
return {'version': 1, 'items': ['apple', 'banana']}
elif x_api_version == '2':
return {'version': 2, 'items': ['orange', 'grape']}
else:
raise HTTPException(status_code=400, detail='Unsupported API version')from fastapi import FastAPI
app = FastAPI()
@app.get('/items')
async def read_items(version: int = 1):
if version == 1:
return {'items': ['pen', 'notebook']}
elif version == 2:
return {'items': ['pencil', 'eraser']}
else:
return {'error': 'Unsupported version'}/v1/users, and version 2 uses header versioning with X-API-Version: 2 on the same /users path. How can you implement this correctly?Pass the test and this pattern moves unknown