first commit
This commit is contained in:
262
README.md
Normal file
262
README.md
Normal file
@@ -0,0 +1,262 @@
|
||||
# Django Enhanced API Docs
|
||||
|
||||
Enhanced API documentation for Django REST Framework using drf-spectacular with custom schema generation, automatic parameter descriptions, and code samples.
|
||||
|
||||
## Features
|
||||
|
||||
- **Optional API Documentation**: Enable/disable API docs via environment variable
|
||||
- **Enhanced Schema Generation**: Automatic parameter descriptions for filters, search, ordering, and pagination
|
||||
- **Language Support**: Built-in support for translatable fields with language parameter
|
||||
- **Code Samples**: Automatic cURL code sample generation for all endpoints
|
||||
- **Custom Tags**: Organize endpoints with custom tags mapped to ViewSet classes
|
||||
- **Comprehensive Error Responses**: Automatic addition of standard HTTP error responses
|
||||
- **Pagination Examples**: Dynamic pagination URL examples based on actual endpoints
|
||||
|
||||
## Installation
|
||||
|
||||
### Via pip (when published)
|
||||
|
||||
```bash
|
||||
pip install django-enhanced-apidocs
|
||||
```
|
||||
|
||||
### Via Git (development)
|
||||
|
||||
```bash
|
||||
pip install git+https://github.com/yourusername/django-enhanced-apidocs.git
|
||||
```
|
||||
|
||||
### As Git Submodule (development)
|
||||
|
||||
```bash
|
||||
cd your-django-project
|
||||
git submodule add https://github.com/yourusername/django-enhanced-apidocs.git
|
||||
pip install -e ./django-enhanced-apidocs
|
||||
```
|
||||
|
||||
### Editable Installation (local development)
|
||||
|
||||
```bash
|
||||
pip install -e /path/to/django-enhanced-apidocs
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
### 1. Add to INSTALLED_APPS
|
||||
|
||||
Add the following to your Django `settings.py`:
|
||||
|
||||
```python
|
||||
# Enable API documentation (default: enabled in DEBUG mode)
|
||||
ENABLE_API_DOCS = os.environ.get('ENABLE_API_DOCS', str(DEBUG)).lower() in ('true', '1', 'yes')
|
||||
|
||||
INSTALLED_APPS = [
|
||||
# ... your other apps
|
||||
]
|
||||
|
||||
# Conditionally add API documentation
|
||||
if ENABLE_API_DOCS:
|
||||
INSTALLED_APPS.extend(['drf_spectacular', 'django_enhanced_apidocs'])
|
||||
```
|
||||
|
||||
### 2. Configure REST Framework
|
||||
|
||||
```python
|
||||
REST_FRAMEWORK = {
|
||||
'DEFAULT_AUTHENTICATION_CLASSES': [
|
||||
'rest_framework.authentication.BasicAuthentication',
|
||||
'rest_framework.authentication.SessionAuthentication',
|
||||
],
|
||||
'DEFAULT_PERMISSION_CLASSES': [
|
||||
'rest_framework.permissions.IsAuthenticated',
|
||||
],
|
||||
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
|
||||
'PAGE_SIZE': 20,
|
||||
}
|
||||
|
||||
# Set schema class when API docs are enabled
|
||||
if ENABLE_API_DOCS:
|
||||
REST_FRAMEWORK['DEFAULT_SCHEMA_CLASS'] = 'django_enhanced_apidocs.schema.CustomAutoSchema'
|
||||
```
|
||||
|
||||
### 3. Import Spectacular Settings
|
||||
|
||||
```python
|
||||
# In settings.py
|
||||
if ENABLE_API_DOCS:
|
||||
from django_enhanced_apidocs.conf import get_spectacular_settings
|
||||
|
||||
# Pass your dotenv config dict
|
||||
SPECTACULAR_SETTINGS = get_spectacular_settings(config)
|
||||
```
|
||||
|
||||
The `config` parameter should be a dictionary with at least:
|
||||
- `LOCAL_SWAGGER_HOST` (optional): Server URL for API documentation (default: 'http://localhost:8000')
|
||||
|
||||
You can also override settings after import:
|
||||
|
||||
```python
|
||||
if ENABLE_API_DOCS:
|
||||
from django_enhanced_apidocs.conf import get_spectacular_settings
|
||||
|
||||
SPECTACULAR_SETTINGS = get_spectacular_settings(config)
|
||||
|
||||
# Customize settings
|
||||
SPECTACULAR_SETTINGS['TITLE'] = 'My API'
|
||||
SPECTACULAR_SETTINGS['DESCRIPTION'] = 'My API Description'
|
||||
SPECTACULAR_SETTINGS['VERSION'] = '2.0.0'
|
||||
SPECTACULAR_SETTINGS['CONTACT'] = {'email': 'api@example.com'}
|
||||
```
|
||||
|
||||
### 4. Include URLs
|
||||
|
||||
Add documentation URLs to your `urls.py`:
|
||||
|
||||
```python
|
||||
from django.urls import path, include
|
||||
from django.conf import settings
|
||||
|
||||
urlpatterns = [
|
||||
# Your API endpoints
|
||||
path('api/v1/', include('your_app.urls')),
|
||||
]
|
||||
|
||||
# Conditionally include API documentation URLs
|
||||
if getattr(settings, 'ENABLE_API_DOCS', False):
|
||||
urlpatterns.append(path('', include('django_enhanced_apidocs.urls')))
|
||||
```
|
||||
|
||||
This adds the following endpoints:
|
||||
- `/swagger/` - Swagger UI
|
||||
- `/redoc/` - ReDoc UI
|
||||
- `/api/schema/` - OpenAPI JSON schema
|
||||
|
||||
## Environment Variables
|
||||
|
||||
Control API documentation via environment variables:
|
||||
|
||||
```bash
|
||||
# Enable API docs (default: true in DEBUG mode)
|
||||
ENABLE_API_DOCS=true
|
||||
|
||||
# Set custom server URL for API docs
|
||||
LOCAL_SWAGGER_HOST=http://localhost:8000
|
||||
```
|
||||
|
||||
Or in your `.env` file:
|
||||
|
||||
```
|
||||
ENABLE_API_DOCS=false # Disable in production
|
||||
LOCAL_SWAGGER_HOST=https://api.example.com
|
||||
```
|
||||
|
||||
## Custom Tags Configuration
|
||||
|
||||
The package comes with pre-configured tags for common Django apps. You can customize them in your settings:
|
||||
|
||||
```python
|
||||
if ENABLE_API_DOCS:
|
||||
from django_enhanced_apidocs.conf import get_spectacular_settings
|
||||
|
||||
SPECTACULAR_SETTINGS = get_spectacular_settings(config)
|
||||
|
||||
# Add custom tags
|
||||
SPECTACULAR_SETTINGS['TAGS'] = [
|
||||
{
|
||||
'name': 'Products',
|
||||
'description': 'Product management endpoints',
|
||||
'viewsets': ['ProductViewSet', 'ProductVersionViewSet']
|
||||
},
|
||||
{
|
||||
'name': 'Users',
|
||||
'description': 'User management endpoints',
|
||||
'viewsets': ['UserViewSet']
|
||||
},
|
||||
]
|
||||
```
|
||||
|
||||
## Features in Detail
|
||||
|
||||
### Automatic Parameter Descriptions
|
||||
|
||||
The package automatically enhances query parameters with human-readable descriptions:
|
||||
|
||||
- **Search**: Describes which fields are searched
|
||||
- **Ordering**: Explains ascending/descending syntax
|
||||
- **Pagination**: Documents page number format
|
||||
- **Filters**: Generates descriptions based on field types (boolean, integer, foreign key, etc.)
|
||||
|
||||
### Language Parameter
|
||||
|
||||
For projects using translatable fields (e.g., `django-translatable-fields`), the package automatically adds a `lang` parameter to GET endpoints:
|
||||
|
||||
```
|
||||
?lang=en # Returns English translations
|
||||
?lang=de # Returns German translations
|
||||
?lang=fr # Returns French translations
|
||||
```
|
||||
|
||||
### Automatic cURL Code Samples
|
||||
|
||||
Every endpoint includes a ready-to-use cURL command with:
|
||||
- Correct HTTP method
|
||||
- Authentication headers
|
||||
- Request body (for POST/PUT/PATCH)
|
||||
- Sample data based on serializer schema
|
||||
|
||||
### Standard Error Responses
|
||||
|
||||
All endpoints automatically document standard HTTP error responses:
|
||||
- 400 Bad Request
|
||||
- 401 Unauthorized
|
||||
- 403 Forbidden
|
||||
- 404 Not Found
|
||||
- 409 Conflict
|
||||
- 500 Internal Server Error
|
||||
|
||||
## Usage Example
|
||||
|
||||
After installation, access your API documentation at:
|
||||
|
||||
- **Swagger UI**: http://localhost:8000/swagger/
|
||||
- **ReDoc**: http://localhost:8000/redoc/
|
||||
- **OpenAPI Schema**: http://localhost:8000/api/schema/
|
||||
|
||||
## Disabling in Production
|
||||
|
||||
To disable API documentation in production:
|
||||
|
||||
```bash
|
||||
# In your production .env file
|
||||
ENABLE_API_DOCS=false
|
||||
```
|
||||
|
||||
Or in your settings:
|
||||
|
||||
```python
|
||||
ENABLE_API_DOCS = False
|
||||
```
|
||||
|
||||
When disabled:
|
||||
- `/swagger/`, `/redoc/`, `/api/schema/` return 404
|
||||
- `drf_spectacular` and `django_enhanced_apidocs` are not loaded
|
||||
- No performance impact on API endpoints
|
||||
|
||||
## Requirements
|
||||
|
||||
- Python >= 3.9
|
||||
- Django >= 4.0
|
||||
- djangorestframework >= 3.14
|
||||
- drf-spectacular >= 0.26
|
||||
|
||||
## License
|
||||
|
||||
MIT License - see LICENSE file for details
|
||||
|
||||
## Contributing
|
||||
|
||||
Contributions are welcome! Please feel free to submit a Pull Request.
|
||||
|
||||
## Credits
|
||||
|
||||
Created by KBS GmbH
|
||||
Reference in New Issue
Block a user