Source code for core_apis.api.server
# -*- coding: utf-8 -*-
"""
API server module for running FastAPI applications.
This module provides functionality to start and run a FastAPI application
using uvicorn as the ASGI server. Configuration is controlled through
environment variables for flexibility in different deployment environments.
"""
import os
import typing
import uvicorn
from fastapi import FastAPI
from core_apis.api import AppConfig
from core_apis.api import CorsConfig
from core_apis.api import create_application
[docs]
def run(app: typing.Optional[FastAPI] = None) -> None:
"""
Start the API server using uvicorn.
Launches a FastAPI application with uvicorn ASGI server. If no application
is provided, a default application will be created with CORS middleware enabled.
Args:
app: Optional FastAPI application instance. If None, a default application
will be created using environment configuration.
Environment Variables:
API_NAME: Name of the API service (default: "API-Service")
DEBUG: Enable debug mode, set to "1" to enable (default: disabled)
HOST: Server host address (default: "127.0.0.1" for security)
PORT: Server port number (default: 3500)
LOG_LEVEL: Uvicorn log level (default: "info")
Note:
The default host is "127.0.0.1" (localhost only) for security.
To expose the server to all interfaces, set HOST="0.0.0.0".
"""
if not app:
app = create_application(
app_config=AppConfig(
name=os.getenv("API_NAME", "API-Service"),
debug=os.getenv("DEBUG") == "1",
cors_config=CorsConfig(enabled=True),
),
)
# Get port with error handling
try:
port = int(os.getenv("PORT", "3500"))
except ValueError:
port = 3500
uvicorn.run(
app=app,
host=os.getenv("HOST", "127.0.0.1"),
port=port,
log_level=os.getenv("LOG_LEVEL", "info"),
)