API Sentinel 🛡️
API Sentinel is an asynchronous FastAPI / ASGI middleware and developer telemetry dashboard that detects real-time contract drifts between runtime API payloads and your OpenAPI specification.
🚀 Key Features
- ⚡ Zero-Latency Async Interception: Uses non-blocking background tasks (
asyncio.create_task) and request buffering so your API responses stream immediately without waiting for validation. - 🔍 Comprehensive Drift Detection: Detects missing required fields, undocumented query/path parameters, type mismatches, undocumented HTTP status codes, and extra fields.
- 📊 Real-Time Developer Dashboard: Built-in interactive dashboard with live polling, KPI metrics, pass/fail rate timeline charts, and severity breakdowns.
- 💾 Database Persistence: Automatically records validation history and schema diffs to SQLite via SQLAlchemy (
aiosqlite), persisting telemetry across server restarts. - 🪄 OpenAPI Specification Wizard: Visual form-based generator to design, preview, test, and save OpenAPI specs directly from the browser.
- 💻 CLI Tooling: Built-in
api-sentinelcommand-line interface to launch dashboards and validate specifications.
📦 Installation
From PyPI (Standard):
pip install api-drift-detector
From GitHub (Latest):
pip install git+https://github.com/T41h4X/API_sentinel.git
⚡ Quick Start
1. Integrate Middleware with FastAPI
Add APISentinelMiddleware to your FastAPI application:
from fastapi import FastAPI
from api_sentinel import APISentinelMiddleware
app = FastAPI(title="My API")
# Register Sentinel Middleware
app.add_middleware(
APISentinelMiddleware,
openapi_path="openapi.yaml", # Path to your OpenAPI spec
dashboard_url="http://127.0.0.1:8001", # URL of the Sentinel dashboard
enabled=True,
)
@app.get("/api/v1/users")
async def get_users():
return [{"id": 1, "name": "Alice"}]
2. Launch the Sentinel Dashboard
Run the built-in dashboard from your terminal:
api-sentinel dashboard --port 8001
Open your browser at http://127.0.0.1:8001 to monitor incoming traffic, validation results, and contract drifts in real time.
💻 Command Line Interface (CLI)
API Sentinel provides the api-sentinel (or sentinel) CLI:
# Start the monitoring dashboard
api-sentinel dashboard --host 127.0.0.1 --port 8001
# Start dashboard in development mode with auto-reload
api-sentinel dashboard --reload
# Validate an OpenAPI specification file
api-sentinel validate --spec openapi.yaml
# Check installed version
api-sentinel version
⚙️ Configuration
API Sentinel can be configured using environment variables (prefixed with SENTINEL_) or a .env file:
| Variable | Default | Description |
|---|---|---|
SENTINEL_DATABASE_URL |
sqlite+aiosqlite:///./sentinel.db |
SQLAlchemy database connection string |
SENTINEL_RETENTION_DAYS |
30 |
Number of days to retain validation records before cleanup |
SENTINEL_MASKED_FIELDS |
["password", "token", "credit_card", "authorization"] |
Sensitive payload fields automatically masked |
SENTINEL_SELECTIVE_PERSISTENCE |
false |
When true, only saves WARNING and FAILED validation results |
SENTINEL_OPENAPI_SPEC_PATH |
openapi.yaml |
Default OpenAPI specification file path |
🧪 Running the Demo Locally
Clone the repository and test the full demo application:
git clone https://github.com/T41h4X/API_sentinel.git
cd API_sentinel
# Create and activate environment
python -m venv .venv
.\.venv\Scripts\activate # Windows
source .venv/bin/activate # Linux / macOS
# Install in editable mode
pip install -e .
# Launch all demo services (Windows)
start_all.cmd
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
Release files for api-drift-detector 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| api_drift_detector-0.1.1.tar.gz | 111.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| api_drift_detector-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 190.3 kB
Release files / api_drift_detector-0.1.1.tar.gz
| Download URL | api_drift_detector-0.1.1.tar.gz |
|---|---|
| Size | 111.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f306cbc7a700962f466ef38890a8fd55424aa827591f8fa2b8782193be2bf722
|
|
BLAKE2b-256 checksum How to use checksums |
f35d9aecf30304f4849bdfe72b9801eaab4b6b51ed9087d5a4a67fe8647ad59b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.9
|
Release files / api_drift_detector-0.1.1-py3-none-any.whl
| Download URL | api_drift_detector-0.1.1-py3-none-any.whl |
|---|---|
| Size | 78.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9185e4b551bc4c54ce8dfcfa0748d67437ae8a3cacfa975e3ddc7e80678b9534
|
|
BLAKE2b-256 checksum How to use checksums |
12791ee6af38c6b9faf3dfc717fecaa411635b041bd606b9eb0eac7b8bd094ce
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.9
|