AgentSkillsCN

fastapi-factory-utilities

借助插件、消息代理、OAuth2/OIDC、OpenTelemetry 以及结构化日志,快速构建 FastAPI 微服务。

SKILL.md
--- frontmatter
name: fastapi-factory-utilities
description: Build FastAPI microservices with plugins, message brokers, OAuth2/OIDC, OpenTelemetry, and structured logging.

FastAPI Factory Utilities

A library for building production-ready FastAPI microservices with plugin-based architecture.

Quick Start

See assets/quick_start_example.py for a minimal application setup.

Dependency Injection and Testing

The library uses FastAPI's Depends for dependency injection. Plugins expose resources via dependency functions (e.g., AioHttpResourceDepends, depends_status_service, depends_scheduler_component).

For testing, several plugins provide mockers to create mock resources:

  • AioHttp: build_mocked_aiohttp_resource, build_mocked_aiohttp_response - Mock HTTP clients and responses
  • ODM: AbstractRepositoryInMemory - In-memory repository for unit testing without MongoDB
  • See AioHttp reference and Repository Pattern for detailed mocking examples

Reference Documentation

Core

ReferenceDescription
Application FrameworkApplicationAbstract, builders, plugin lifecycle
ConfigurationYAML loading, environment variables, type-safe config
LoggingStructured logging with structlog
Status ServiceHealth and readiness monitoring

Plugins

ReferenceDescription
ODM Plugin (MongoDB)MongoDB/Beanie integration, document models
Repository PatternType-safe data access, in-memory testing
AioHttp HTTP ClientHTTP client with connection pooling, mocking utilities
AioPika RabbitMQMessage publishing and consuming
OpenTelemetryDistributed tracing and metrics
Taskiq TasksBackground task processing with Redis

Services

ReferenceDescription
Hydra ServiceOAuth2 token introspection, JWKS, client credentials
Kratos ServiceIdentity management, session validation
Audit ServiceEvent auditing with RabbitMQ

Utilities

ReferenceDescription
PaginationType-safe pagination types
Ory UtilitiesOry API pagination helpers

Best Practices

  1. Plugin Order - Load plugins in dependency order (ODM before repositories)
  2. Configuration - Use YAML files with ${ENV_VAR:default} syntax
  3. Lifecycle - Keep configure() lightweight, use on_startup() for connections
  4. Observability - Enable OpenTelemetry in production
  5. Logging - Use JSON mode in production for log aggregation
  6. Testing - Use mockers from aiohttp plugin for HTTP client tests