Getting Started¶
This is a quick-start guide to get you up and running with ArchiPy in minutes. For comprehensive architectural patterns, detailed code examples, and production-ready project structure, see the Architecture Guide.
Installation¶
# Basic installation
pip install archipy
# With specific adapters
pip install archipy[postgres,redis,fastapi]
# Or using uv
uv add archipy[postgres,redis,fastapi]
Quick Start: 5-Minute API¶
Here's a minimal example to create a working FastAPI application:
1. Setup Configuration¶
# config.py
from archipy.configs.base_config import BaseConfig
config = BaseConfig()
BaseConfig.set_global(config)
2. Define Your Model¶
# models.py
from sqlalchemy import Column, String
from archipy.models.entities.sqlalchemy.base_entities import BaseEntity
class User(BaseEntity):
__tablename__ = "users"
username = Column(String(100), unique=True)
email = Column(String(255), unique=True)
3. Create Your API¶
# main.py
from fastapi import FastAPI
from archipy.helpers.utils.app_utils import AppUtils
from archipy.adapters.postgres.sqlalchemy.adapters import PostgresSQLAlchemyAdapter
from config import config
from models import User
# Create app
app = AppUtils.create_fastapi_app()
# Initialize database
db = PostgresSQLAlchemyAdapter()
BaseEntity.metadata.create_all(db.session_manager.engine)
@app.get("/users")
def list_users():
return {"message": "List users"}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
4. Run Your API¶
Visit http://localhost:8000/docs to see your API documentation!
Next Steps¶
Learn the Recommended Architecture¶
The quick start above is minimal. For production applications, we recommend:
- Architecture Guide - Complete project structure with:
- Domain-driven organization (models, repositories, logic, services)
- API versioning (
/api/v1/,/api/v2/) - Command/Query/Response DTO patterns
- Domain-specific adapters
- Complete working code examples
Explore Specific Features¶
- Configuration Management - Environment variables, Pydantic settings
- Database Adapters - PostgreSQL, SQLite, StarRocks
- Caching with Redis - Redis patterns and examples
- Authentication - Keycloak integration
- Object Storage - MinIO/S3 compatible storage
- Message Streaming - Kafka producers and consumers
- Error Handling - Custom exceptions and patterns
- BDD Testing - Behavior-driven development with Behave
Key Concepts¶
Adapters¶
ArchiPy provides pre-built adapters for common services. Each adapter:
- Uses global configuration automatically
- Includes both sync and async versions
- Has comprehensive error handling
- Comes with testing mocks
Example:
from archipy.adapters.redis.adapters import RedisAdapter
redis = RedisAdapter() # Uses global config
redis.set("key", "value", ex=3600)
📖 See: All Available Adapters
Configuration¶
Centralized, type-safe configuration with environment variable support:
from archipy.configs.base_config import BaseConfig
class AppConfig(BaseConfig):
# Override defaults as needed
pass
config = AppConfig()
BaseConfig.set_global(config)
📖 See: Configuration Examples
Error Handling¶
Domain-specific exceptions with proper error chaining:
from archipy.models.errors import NotFoundError, AlreadyExistsError
raise NotFoundError(
resource_type="user",
additional_data={"user_id": user_id}
)
📖 See: Error Handling Guide
Production-Ready Structure¶
For production applications, use our recommended architecture:
my_app/
├── configs/ # Configuration
├── models/ # DTOs, Entities, Errors
├── repositories/ # Data access with domain-specific adapters
│ └── user/
│ ├── adapters/ # UserDBAdapter, UserCacheAdapter
│ └── user_repository.py
├── logic/ # Business rules
│ └── user/
│ ├── user_registration_logic.py
│ └── user_query_logic.py
├── services/ # FastAPI endpoints
│ └── user/
│ └── v1/
│ └── user_service.py
└── main.py # Application entry point
📖 Complete guide: Architecture Document
Best Practices¶
- Start with the Architecture Guide - Don't reinvent the wheel
- Use global configuration - Set it once at startup
- Follow DTO patterns - InputDTO, CommandDTO, QueryDTO, ResponseDTO, OutputDTO
- Organize by domain - Keep related code together
- Version your APIs - Use
/api/v1/,/api/v2/ - Test with BDD - Use Behave for behavior-driven testing
Need Help?¶
- Architecture questions? → Architecture Guide
- Adapter usage? → Examples
- API reference? → API Documentation
- Contributing? → Contributing Guide
Happy coding! 🚀