JSON:API: `included` schema is `items: {anyOf: []}` when a relation points to a resource without operations (`NotExposed`)
Les mainteneurs répondent en général sous 2 jours
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- Une demi-journée
- Accessibilité débutants
- 65/100
Piste de recherche
The empty anyOf comes from JsonApi\JsonSchema\SchemaFactory::buildDefinitionPropertiesSchema(), which skips related classes with false === $hasOperations but still writes anyOf when no reference remains. Reproduce with the two resources in the issue and run bin/console api:openapi:export to inspect Book.jsonapi. Done when included.items is a valid schema (for example {"type": "object"}) or has no empty anyOf, and the exported spec passes validation.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
API Platform version(s) affected
4.4.4
Description
A resource has a relation to another resource whose only operation is NotExposed. The included property of the JSON:API document schema is then:
"included": { "type": "array", "items": { "anyOf": [] } }
JSON Schema requires anyOf to be a non-empty array, so the document is invalid. Spectral (oas3-schema) and code generators reject it.
The cause looks like JsonApi\JsonSchema\SchemaFactory::buildDefinitionPropertiesSchema(). It skips a related class when false === $hasOperations, but it still writes anyOf when no reference remains.
How to reproduce
#[ApiResource(operations: [new NotExposed()])]
final class Author
{
public function __construct(public int $id = 1, public string $name = 'Frank Herbert') {}
}
#[ApiResource(operations: [new Get(provider: [self::class, 'provide'])])]
final class Book
{
public function __construct(public int $id = 1, public string $title = 'Dune', public Author $author = new Author()) {}
public static function provide(): self { return new self(); }
}
The Book.jsonapi schema:
"included": {
"description": "Related resources requested via the \"include\" query parameter.",
"type": "array",
"items": { "anyOf": [] },
"readOnly": true
}
Expected: when no related class has a schema reference, included.items is {"type": "object"}, or the anyOf key is left out.
Additional Context
Checked on api-platform/core v4.4.4, Symfony 7.4, PHP 8.5, in an empty Symfony app. The code of JsonApi\JsonSchema\SchemaFactory on main is the same as in v4.4.4.
The app has only FrameworkBundle, TwigBundle and ApiPlatformBundle, with this config:
$c->extension('api_platform', [
'mapping' => ['paths' => ['%kernel.project_dir%/src/ApiResource']],
'formats' => ['jsonapi' => ['application/vnd.api+json']],
'docs_formats' => ['jsonopenapi' => ['application/vnd.openapi+json']],
'doctrine' => ['enabled' => false],
]);
The spec comes from bin/console api:openapi:export.
- Langage dominant
- PHP
- Étoiles
- 2.6k
- Forks
- 988
- Merge moyen
- 4 j 10 h
- PR mergées (30 j)
- 114
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de api-platform/core
-
API Platform ignores array shapes in the JSON SchemaPeut-être pris @afraca l’a pris il y a 11 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
api-platform/core#8766 ·
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
api-platform/core#8744 ·
Les mainteneurs répondent en général sous 2 jours
-
JSON:API: resource schemas (`*.jsonapi`) have `properties` but no `type: object`Peut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverte
Difficulté 2/5 Moins d'une heure Accessibilité débutants 80/100
api-platform/core#8701 ·
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
api-platform/core#8819 ·
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 4/5 3-5 jours Accessibilité débutants 55/100
api-platform/core#8816 ·
Les mainteneurs répondent en général sous 2 jours
Toutes les issues de api-platform/core
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 64/100
FinanceFlash/unvibecode#577 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 77/100
Eyevinn/php-runner#24 ·
-
Administration: required plugin configuration field stays invalid after restoring its saved valueOuverteneeds-triage Platform(Default)
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 87/100
octobercms/october#6153 ·
-
good first issue priority:low type:docs
Difficulté 1/5 1-3 heures Accessibilité débutants 95/100
crazy-goat/rabbit-stream#969 ·
Les mainteneurs répondent en général sous 1 jour