Back to blog
Jan 10, 2024
3 min read

Dynamic API Design - objectives

build a dynamic processing framework in Spring Boot configuration

Objective:

Create a configurable Java framework using Spring Boot that processes API requests based on a product category parameter. The framework should dynamically select processing strategies and handle complex workflows with external service calls.

1. Core Functionality:

  • Parse `product_category` from either query parameters or JSON payload
  • Select appropriate processing strategy based on category
  • Support configurable processing blocks in sequence
  • Handle parallel or sequential external service calls
  • Collate results and prepare unified response

2. Processing Blocks:

  • Input parsing, validation, and transformation
  • External service calls with transformers
  • Result collection and aggregation
  • Response formatting and delivery
  • Each block should support custom implementations

3. Design Patterns:

  • Strategy: For different product category implementations
  • Template Method: In BaseProcessingStrategy for common flow
  • Factory: For strategy creation and management
  • Builder: For complex objects like contexts and responses
  • Visitor/Chain: For validation and transformation chains

4. Technical Requirements:

  • Java 17
  • Latest Spring Boot
  • Configurable via YAML
  • Support for retry mechanisms
  • Comprehensive exception handling
  • Unit and integration testing

5. Configurability:

  • Strategy selection
  • Processing sequence
  • Validation rules
  • Transformation logic
  • External service configurations
  • Retry policies
  • Parallel/Sequential execution

6. Package Structure:

- config/ - Configuration classes
- controller/ - API endpoints
- exception/ - Custom exceptions
- factory/ - Strategy factories
- model/ - Data models
- processor/ - Processing components
- service/ - External service clients
- strategy/ - Strategy implementations
- transformer/ - Data transformers
- validator/ - Validation rules

7. Key Components:

  • Core Interfaces:

    • ProcessingStrategy
    • InputTransformer
    • ExternalCallTransformer
    • CollationTransformer
    • ValidationRule
  • Base Classes:

    • BaseProcessingStrategy
    • BusinessException
    • BaseValidator
  • Models:

    • RequestContext
    • ProcessedInput
    • ExternalCallResult
    • CollatedResult
    • ResponseDTO
  • Configuration:

    • ProcessingConfig
    • StrategyConfig
    • ExternalCallConfig
    • RetryConfig

8. Error Handling:

  • Business exceptions per processing stage
  • Validation exceptions
  • Transformation exceptions
  • External service exceptions
  • Global error handling

9. Testing Requirements:

  • Unit tests for all components
  • Integration tests for full flows
  • Mock external services
  • Test different configurations
  • Performance testing

10. Sample Implementations:

  • Category1Strategy (e.g., Order Processing)
  • Category2Strategy (e.g., User Profile)
  • Corresponding transformers and validators

Output:

The framework should produce a response that includes:

  • Processed data
  • Success/failure status
  • Processing metadata
  • Warnings or errors if any
  • Execution metrics

This will serve as a foundation for building specific implementations while maintaining flexibility and extensibility.