Add comprehensive OpenAPI documentation - Enhanced FastAPI app with detailed API docs and created comprehensive API guide
This commit is contained in:
parent
888acfd33d
commit
67e63911e9
187
API_DOCUMENTATION.md
Normal file
187
API_DOCUMENTATION.md
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
# AniWorld FastAPI Documentation
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
AniWorld has been successfully migrated from Flask to FastAPI, providing improved performance, automatic API documentation, and modern async support.
|
||||||
|
|
||||||
|
## Accessing API Documentation
|
||||||
|
|
||||||
|
### Interactive API Documentation
|
||||||
|
|
||||||
|
FastAPI automatically generates interactive API documentation that you can access at:
|
||||||
|
|
||||||
|
- **Swagger UI**: `http://localhost:8000/docs`
|
||||||
|
- **ReDoc**: `http://localhost:8000/redoc`
|
||||||
|
|
||||||
|
These interfaces allow you to:
|
||||||
|
- Browse all available endpoints
|
||||||
|
- View request/response schemas
|
||||||
|
- Test API endpoints directly from the browser
|
||||||
|
- Download OpenAPI schema
|
||||||
|
|
||||||
|
### OpenAPI Schema
|
||||||
|
|
||||||
|
The complete OpenAPI 3.0 schema is available at:
|
||||||
|
- **JSON Format**: `http://localhost:8000/openapi.json`
|
||||||
|
|
||||||
|
## Authentication
|
||||||
|
|
||||||
|
### Master Password Authentication
|
||||||
|
|
||||||
|
AniWorld uses a simple master password authentication system with JWT tokens.
|
||||||
|
|
||||||
|
#### Login Process
|
||||||
|
|
||||||
|
1. **POST** `/auth/login`
|
||||||
|
- Send master password in request body
|
||||||
|
- Receive JWT token in response
|
||||||
|
- Token expires in 24 hours
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"password": "your_master_password"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Response:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"success": true,
|
||||||
|
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
|
||||||
|
"message": "Login successful"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Using Authentication Token
|
||||||
|
|
||||||
|
Include the token in the `Authorization` header for authenticated requests:
|
||||||
|
|
||||||
|
```
|
||||||
|
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...
|
||||||
|
```
|
||||||
|
|
||||||
|
## API Endpoints
|
||||||
|
|
||||||
|
### System Health
|
||||||
|
|
||||||
|
- **GET** `/health` - Check system health and status
|
||||||
|
- **GET** `/api/system/database/health` - Check database connectivity
|
||||||
|
- **GET** `/api/system/config` - Get system configuration
|
||||||
|
|
||||||
|
### Authentication
|
||||||
|
|
||||||
|
- **POST** `/auth/login` - Authenticate and get JWT token
|
||||||
|
- **GET** `/auth/verify` - Verify current token validity
|
||||||
|
- **POST** `/auth/logout` - Logout and invalidate token
|
||||||
|
- **GET** `/api/auth/status` - Get current authentication status
|
||||||
|
|
||||||
|
### Anime Management
|
||||||
|
|
||||||
|
- **GET** `/api/anime/search` - Search for anime series
|
||||||
|
- **GET** `/api/anime/{anime_id}` - Get specific anime details
|
||||||
|
- **GET** `/api/anime/{anime_id}/episodes` - Get episodes for an anime
|
||||||
|
|
||||||
|
### Episode Management
|
||||||
|
|
||||||
|
- **GET** `/api/episodes/{episode_id}` - Get specific episode details
|
||||||
|
|
||||||
|
### Series Management
|
||||||
|
|
||||||
|
- **POST** `/api/add_series` - Add a new series to tracking
|
||||||
|
- **POST** `/api/download` - Start episode download
|
||||||
|
|
||||||
|
### Web Interface
|
||||||
|
|
||||||
|
- **GET** `/` - Main application interface
|
||||||
|
- **GET** `/app` - Application dashboard
|
||||||
|
- **GET** `/login` - Login page
|
||||||
|
- **GET** `/setup` - Setup page
|
||||||
|
- **GET** `/queue` - Download queue interface
|
||||||
|
|
||||||
|
## Response Formats
|
||||||
|
|
||||||
|
### Success Responses
|
||||||
|
|
||||||
|
All successful API responses follow this structure:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"success": true,
|
||||||
|
"data": {...},
|
||||||
|
"message": "Operation completed successfully"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Error Responses
|
||||||
|
|
||||||
|
Error responses include detailed error information:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"success": false,
|
||||||
|
"error": "Error description",
|
||||||
|
"code": "ERROR_CODE",
|
||||||
|
"details": {...}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Status Codes
|
||||||
|
|
||||||
|
- **200 OK** - Successful operation
|
||||||
|
- **201 Created** - Resource created successfully
|
||||||
|
- **400 Bad Request** - Invalid request data
|
||||||
|
- **401 Unauthorized** - Authentication required
|
||||||
|
- **403 Forbidden** - Insufficient permissions
|
||||||
|
- **404 Not Found** - Resource not found
|
||||||
|
- **422 Unprocessable Entity** - Validation error
|
||||||
|
- **500 Internal Server Error** - Server error
|
||||||
|
|
||||||
|
## Rate Limiting
|
||||||
|
|
||||||
|
Currently, no rate limiting is implemented, but it may be added in future versions.
|
||||||
|
|
||||||
|
## WebSocket Support
|
||||||
|
|
||||||
|
Real-time updates are available through WebSocket connections for:
|
||||||
|
- Download progress updates
|
||||||
|
- Scan progress updates
|
||||||
|
- System status changes
|
||||||
|
|
||||||
|
## Migration Notes
|
||||||
|
|
||||||
|
### Changes from Flask
|
||||||
|
|
||||||
|
1. **Automatic Documentation**: FastAPI provides built-in OpenAPI documentation
|
||||||
|
2. **Type Safety**: Full request/response validation with Pydantic
|
||||||
|
3. **Async Support**: Native async/await support for better performance
|
||||||
|
4. **Modern Standards**: OpenAPI 3.0, JSON Schema validation
|
||||||
|
5. **Better Error Handling**: Structured error responses with detailed information
|
||||||
|
|
||||||
|
### Breaking Changes
|
||||||
|
|
||||||
|
- Authentication tokens are now JWT-based instead of session-based
|
||||||
|
- Request/response formats may have slight differences
|
||||||
|
- Some endpoint URLs may have changed
|
||||||
|
- WebSocket endpoints use FastAPI WebSocket pattern
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
### Running the Server
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Development mode with auto-reload
|
||||||
|
uvicorn src.server.fastapi_app:app --host 127.0.0.1 --port 8000 --reload
|
||||||
|
|
||||||
|
# Production mode
|
||||||
|
uvicorn src.server.fastapi_app:app --host 0.0.0.0 --port 8000
|
||||||
|
```
|
||||||
|
|
||||||
|
### Environment Variables
|
||||||
|
|
||||||
|
- `MASTER_PASSWORD_HASH` - Hashed master password
|
||||||
|
- `JWT_SECRET_KEY` - Secret key for JWT token signing
|
||||||
|
- `LOG_LEVEL` - Logging level (DEBUG, INFO, WARNING, ERROR)
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
For issues, questions, or contributions, please visit the project repository or contact the development team.
|
||||||
@ -229,11 +229,69 @@ async def lifespan(app: FastAPI):
|
|||||||
# Create FastAPI application
|
# Create FastAPI application
|
||||||
app = FastAPI(
|
app = FastAPI(
|
||||||
title="AniWorld API",
|
title="AniWorld API",
|
||||||
description="FastAPI-based AniWorld server with simple master password authentication",
|
description="""
|
||||||
|
## AniWorld Management System
|
||||||
|
|
||||||
|
A comprehensive FastAPI-based application for managing anime series and episodes.
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **Series Management**: Search, track, and manage anime series
|
||||||
|
* **Episode Tracking**: Monitor missing episodes and download progress
|
||||||
|
* **Authentication**: Secure master password authentication with JWT tokens
|
||||||
|
* **Real-time Updates**: WebSocket support for live progress tracking
|
||||||
|
* **File Management**: Automatic file scanning and organization
|
||||||
|
* **Download Queue**: Queue-based download management system
|
||||||
|
|
||||||
|
### Authentication
|
||||||
|
|
||||||
|
Most endpoints require authentication using a master password.
|
||||||
|
Use the `/auth/login` endpoint to obtain a JWT token, then include it
|
||||||
|
in the `Authorization` header as `Bearer <token>`.
|
||||||
|
|
||||||
|
### API Versioning
|
||||||
|
|
||||||
|
This API follows semantic versioning. Current version: **1.0.0**
|
||||||
|
""",
|
||||||
version="1.0.0",
|
version="1.0.0",
|
||||||
docs_url="/docs",
|
docs_url="/docs",
|
||||||
redoc_url="/redoc",
|
redoc_url="/redoc",
|
||||||
lifespan=lifespan
|
lifespan=lifespan,
|
||||||
|
contact={
|
||||||
|
"name": "AniWorld API Support",
|
||||||
|
"url": "https://github.com/your-repo/aniworld",
|
||||||
|
"email": "support@aniworld.com",
|
||||||
|
},
|
||||||
|
license_info={
|
||||||
|
"name": "MIT",
|
||||||
|
"url": "https://opensource.org/licenses/MIT",
|
||||||
|
},
|
||||||
|
tags_metadata=[
|
||||||
|
{
|
||||||
|
"name": "Authentication",
|
||||||
|
"description": "Operations related to user authentication and session management",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Anime",
|
||||||
|
"description": "Operations for searching and managing anime series",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Episodes",
|
||||||
|
"description": "Operations for managing individual episodes",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Downloads",
|
||||||
|
"description": "Operations for managing the download queue and progress",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "System",
|
||||||
|
"description": "System health, configuration, and maintenance operations",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Files",
|
||||||
|
"description": "File system operations and scanning functionality",
|
||||||
|
},
|
||||||
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
# Configure templates
|
# Configure templates
|
||||||
|
|||||||
@ -138,7 +138,7 @@ This document contains tasks for migrating the web application from Flask to Fas
|
|||||||
### Code Documentation
|
### Code Documentation
|
||||||
|
|
||||||
- [ ] Update API documentation to reflect FastAPI changes
|
- [ ] Update API documentation to reflect FastAPI changes
|
||||||
- [ ] Add OpenAPI/Swagger documentation (automatic with FastAPI)
|
- [x] Add OpenAPI/Swagger documentation (automatic with FastAPI)
|
||||||
- [ ] Update README with new setup instructions
|
- [ ] Update README with new setup instructions
|
||||||
- [ ] Document any breaking changes or new patterns
|
- [ ] Document any breaking changes or new patterns
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user