Skip to main content

Django integration for APIDOG - Export, sync, and manage OpenAPI schemas

Project description

ennam-django-apidog

PyPI version Python versions Django versions License: MIT

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

ennam_django_apidog-0.1.0.tar.gz (19.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ennam_django_apidog-0.1.0-py3-none-any.whl (17.3 kB view details)

Uploaded Python 3

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

Hashes for ennam_django_apidog-0.1.0.tar.gz
Algorithm Hash digest
SHA256 17ac20b514aa002940e8bedecd52780617b0b0c827b27fc00bbefab52cea4d2e
MD5 31fba7a2774e24319b1065fb7d1b6f95
BLAKE2b-256 9cfd5abb9ccf8f18f4aa4835715485b322c9debd507e5d3b2df4f111559e89ec

See more details on using hashes here.

File details

Details for the file ennam_django_apidog-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for ennam_django_apidog-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 087203df24af533ee26e9c52d57e4df0ca7a660663ab8665530593b4062d10ba
MD5 6538b436d33427fa01f164cb903dcc58
BLAKE2b-256 92cc9c627010cd2168bd9489e0d4b2f880f2ff71a0bf901b289c9c1038195fdc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page