FastAPI Module Overview
info
The FastAPI module provides seamless integration between Fluvius domains and FastAPI web applications.
Introduction
The FastAPI module enables you to:
- Expose domains as REST APIs
- Configure authentication and authorization
- Set up query endpoints
- Handle media uploads
- Integrate with MQTT
Quick Start
Create FastAPI App
from fastapi import FastAPI
from fluvius.fastapi import create_app, configure_domain_manager
app = create_app()
# Configure domain manager
configure_domain_manager(app, domains=[UserDomain, BankDomain])
Domain Endpoints
Domains are automatically exposed as REST endpoints:
# POST /api/user/commands/create-user
# GET /api/user/queries/{resource}/{id}
# POST /api/user/queries/{resource}/find
Authentication
Configure authentication:
from fluvius.fastapi import configure_authentication
configure_authentication(app, backend='keycloak')
Protected Endpoints
Use the auth_required decorator:
from fluvius.fastapi import auth_required
@app.get('/protected')
@auth_required
async def protected_route():
return {'message': 'Authenticated'}
Query Endpoints
Configure query manager for flexible querying:
from fluvius.fastapi import configure_query_manager
configure_query_manager(app, resources=[
QueryResource('user', UserModel),
QueryResource('account', AccountModel)
])
Media Handling
Configure media uploads:
from fluvius.fastapi import configure_media
configure_media(app, filesystem='local', storage_path='/uploads')
MQTT Integration
Configure MQTT for real-time messaging:
from fluvius.fastapi import configure_mqtt
configure_mqtt(app, broker_url='mqtt://localhost:1883')
Example Application
from fastapi import FastAPI
from fluvius.fastapi import (
create_app,
configure_domain_manager,
configure_query_manager,
configure_authentication
)
from user_domain import UserDomain
app = create_app()
# Configure domains
configure_domain_manager(app, domains=[UserDomain])
# Configure queries
configure_query_manager(app, resources=[
QueryResource('user', UserModel)
])
# Configure auth
configure_authentication(app, backend='keycloak')
if __name__ == '__main__':
import uvicorn
uvicorn.run(app, host='0.0.0.0', port=8000)
Next Steps
- Read the FastAPI API Reference
- Learn about Authentication
- Check out Examples