Browse Source
- Add Product Requirements Document (PRD.md) with P0-P3 user stories - Add Roadmap.md with future ideas and lessons learned - Add .specify/memory/constitution.md with FastAPI principles Co-Authored-By: Claude Opus 4.6 <[email protected]>pull/14976/head
3 changed files with 302 additions and 0 deletions
@ -0,0 +1,83 @@ |
|||
<!-- |
|||
Sync Impact Report: |
|||
- Version change: N/A → 1.0.0 (initial creation) |
|||
- New constitution - no prior version |
|||
- Added sections: 5 core principles, 2 additional sections, governance |
|||
- Templates requiring updates: N/A - this is the initial version |
|||
--> |
|||
|
|||
# FastAPI Constitution |
|||
|
|||
## Core Principles |
|||
|
|||
### I. Standards-Based |
|||
|
|||
FastAPI MUST be built on open standards for APIs. All features MUST support OpenAPI (formerly Swagger) and JSON Schema. The framework MUST generate compliant API documentation automatically. Rationale: Ensures interoperability and automatic tooling support (client generation, documentation). |
|||
|
|||
### II. Type Safety (NON-NEGOTIABLE) |
|||
|
|||
FastAPI MUST leverage Python type hints for request validation, response serialization, and automatic documentation. Type checking MUST pass with mypy at strict level. Rationale: Catches bugs at development time, enables IDE autocomplete, powers automatic documentation. |
|||
|
|||
### III. Test-First Development |
|||
|
|||
All new features MUST have tests written before implementation. The framework MUST maintain comprehensive test coverage. Tests MUST verify both functionality and API contract compliance. Rationale: FastAPI is a framework used in production by millions; regressions are costly. |
|||
|
|||
### IV. Performance |
|||
|
|||
FastAPI MUST achieve performance comparable to NodeJS and Go frameworks. Async support MUST be first-class with no performance penalty for sync code paths. Rationale: Performance is a primary feature claim; benchmarks MUST remain competitive. |
|||
|
|||
### V. Developer Experience |
|||
|
|||
The framework MUST provide intuitive APIs with minimal boilerplate. Error messages MUST be clear and actionable. Documentation MUST include runnable examples. Rationale: "Fast to code" is a core value proposition; reduces developer cognitive load. |
|||
|
|||
## Additional Constraints |
|||
|
|||
### Technology Stack |
|||
|
|||
- **Language**: Python 3.8+ (subject to Python release support policy) |
|||
- **Core Dependencies**: Starlette for routing, Pydantic for data validation |
|||
- **Async**: First-class support for asyncio |
|||
- **Standards**: OpenAPI 3.0+, JSON Schema |
|||
|
|||
### Compatibility |
|||
|
|||
- **Python Versions**: Support Python versions according to PEP 594 |
|||
- **Breaking Changes**: Follow semantic versioning; MAJOR version bumps require deprecation warnings in prior minor releases |
|||
- **Dependencies**: Pin minimal required versions; allow compatible updates |
|||
|
|||
## Development Workflow |
|||
|
|||
### Code Quality Gates |
|||
|
|||
- All PRs MUST pass type checking (mypy --strict) |
|||
- All PRs MUST maintain or increase test coverage |
|||
- All PRs MUST include documentation for new features |
|||
- All PRs MUST pass CI/CD pipeline (lint, test, coverage) |
|||
|
|||
### Contribution Process |
|||
|
|||
1. Fork and create feature branch |
|||
2. Write tests first (must fail) |
|||
3. Implement feature |
|||
4. Ensure tests pass and coverage maintained |
|||
5. Update documentation |
|||
6. Submit PR with description |
|||
|
|||
### Release Process |
|||
|
|||
- Follow semantic versioning strictly |
|||
- Maintain changelog |
|||
- Publish release notes |
|||
- Ensure backwards compatibility within MAJOR version |
|||
|
|||
## Governance |
|||
|
|||
The FastAPI Constitution supersedes all other development practices. Amendments to this constitution MUST be documented with: |
|||
|
|||
1. Rationale for the change |
|||
2. Impact assessment on existing workflows |
|||
3. Migration plan if applicable |
|||
|
|||
All PRs and code reviews MUST verify compliance with these principles. Complexity MUST be justified against simpler alternatives. |
|||
|
|||
**Version**: 1.0.0 | **Ratified**: 2026-02-23 | **Last Amended**: 2026-02-23 |
|||
@ -0,0 +1,170 @@ |
|||
# PRD: FastAPI Framework |
|||
|
|||
FastAPI is a modern, high-performance Python web framework for building APIs with Python type hints. This document outlines the product requirements for the FastAPI framework itself. |
|||
|
|||
## Implementation Status |
|||
|
|||
The core framework is mature and well-established. This PRD tracks major feature initiatives and improvements beyond the stable release. |
|||
|
|||
## User Stories |
|||
|
|||
### P0: Core Framework (Must Have) — ✅ Complete |
|||
|
|||
**As a** Python developer, |
|||
**I want** to build APIs quickly using type hints, |
|||
**So that** I get automatic validation, documentation, and IDE support. |
|||
|
|||
- [P0-US1] ✅ Route definition via decorators with path parameters |
|||
- [P0-US2] ✅ Query, header, and cookie parameter extraction with type hints |
|||
- [P0-US3] ✅ Request body validation using Pydantic models |
|||
- [P0-US4] ✅ Automatic OpenAPI schema generation |
|||
- [P0-US5] ✅ Interactive API documentation (Swagger UI + ReDoc) |
|||
- [P0-US6] ✅ Dependency injection system |
|||
- [P0-US7] ✅ Error handling with custom exception handlers |
|||
- [P0-US8] ✅ Response model typing with automatic serialization |
|||
|
|||
**Acceptance Criteria:** |
|||
- All core HTTP methods supported (GET, POST, PUT, DELETE, PATCH, OPTIONS) |
|||
- Type hints enable validation and documentation without boilerplate |
|||
- OpenAPI 3.0+ compliant schema generation |
|||
|
|||
### P1: Async & Performance (Must Have) — ✅ Complete |
|||
|
|||
**As a** developer building high-throughput APIs, |
|||
**I want** first-class async support, |
|||
**So that** I can handle many concurrent connections efficiently. |
|||
|
|||
- [P1-US1] ✅ Async route handlers with `async def` |
|||
- [P1-US2] ✅ Background tasks for deferred processing |
|||
- [P1-US3] ✅ WebSocket support for real-time communication |
|||
- [P1-US4] ✅ Middleware stack (request/response processing) |
|||
- [P1-US5] ✅ Sub-application mounting for modular apps |
|||
|
|||
**Acceptance Criteria:** |
|||
- Async handlers perform comparably to Node.js/Go |
|||
- WebSocket connections maintained efficiently |
|||
- Middleware applies correctly to all routes |
|||
|
|||
### P1: Security & Authentication (Should Have) — ✅ Complete |
|||
|
|||
**As a** developer building secure APIs, |
|||
**I want** built-in authentication and authorization, |
|||
**So that** I don't have to implement common patterns from scratch. |
|||
|
|||
- [P1-US6] ✅ OAuth2 password flow implementation |
|||
- [P1-US7] ✅ JWT token support |
|||
- [P1-US8] ✅ CORS middleware |
|||
- [P1-US9] ✅ HTTP Basic Auth |
|||
- [P1-US10] ✅ Dependency-based authorization scopes |
|||
|
|||
**Acceptance Criteria:** |
|||
- OAuth2 with JWT tokens works out of the box |
|||
- Security schemes documented in OpenAPI spec |
|||
|
|||
### P2: Developer Experience (Should Have) — ✅ Complete |
|||
|
|||
**As a** FastAPI user, |
|||
**I want** excellent tooling and error messages, |
|||
**So that** I can develop quickly and debug easily. |
|||
|
|||
- [P2-US1] ✅ FastAPI CLI for running and generating projects |
|||
- [P2-US2] ✅ Clear validation error messages with field locations |
|||
- [P2-US3] ✅ Static type checking support with mypy |
|||
- [P2-US4] ✅ Response model documentation in OpenAPI |
|||
|
|||
**Acceptance Criteria:** |
|||
- CLI provides `fastapi dev` and `fastapi run` |
|||
- Error responses include details for each validation failure |
|||
- Type hints work with pyright/mypy |
|||
|
|||
### P2: Extensibility (Should Have) — ✅ Complete |
|||
|
|||
**As a** framework contributor, |
|||
**I want** to extend FastAPI without modifying core code, |
|||
**So that** I can add custom behaviors. |
|||
|
|||
- [P2-US5] ✅ Custom response classes |
|||
- [P2-US6] ✅ Custom parameter types |
|||
- [P2-US7] ✅ Custom middleware interfaces |
|||
- [P2-US8] ✅ OpenAPI extension hooks |
|||
|
|||
**Acceptance Criteria:** |
|||
- Extensions integrate seamlessly with FastAPI |
|||
- Custom components documented in OpenAPI |
|||
|
|||
### P3: Advanced Features (Could Have) — ✅ Complete |
|||
|
|||
**As an** advanced user, |
|||
**I want** sophisticated deployment options, |
|||
**So that** I can optimize for production. |
|||
|
|||
- [P3-US1] ✅ Testing utilities with TestClient |
|||
- [P3-US2] ✅ Dependency overrides for testing |
|||
- [P3-US3] ✅ ASGI server integration (Uvicorn, Hypercorn) |
|||
- [P3-US4] ✅ Gunicorn worker support |
|||
- [P3-US5] ✅ Docker integration and multi-stage builds |
|||
|
|||
**Acceptance Criteria:** |
|||
- Testing patterns documented and working |
|||
- Production deployment guides available |
|||
|
|||
## Architecture: Starlette + Pydantic |
|||
|
|||
FastAPI builds on two key libraries: |
|||
|
|||
| Component | Role | |
|||
|-----------|------| |
|||
| Starlette | Routing, middleware, ASGI handler | |
|||
| Pydantic | Data validation, serialization, OpenAPI generation | |
|||
|
|||
### Request/Response Flow |
|||
|
|||
``` |
|||
Request → ASGI Handler → Middleware → Route Handler → Dependency Injection |
|||
↓ |
|||
Response ← Serialization ← Pydantic Model ← Return Value |
|||
``` |
|||
|
|||
### Key Components |
|||
|
|||
| Component | File | Role | |
|||
|-----------|------|------| |
|||
| FastAPI app | `fastapi/applications.py` | Main application class | |
|||
| Routing | `fastapi/routing.py` | Route resolution, OpenAPI generation | |
|||
| Dependencies | `fastapi/dependencies.py` | Dependency injection system | |
|||
| Params | `fastapi/params.py` | Parameter definitions | |
|||
| Response | `fastapi/response.py` | Response handling | |
|||
| OpenAPI | `fastapi/openapi/` | Schema generation | |
|||
|
|||
## Non-Functional Requirements |
|||
|
|||
### Performance |
|||
- Request/response latency comparable to Node.js and Go |
|||
- Minimal overhead for sync handlers |
|||
- Efficient async task scheduling |
|||
|
|||
### Compatibility |
|||
- Python 3.8+ (subject to PEP 594) |
|||
- OpenAPI 3.0+ and JSON Schema |
|||
- ASGI specification compliance |
|||
|
|||
### Security |
|||
- Input validation via Pydantic |
|||
- Secure defaults for authentication |
|||
- No sensitive data in error messages |
|||
|
|||
### Reliability |
|||
- Comprehensive test coverage |
|||
- Deprecation warnings for breaking changes |
|||
- Stable API surface within major versions |
|||
|
|||
## Test Scenarios |
|||
|
|||
1. **Basic API**: Create endpoint, verify request/response |
|||
2. **Validation**: Send invalid data, verify 422 error with details |
|||
3. **Async**: Test async handler with concurrent requests |
|||
4. **Dependencies**: Verify dependency injection ordering |
|||
5. **Auth**: Test OAuth2 flow end-to-end |
|||
6. **Documentation**: Verify OpenAPI schema accuracy |
|||
7. **Middleware**: Test request/response modification |
|||
8. **Sub-app**: Mount app, verify routing isolation |
|||
@ -0,0 +1,49 @@ |
|||
# Roadmap |
|||
|
|||
Future enhancements and improvements for the FastAPI framework. |
|||
|
|||
## Completed |
|||
|
|||
All P0–P3 user stories from the original PRD are implemented. See [PRD.md](PRD.md) for details. |
|||
|
|||
Key milestones achieved: |
|||
- Core routing with type hints and automatic validation |
|||
- Async support with first-class performance |
|||
- OAuth2, JWT, and security utilities |
|||
- FastAPI CLI and developer tooling |
|||
- Extensibility via custom components |
|||
- Comprehensive testing utilities |
|||
- Production deployment options |
|||
|
|||
## Ideas (Unprioritized) |
|||
|
|||
These are potential directions. None have user stories or acceptance criteria yet — they need to be scoped before work begins. |
|||
|
|||
- **Improved Error Messages**: More helpful validation errors with suggestions |
|||
- **Typed Middleware**: Type-safe middleware definitions |
|||
- **Enhanced OpenAPI**: More detailed schema generation options |
|||
- **Plugin System**: Formal extension mechanism for third-party integrations |
|||
- **Native gRPC Support**: gRPC reflection and transcoding |
|||
- **GraphQL Integration**: More mature GraphQL schema generation |
|||
- **Better Type Inference**: Improved type hints for complex scenarios |
|||
- **Streaming Responses**: Native support for Server-Sent Events |
|||
- **HTTP/2 Support**: Push promises and header compression |
|||
- **Zero-Config Deployments**: Simplified production setup |
|||
|
|||
## Won't Have |
|||
|
|||
- **Built-in Database ORM**: Users should choose their own (SQLAlchemy, Prisma, etc.) |
|||
- **Built-in Authentication Provider**: Identity management is outside framework scope |
|||
- **Template Engine**: Use external libraries (Jinja2, etc.) directly |
|||
- **Full-Stack Framework**: FastAPI remains focused on APIs only |
|||
|
|||
## Lessons Learned |
|||
|
|||
From years of maintaining FastAPI as a community-driven framework: |
|||
|
|||
1. **Good**: Type hints provide excellent developer experience and IDE support |
|||
2. **Good**: OpenAPI integration enables rich ecosystem (clients, docs, testing) |
|||
3. **Good**: Dependency injection promotes loose coupling and testability |
|||
4. **Issue**: Balancing new features with stability is challenging |
|||
5. **Fix**: Semantic versioning with clear deprecation paths |
|||
6. **Fix**: Comprehensive documentation with examples |
|||
Loading…
Reference in new issue