Django integration for APIDOG - Export, sync, and manage OpenAPI schemas
Project description
ennam-django-apidog
Django integration for APIDOG - Export, sync, and manage OpenAPI schemas between Django REST Framework and APIDOG Cloud.
Features
- Export OpenAPI Schema - Generate OpenAPI 3.0 schemas from your Django REST Framework APIs
- Sync with APIDOG Cloud - Push and pull schemas to/from APIDOG Cloud
- Compare Schemas - Compare local schemas with cloud versions
- Environment Management - Generate environment configurations for different deployments
- Schema Hooks - Custom drf-spectacular extensions for handling edge cases
- Templates - Ready-to-use Makefile, Docker Compose, and configuration files
Installation
pip install ennam-django-apidog
Quick Start
1. Add to INSTALLED_APPS
# settings.py
INSTALLED_APPS = [
...
'rest_framework',
'drf_spectacular',
'ennam_django_apidog',
]
2. Configure DRF Spectacular
# settings.py
REST_FRAMEWORK = {
'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
}
SPECTACULAR_SETTINGS = {
'TITLE': 'Your API',
'DESCRIPTION': 'Your API description',
'VERSION': '1.0.0',
'SERVE_INCLUDE_SCHEMA': False,
}
3. Add URL Routes
# urls.py
from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView
urlpatterns = [
...
path('api/schema/', SpectacularAPIView.as_view(), name='schema'),
path('api/schema/swagger-ui/', SpectacularSwaggerView.as_view(url_name='schema'), name='swagger-ui'),
]
4. Initialize APIDOG
python manage.py apidog init
5. Export Schema
python manage.py apidog export
Configuration
Configure APIDOG settings in your Django settings.py:
APIDOG_SETTINGS = {
# Output directory for schemas (default: apidog/ at project root)
'OUTPUT_DIR': None,
# Schema endpoint (default: /api/schema/)
'SCHEMA_ENDPOINT': '/api/schema/',
# APIDOG Cloud credentials
'PROJECT_ID': 'your-project-id', # or use env var APIDOG_PROJECT_ID
'TOKEN': 'your-api-token', # or use env var APIDOG_TOKEN
# API configuration
'API_VERSION': '2024-03-28',
'API_BASE_URL': 'https://api.apidog.com/v1',
'TIMEOUT': 60,
# Environment configurations
'ENVIRONMENTS': {
'local': {
'name': 'Local Development',
'base_url': 'http://localhost:8000',
},
'production': {
'name': 'Production',
'base_url': 'https://api.yourapp.com',
},
},
}
Or use environment variables:
export APIDOG_PROJECT_ID="your-project-id"
export APIDOG_TOKEN="your-api-token"
Commands
Initialize Project
# Create apidog directory and templates
python manage.py apidog init
# Force overwrite existing files
python manage.py apidog init --force
Export Schema
# Export as JSON (default)
python manage.py apidog export
# Export as YAML
python manage.py apidog export --format yaml
# Custom output directory
python manage.py apidog export --output /path/to/output/
Validate Schema
# Validate latest schema
python manage.py apidog validate
# Validate specific file
python manage.py apidog validate --file /path/to/schema.json
Push to APIDOG Cloud
# Push latest schema
python manage.py apidog push
# Push specific file
python manage.py apidog push --file /path/to/schema.json
Pull from APIDOG Cloud
# Pull to default location
python manage.py apidog pull
# Pull to specific file
python manage.py apidog pull --output /path/to/output.json
Compare Schemas
# Compare local with cloud
python manage.py apidog compare
Generate Environment Config
python manage.py apidog env-config
Using Schema Hooks
Add custom schema hooks to handle edge cases:
# settings.py
SPECTACULAR_SETTINGS = {
...
'PREPROCESSING_HOOKS': [
'ennam_django_apidog.schema_hooks.preprocess_exclude_problematic_views',
],
'EXTENSIONS': [
'ennam_django_apidog.schema_hooks.BaseSerializerExtension',
],
}
Makefile Commands
After running apidog init, use the Makefile for shortcuts:
# Show help
make -f Makefile.apidog help
# Export schema
make -f Makefile.apidog export
# Push to cloud
make -f Makefile.apidog push
# Compare with cloud
make -f Makefile.apidog compare
# Export and push
make -f Makefile.apidog sync
Docker Support
Use the generated Docker Compose file for mock server:
# Start mock server
docker-compose -f docker-compose.apidog.yml up -d apidog-mock
# Mock server available at http://localhost:4010
CI/CD Integration
Example GitHub Actions workflow:
- name: Export OpenAPI Schema
run: |
python manage.py apidog export --format json
- name: Push to APIDOG
env:
APIDOG_PROJECT_ID: ${{ secrets.APIDOG_PROJECT_ID }}
APIDOG_TOKEN: ${{ secrets.APIDOG_TOKEN }}
run: |
python manage.py apidog push
Documentation
For full documentation, see docs/GUIDE.md.
Requirements
- Python >= 3.8
- Django >= 3.2
- Django REST Framework >= 3.12
- drf-spectacular >= 0.26
License
MIT License - see LICENSE for details.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Links
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ennam_django_apidog-0.1.0.tar.gz.
File metadata
- Download URL: ennam_django_apidog-0.1.0.tar.gz
- Upload date:
- Size: 19.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17ac20b514aa002940e8bedecd52780617b0b0c827b27fc00bbefab52cea4d2e
|
|
| MD5 |
31fba7a2774e24319b1065fb7d1b6f95
|
|
| BLAKE2b-256 |
9cfd5abb9ccf8f18f4aa4835715485b322c9debd507e5d3b2df4f111559e89ec
|
File details
Details for the file ennam_django_apidog-0.1.0-py3-none-any.whl.
File metadata
- Download URL: ennam_django_apidog-0.1.0-py3-none-any.whl
- Upload date:
- Size: 17.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
087203df24af533ee26e9c52d57e4df0ca7a660663ab8665530593b4062d10ba
|
|
| MD5 |
6538b436d33427fa01f164cb903dcc58
|
|
| BLAKE2b-256 |
92cc9c627010cd2168bd9489e0d4b2f880f2ff71a0bf901b289c9c1038195fdc
|