Skip to content

Releases: api-platform/core

v4.3.1

20 Mar 10:57
bb36677

Choose a tag to compare

What's Changed

  • chore(github): fix dispatch-demo-update on release by @vincentchalamon in #7842
  • fix(validator): fallback to message when detail is uninitialized by @soyuka in #7844
  • fix(symfony): do not exclude resources from DI by @VincentLanglet in #7847
  • fix(validator): skip ValidateProcessor when ObjectMapper is not used by @Renrhaf in #7848
  • fix(serializer): evaluate ApiProperty security on input DTOs by @soyuka in #7852
  • fix(hydra): use compact IRI for owl:onProperty and Collection @id in DocumentationNormalizer by @soyuka in #7849
  • fix(doctrine): reset nested_properties_info for non-nested properties in FreeTextQueryFilter by @soyuka in #7850
  • cs: typo in deprecation message for 'xkey' config by @melany-mai in #7851

New Contributors

Full Changelog: v4.3.0...v4.3.1

v4.2.22

20 Mar 10:12
66e6734

Choose a tag to compare

What's Changed

  • chore(github): fix dispatch-demo-update on release by @vincentchalamon in #7842
  • fix(serializer): evaluate ApiProperty security on input DTOs by @soyuka in #7852
  • fix(hydra): use compact IRI for owl:onProperty and Collection @id in DocumentationNormalizer by @soyuka in #7849
  • cs: typo in deprecation message for 'xkey' config by @melany-mai in #7851

New Contributors

Full Changelog: v4.2.21...v4.2.22

v4.3.0

13 Mar 15:10
01e3a1b

Choose a tag to compare

Highlights

MCP (Model Context Protocol) Support

  • Introduce api-platform/mcp component (#7703)
  • MCP bundle tool integration (#7595)
  • Collection support for MCP (#7724)
  • Laravel MCP support (#7709)

Scalar API Reference Documentation

  • Scalar is now available as an alternative documentation UI alongside Swagger UI (#7817)

Security

  • isGranted is now evaluated before the provider, preventing unnecessary database queries on unauthorized requests (#7500)

Doctrine Filters

  • UUID filter (#7628) with nested relation support (#7759)
  • ComparisonFilter decorator for range filtering (#7760) with ne (not equal) operator (#7814)
  • caseSensitive option for PartialSearchFilter (#7675)
  • ODM SortFilter and nested property support (#7780)
  • Support relations on filters (#7711)
  • Readonly entities automatically lose PUT & PATCH operations (#7453)

Elasticsearch

  • OpenSearch support (#7811)
  • SSL configuration options (#4059)

Other Notable Features

  • Defaults parameters (#7758)
  • Laravel object mapper (#7704)
  • JSON Schema normalization/denormalization with attributes (#7629)
  • JSON:API entity identifiers instead of IRIs as resource id (#7702)
  • SkipAutoconfigure attribute for Laravel (#7467)
  • LDP-compliant Allow and Accept-Post response headers (#6917)
  • Cache operation metadata factory (#7516)
  • gen_id global configuration option (#7775)
  • Preserve key option in CollectionNormalizer (#7721)
  • UUID/ULID parameter validation (#7649)

Breaking Changes

  • JSON-LD @type with output and itemUriTemplate: uses the resource class name instead of the output DTO class name
  • Doctrine filters require explicit property (#7681): throws InvalidArgumentException if missing (unless you use a :property placeholder)
  • Readonly entities lose PUT & PATCH (#7453): clients will receive 404 instead of processing the request

Behavioral Changes

  • Hydra class @id uses #ShortName (#7771): replaces schema.org type URIs — clients should expect class @id and property range changes
  • Scalar UI enabled by default (#7817): disable with enable_scalar: false if unwanted

See the full changelog with all bug fixes and detailed upgrade notes on the 4.3 branch CHANGELOG.md.

New Contributors

Full Changelog: v4.2.21...v4.3.0

v4.2.21

13 Mar 13:21
3b931ff

Choose a tag to compare

v4.2.21

Bug fixes

  • 20ced5fca fix(laravel): clear SkolemIriConverter state between requests (#7838)
  • 2b2b7bca2 fix(filter): use correct type for int-backed enums in BackedEnumFilter
  • 42a2d7fc6 fix(symfony): register DateTimeValueObjectTransformer for JsonStreamer (#7839)
  • 63e6b57f8 fix(openapi): correct redocly openapi errors (#7834)
  • 6a472a2db fix(jsonapi): swap arguments in DefinitionNameFactory::create() call
  • bbfd4cafa fix(filter): do not nest array while generating default schema (#7832)
  • c20a41c20 fix(symfony): clear SkolemIriConverter state between requests via ResetInterface (#7829)
  • d6ecbe122 fix(serializer): Use serializer when denormalizing relation inside Input (#7830)
  • da6232468 fix(metadata): allow GraphQL-only resources without identifiers (#3975) (#7836)
  • f4002902a fix(state): on creation, give expected class to object mapper (#7795)

v4.3.0-beta.2

06 Mar 09:47
f855aab

Choose a tag to compare

What's Changed

  • fix(odm): partial pagination limit the documents entering $facet by @divine in #7822
  • chore: bump sub-components dependencies to ^4.3 by @soyuka in #7820

Full Changelog: v4.3.0-beta.1...v4.3.0-beta.2

v4.2.20

06 Mar 09:32
344f91a

Choose a tag to compare

What's Changed

  • fix(openapi): allow Operations to override global options in getPaginationParameters by @jamesisaac in #7807
  • fix(laravel): exclude .blade.php files from recursive class scan by @Jellyfrog in #7813
  • fix(laravel): do not exclude custom primary keys matching HasMany foreign keys by @Jellyfrog in #7810
  • fix(symfony): make enable_docs a master switch for disabling documentation by @soyuka in #7806
  • fix(odm): partial pagination limit the documents entering $facet by @divine in #7822

New Contributors

Full Changelog: v4.2.19...v4.2.20

v4.3.0-beta.1

03 Mar 10:58
59adb86

Choose a tag to compare

What's Changed

  • fix(serializer): apply API Platform name converter to input/output DTOs by @soyuka in #7779
  • fix(JsonSchema): avoid schema name collision when an operation name is already used by another class by @wuchen90 in #7778
  • fix(metadata): sort parameters by priority after pattern expansion by @soyuka in #7788
  • fix(serializer): prevent api_platform_output context from leaking to nested non-resource objects by @soyuka in #7787
  • fix(validator): missing required properties when using GroupSequence by @VincentLanglet in #7784
  • ci: php 8.5 (#7585) by @soyuka in #7786
  • fix(symfony): allow toggling GraphQL Playground to ensure BC by @bkosun in #7793
  • feat(serializer): option to preserve key in CollectionNormalizer by @VincentLanglet in #7721
  • fix(validator): handle nested groups and group sequences by @VincentLanglet in #7791
  • Fix Hydra example type - use @type prefix per JSON-LD spec by @Copilot in #7768
  • feat(laravel): split render logic from error handler by @bonroyage in #7790
  • fix(serializer): report all missing constructor arguments in instantiateObject by @soyuka in #7805
  • Feature support entity identfiers to become JSON:API semantics compliant by @elfin-sbreuers in #7702
  • chore: mcp-bundle:^0.5 by @soyuka in #7809
  • fix(openapi): allow Operations to override global options in getPaginationParameters by @jamesisaac in #7807
  • feat(doctrine): ComparisonFilter decorator for range filtering by @soyuka in #7760
  • fix(laravel): exclude .blade.php files from recursive class scan by @Jellyfrog in #7813
  • feat(doctrine): ne (not equal) operator for ComparisonFilter by @soyuka in #7814
  • feat(elasticsearch): OpenSearch support by @hotfix31 in #7811
  • feat(doctrine): ODM SortFilter and nested property support for parameter-based filters by @soyuka in #7780
  • fix(laravel): do not exclude custom primary keys matching HasMany foreign keys by @Jellyfrog in #7810
  • fix(symfony): make enable_docs a master switch for disabling documentation by @soyuka in #7806
  • fix(jsonapi): wrong variable name during merge by @soyuka in #7816
  • feat: defaults parameters by @Maxcastel in #7758

New Contributors

Full Changelog: v4.3.0-alpha.2...v4.3.0-beta.1

v4.2.19

27 Feb 16:05
8994a15

Choose a tag to compare

Bug fixes

  • 04c30b7ee fix(jsonapi): prevent double unwrapping of data.attributes with input DTOs
  • c6236f313 fix(serializer): report all missing constructor arguments in instantiateObject

v4.2.18

27 Feb 10:42
5f7feec

Choose a tag to compare

What's Changed

  • fix(metadata): sort parameters by priority after pattern expansion by @soyuka in #7788
  • fix(serializer): prevent api_platform_output context from leaking to nested non-resource objects by @soyuka in #7787
  • fix(validator): missing required properties when using GroupSequence by @VincentLanglet in #7784
  • ci: php 8.5 (#7585) by @soyuka in #7786
  • fix(symfony): allow toggling GraphQL Playground to ensure BC by @bkosun in #7793
  • fix(validator): handle nested groups and group sequences by @VincentLanglet in #7791
  • Fix Hydra example type - use @type prefix per JSON-LD spec by @Copilot in #7768

Full Changelog: v4.2.17...v4.2.18

v4.3.0-alpha.2

20 Feb 21:02
06f66f9

Choose a tag to compare

What's Changed

  • fix(jsonld): restore item_uri_template @type resolution after 4.2 merge by @soyuka in #7764
  • Various fixes by @soyuka in #7765
  • fix(elasticsearch): mono-repo v9 support by @GeLoLabs in #7766
  • fix: remove extra empty lines insertion in SymfonyServiceClassConstantFixer by @Maxcastel in #7761
  • fix(state): handle partial pagination with object mapper by @soyuka in #7769
  • test(openapi): add openapi test for normalization with attributes by @Maxcastel in #7772
  • fix(hydra): hide search key when there is parameter without filter by @VincentLanglet in #7773
  • fix(hydra): unique class @id with subClassOf for semantic types by @soyuka in #7771
  • feat(doctrine): add nested relation support to IriFilter and UuidFilter by @soyuka in #7759
  • fix(symfony): publish mercure updates for all resources of an entity by @soyuka in #7774
  • Use values from ProblemExceptionInterface by @bonroyage in #7776
  • fix(symfony): use AsCommand description parameter for console commands by @soyuka in #7763
  • feat(serializer): global defaults.normalization_context.gen_id configuration option by @olinox14 in #7775
  • fix(doctrine): enforce api-platform/serializer dependency by @soyuka in #7781

⚠️ Notes

Hydra class @id now always uses #ShortName (#7771): Hydra documentation classes now consistently use #ShortName as their @id instead of schema.org type URIs (e.g. schema:Product). This properly resolves class identifier collisions when multiple resources shared the same semantic type, which previously caused api-doc-parser conflation. Semantic types configured via types are now exposed through rdfs:subClassOf. Clients should expect class @id and property range changes in the Hydra documentation if resources had custom types configured.

New Contributors

Full Changelog: v4.3.0-alpha.1...v4.3.0-alpha.2