Skip to content

Basic CRUD Example

Complete example of CRUD operations with REROUTE.

Route File

app/routes/user/page.py:

from reroute import RouteBase
from reroute.decorators import rate_limit, cache

class UserRoutes(RouteBase):
    """User CRUD operations"""

    tag = "Users"

    def __init__(self):
        super().__init__()
        self.users = [
            {"id": 1, "name": "Alice", "email": "alice@example.com"},
            {"id": 2, "name": "Bob", "email": "bob@example.com"}
        ]

    @cache(duration=60)
    def get(self):
        """Get all users"""
        return {
            "users": self.users,
            "count": len(self.users)
        }

    @rate_limit("10/min")
    def post(self):
        """Create a new user"""
        new_user = {
            "id": len(self.users) + 1,
            "name": "New User",
            "email": "newuser@example.com"
        }
        self.users.append(new_user)
        return {"created": new_user}

    def put(self):
        """Update a user"""
        if self.users:
            self.users[0]["name"] = "Updated Name"
            return {"updated": self.users[0]}
        return {"error": "No users to update"}

    @rate_limit("5/min")
    def delete(self):
        """Delete a user"""
        if self.users:
            deleted = self.users.pop()
            return {"deleted": deleted}
        return {"error": "No users to delete"}

Main Application

main.py:

from fastapi import FastAPI
from reroute.adapters import FastAPIAdapter
from pathlib import Path

app = FastAPI(title="User CRUD API")

adapter = FastAPIAdapter(
    fastapi_app=app,
    app_dir=Path(__file__).parent / "app"
)
adapter.register_routes()

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

Testing

# Get all users
curl http://localhost:8000/user

# Create user
curl -X POST http://localhost:8000/user

# Update user
curl -X PUT http://localhost:8000/user

# Delete user
curl -X DELETE http://localhost:8000/user

API Documentation

Visit http://localhost:8000/docs for interactive API documentation.