Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Eav Api Platform Bundle Laravel Package

cleverage/eav-api-platform-bundle

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture Fit

  • EAV Model Compatibility: The bundle bridges Sidus/EAVModelBundle (Entity-Attribute-Value pattern) with ApiPlatform, enabling dynamic attribute exposure via REST/GraphQL. This is a strong fit for projects requiring flexible schema evolution (e.g., CMS, multi-tenant SaaS, or configurable product catalogs) where rigid ORM entities are limiting.
  • ApiPlatform Integration: Leverages ApiPlatform’s core (serialization, validation, Hydra docs) while extending it for EAV-specific needs. Aligns with decoupled architecture principles if EAV data is a bounded context.
  • Custom Resource Classes: Requires per-family DTOs (per Sidus docs), which adds boilerplate but ensures type safety and Hydra schema accuracy. May conflict with auto-generated APIs (e.g., make:api-resource).

Integration Feasibility

  • Low Coupling: Bundle injects filters/serializers via Symfony’s dependency injection, avoiding invasive changes to existing entities. Backward-compatible with ApiPlatform’s default filters (can coexist).
  • Hydra Documentation: Requires @Family annotations on DTOs to generate accurate OpenAPI/Hydra schemas. Critical for API consumers but adds a manual step.
  • Filter Replacement: Provides 6 EAV-specific filters (e.g., BooleanFilter, NumericFilter) to replace Doctrine’s defaults. Useful for attribute-level filtering but may require migration of existing filter logic.

Technical Risk

  • Bundle Maturity: 0 stars, no releases (despite 1.0.* tag). Risk of breaking changes or abandonment. Recommend:
    • Forking/maintaining the repo if critical.
    • Testing against ApiPlatform v3.x (current LTS) for compatibility.
  • Performance Overhead:
    • EAV queries can be N+1 hell if not optimized (e.g., missing join hints or DQL optimizations).
    • Hydra schema generation may bloat API docs if families/attributes are numerous.
  • Debugging Complexity:
    • Custom DTOs per family add indirection; errors may surface in serialization/deserialization layers.
    • Filter logic is less transparent than Doctrine’s native filters (e.g., SearchFilter).

Key Questions

  1. Schema Design:
    • How many EAV families/attributes exist? Will the per-family DTO overhead be manageable?
    • Are there shared attributes across families that could reduce duplication?
  2. Filter Strategy:
    • Will existing API consumers rely on Doctrine filters? If so, how will migration be handled?
    • Are the provided filters sufficient, or will custom filters (extending the bundle) be needed?
  3. Performance:
    • Are EAV queries optimized (e.g., materialized views, query hints) to avoid N+1 issues?
    • What’s the expected scale (e.g., 10K vs. 1M attributes)? Will Hydra docs become unwieldy?
  4. Tooling:
    • Is there a generator (e.g., custom CLI) to scaffold DTOs/families?
    • How will API testing (e.g., Hydra validation) be automated?
  5. Alternatives:
    • Could ApiPlatform’s Extension system achieve similar goals with less boilerplate?
    • Is Sidus/EAVModelBundle the right EAV solution? Alternatives like Doctrine Extensions or custom DDD aggregates may offer simpler integrations.

Integration Approach

Stack Fit

  • Best For:
    • Symfony + ApiPlatform stacks using Sidus/EAVModelBundle for dynamic data.
    • Projects needing Hydra-compliant EAV APIs (e.g., headless CMS, configurable products).
  • Poor Fit:
    • Strictly relational schemas (EAV adds complexity).
    • Teams averse to manual DTO maintenance.
    • Projects requiring real-time GraphQL subscriptions (bundle focuses on REST/Hydra).

Migration Path

  1. Assessment Phase:
    • Audit existing EAV families/attributes. Identify high-value candidates for API exposure.
    • Benchmark query performance with/without optimizations (e.g., EAVQueryBuilder).
  2. Pilot Phase:
    • Implement one family as a DTO and test:
      • Serialization/deserialization.
      • Hydra schema generation.
      • Filter functionality (e.g., BooleanFilter).
    • Validate with API consumers (e.g., frontend, mobile).
  3. Rollout Phase:
    • Incremental adoption: Expose families in phases (e.g., by domain).
    • Deprecate old endpoints: Replace Doctrine-filtered routes with EAV-specific ones.
    • Document migration: Provide a filter mapping guide (e.g., "Old SearchFilter → New NumericFilter").

Compatibility

  • ApiPlatform: Tested with 2.1.* (may need updates for 3.x). Check for:
    • Serializer groups conflicts with custom DTOs.
    • Validation (e.g., @Assert constraints on dynamic attributes).
  • Sidus/EAVModelBundle: Ensure version alignment (e.g., ^1.0 vs. ^2.0).
  • Doctrine: No direct conflicts, but native filters (e.g., DateFilter) may need replacement.

Sequencing

  1. Prerequisites:
    • Stable EAV data model (families/attributes defined).
    • ApiPlatform baseline (serialization, validation working).
  2. Core Integration:
    • Install bundles (composer require + Kernel update).
    • Create first DTO (e.g., ProductFamilyDto) with @Family annotation.
  3. Filter Migration:
    • Replace Doctrine filters in resources.yaml with bundle-specific ones (e.g., CleverAge\EAVApiPlatformBundle\Filter\DateFilter).
    • Test edge cases (e.g., null values, nested attributes).
  4. Hydra Validation:
    • Verify schema reflects all attributes (no missing/invalid types).
  5. Performance Tuning:
    • Add query hints (e.g., indexBy in EAVQueryBuilder).
    • Implement caching for frequent EAV lookups.

Operational Impact

Maintenance

  • Pros:
    • Decoupled: Changes to EAV schema don’t break API contracts (DTOs isolate families).
    • Filter DRY: Reuse BooleanFilter, NumericFilter, etc., across resources.
  • Cons:
    • DTO Maintenance: Adding/removing attributes requires DTO updates (risk of drift).
    • Bundle Dependencies: Future updates may require manual testing (no stars/releases).
    • Debugging: EAV-specific errors (e.g., malformed attribute values) may obscure root causes.

Support

  • Proactive Measures:
    • Documentation: Create internal runbooks for:
      • DTO generation patterns.
      • Filter migration steps.
      • Hydra schema troubleshooting.
    • Monitoring: Track:
      • API latency (EAV queries may be slower).
      • Hydra schema size (bloat risk).
      • Filter usage (e.g., BooleanFilter adoption).
  • Escalation Path:
    • No vendor support: Rely on community (GitHub issues) or fork the repo.
    • Fallback: Maintain parallel Doctrine-filtered endpoints during migration.

Scaling

  • Horizontal Scaling:
    • EAV queries scale poorly without optimization. Mitigate with:
      • Read replicas for analytical EAV data.
      • Caching layers (e.g., Redis for frequent attributes).
    • ApiPlatform’s reverse proxy (e.g., Nginx) can handle load, but DTO serialization may become a bottleneck.
  • Vertical Scaling:
    • Increase DB connection pools for high-concurrency EAV reads.
    • Optimize EAVQueryBuilder with batch loading.

Failure Modes

Failure Scenario Impact Mitigation
Bundle incompatibility with ApiPlatform Broken API routes Test against 3.x early; fork if needed.
N+1 queries in EAV data High DB load, timeouts Use EAVQueryBuilder hints; denormalize.
Hydra schema generation fails Incomplete API docs Validate schemas post-deploy; add CI checks.
Custom DTO misconfiguration Serialization errors Automated tests for DTO validation.
Filter logic errors Incorrect API responses Unit tests for each filter type.

Ramp-Up

  • Onboarding Time:
    • Developers: 2–4
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
make-dev/orca
dmstr/symfony-system-resources-bundle
dmstr/symfony-job-queue-bundle
dmstr/openapi-json-schema-bundle
dmstr/keycloak-security-bundle
dmstr/doctrine-audit-log-bundle
dmstr/api-platform-utils-bundle
dmstr/api-configuration-bundle
chrisdev/ux-components
baks-dev/finances
emuniq/filament-browser-notifications
syriable/filament-translator
hungnm28/livewire-form
wenprise/eloquent
crudly/encrypted
fadion/bouncy
cuci/prototurk-sdk
gos/pubsub-router-bundle
cuci/prototurk-sdk-symfony
clementtalleu/easyadmin-markdown-bundle