Skip to main content

A FastAPI extension for dynamic and automatic route registration

Project description

FastAPI Dynamic Router

FastAPI extension that provides automatic and dynamic route registration for FastAPI applications, inspired by Next.js's file-system based routing.

Installation

pip install fastapi-dynamic-router

How to Use

Basic Setup

from fastapi import FastAPI
from fastapi_dynamic_router import DynamicRouter

# Create FastAPI app
app = FastAPI()

# Initialize the router
router = DynamicRouter(app)

# Register routes from a directory
router.register_routes('routes')

if __name__ == '__main__':
    import uvicorn
    uvicorn.run(app)

Route Examples

  1. Basic Route (routes/root/__init__.py):
from fastapi import APIRouter

router = APIRouter()

@router.get('/')
def index():
    return {'message': 'Welcome to the API'}
  1. Dynamic Parameter (routes/users/[user_id]/__init__.py):
from fastapi import APIRouter

router = APIRouter()

@router.get('/')
def get_user(user_id: str):
    return {'message': f'User details for ID: {user_id}'}
  1. Nested Routes (routes/products/[productID]/reviews/__init__.py):
from fastapi import APIRouter

router = APIRouter()

@router.get('/')
def get_reviews(product_id: str):
    return {'message': f'Reviews for product ID: {product_id}'}

Configuration Options

# Make routes case-insensitive
app.state.dynamic_router_config['case_sensitive'] = False

# Add a global prefix to all routes
app.state.dynamic_router_config['prefix'] = '/api/v1'

Directory Structure

The router follows a convention-based approach where your directory structure maps directly to URL routes:

๐Ÿ“ฆ routes
โ”œโ”€โ”€ ๐Ÿ“‚ Root
โ”‚   โ”œโ”€โ”€ ๐Ÿ“„ __init__.py          โžœ  ๐ŸŒ /
โ”‚   โ”œโ”€โ”€ ๐Ÿ“‚ version
โ”‚   โ”‚   โ””โ”€โ”€ ๐Ÿ“„ __init__.py      โžœ  ๐ŸŒ /version
โ”‚   โ””โ”€โ”€ ๐Ÿ“‚ about
โ”‚       โ””โ”€โ”€ ๐Ÿ“„ __init__.py      โžœ  ๐ŸŒ /about
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ users
โ”‚   โ”œโ”€โ”€ ๐Ÿ“„ __init__.py          โžœ  ๐ŸŒ /users
โ”‚   โ”œโ”€โ”€ ๐Ÿ“‚ [userID]             โžœ  ๐Ÿ’ซ Dynamic Parameter
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“„ __init__.py      โžœ  ๐ŸŒ /users/{user_id}
โ”‚   โ”‚   โ””โ”€โ”€ ๐Ÿ“‚ profile
โ”‚   โ”‚       โ””โ”€โ”€ ๐Ÿ“„ __init__.py  โžœ  ๐ŸŒ /users/{user_id}/profile
โ”‚   โ””โ”€โ”€ ๐Ÿ“‚ settings
โ”‚       โ””โ”€โ”€ ๐Ÿ“„ __init__.py      โžœ  ๐ŸŒ /users/settings
โ”‚
โ””โ”€โ”€ ๐Ÿ“‚ products
    โ”œโ”€โ”€ ๐Ÿ“„ __init__.py          โžœ  ๐ŸŒ /products
    โ””โ”€โ”€ ๐Ÿ“‚ [productID]          โžœ  ๐Ÿ’ซ Dynamic Parameter
        โ””โ”€โ”€ ๐Ÿ“„ __init__.py      โžœ  ๐ŸŒ /products/{product_id}

Route Mapping Examples

Directory Structure Generated Route Type
Root/__init__.py / Static Route
users/__init__.py /users Static Route
users/[userID]/__init__.py /users/{user_id} Dynamic Route
Products/[productID]/__init__.py /products/{product_id} Dynamic Route

Dynamic Parameters

Dynamic parameters are defined using square brackets in directory names:

  • ๐Ÿ“‚ [userID] โžœ {user_id}
  • ๐Ÿ“‚ [productID] โžœ {product_id}
  • ๐Ÿ“‚ [categoryName] โžœ {category_name}

License

This project is licensed under the MIT License - see the LICENSE file for details.

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

fastapi_dynamic_router-0.1.4.tar.gz (5.3 kB view details)

Uploaded Source

Built Distribution

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

fastapi_dynamic_router-0.1.4-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

Details for the file fastapi_dynamic_router-0.1.4.tar.gz.

File metadata

  • Download URL: fastapi_dynamic_router-0.1.4.tar.gz
  • Upload date:
  • Size: 5.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.12.1

File hashes

Hashes for fastapi_dynamic_router-0.1.4.tar.gz
Algorithm Hash digest
SHA256 207bdf65115ddb5927d1de1c8bfd32934d357e15c887465fbdeb1f64f0e7622f
MD5 a4538a25c5bad9232af49d8879faffe5
BLAKE2b-256 4b0c65b9bf11c59a2aae0b34cf4104f8fa5ee418f0300fb96130f9a356c8c32a

See more details on using hashes here.

File details

Details for the file fastapi_dynamic_router-0.1.4-py3-none-any.whl.

File metadata

File hashes

Hashes for fastapi_dynamic_router-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 0a13994e61b0d0f8e138f329d2d1030e8ab9b8d75b5c8c96c71ba121cb24950c
MD5 a4ed9697c95a50aa24fd48634eca24a7
BLAKE2b-256 7ae13e476670956f6c58acb53cb30ffb42920082bb8294fa62b6fc6efaa8b23b

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