🎸Dynamic OpenAPI Schema Naming Based on DTO Namespace
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 30/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Ferma
- Stack tecnologico
- openapi, php
- Ambito
- api, backend-api-design
Direzione di ricerca
Inizia esaminando la strategia di denominazione di OpenApiFactory e la posizione di configurazione proposta in config/packages/api_platform.yaml. Determina come verrebbero risolti i namespace DTO e le cartelle di contesto Model, quindi verifica che gli schemi di input e output ricevano le chiavi EntryPoint.Context.ClassName richieste senza collisioni.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Feature Request: Dynamic OpenAPI Schema Naming Based on DTO Namespace
📦 Background
By default, API Platform generates OpenAPI schemas using the “short name” of each DTO, which often leads to collisions and unclear schema names when multiple operations share the same class name (e.g. ResetPasswordInput). We have a custom decorator today that post-processes the OpenAPI components and renames schemas at runtime to {EntryPoint}.{Context}.{DTO}, but this requires complex workarounds and still depends on heuristics or introspection of generated schema names.
🚩 Problem
-
Schema collisions when different operations share DTO class names (e.g.
ResetPasswordInputin “request” and “perform” flows). -
Lack of clarity: consumers see only the short class name, not the context (“Request” vs “Reset”) nor the entrypoint.
-
Complex custom decorators required to hack around built‑in naming logic.
🎯 Desired Behavior
When you define DTOs under a folder structure like:
src/ApiResource/
└── Auth
└── ResetPassword
├── Model
│ ├── Request
│ │ └── ResetPasswordInput.php
│ └── Reset
│ └── ResetPasswordInput.php
└── ResetPasswordEntryPoint.php
-
OpenAPI schema key should become
ResetPasswordEntryPoint.Request.ResetPasswordInput.jsonld ResetPasswordEntryPoint.Reset.ResetPasswordInput.jsonld -
It should work automatically for any module/feature/folder under
ApiResource/{Module}/{Feature}/Model/{Context}/{DTO}.php. -
No extra configuration (no manual
_api_operation_nameoverrides) or fragile heuristics based on class metadata.
💡 Proposed Solution
Enhance API Platform’s OpenAPI naming strategy to:
-
Extract the resource entrypoint (folder name + “EntryPoint”).
-
Extract the context folder under
Model(e.g.Request,Reset). -
Use the DTO class name.
-
Compose the OpenAPI schema key as
{EntryPoint}.{Context}.{ClassName}, automatically for all input/output DTOs.
This could live inside the core OpenApiFactory or as a first‑class feature behind a config flag, e.g.:
# config/packages/api_platform.yaml
api_platform:
openapi:
dynamic_schema_naming: true
Benefits:
-
Eliminates custom decorator hacks.
-
Prevents name collisions entirely.
-
Provides clear, self‑documenting schema names.
🔧 Example Before/After
| Before | After |
|---|---|
| components.schemas.ResetPasswordInput.jsonld | components.schemas.ResetPasswordEntryPoint.Request.ResetPasswordInput |
| components.schemas.ResetPasswordInput_1.jsonld | components.schemas.ResetPasswordEntryPoint.Reset.ResetPasswordInput |
Please consider adding this as an official enhancement to API Platform’s OpenAPI generator. It aligns with the directory‑based organization of DTOs and greatly improves developer experience and schema clarity.
Thank you! 🚀
- Lingua principale
- PHP
- Stelle
- 2.6k
- Fork
- 989
- Merge medio
- 2g 1h
- PR unite (30g)
- 104
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di api-platform/core
-
JSON:API: resource schemas (`*.jsonapi`) have `properties` but no `type: object`Forse già presa @ousamabenyounes l’ha presa 1 giorno fa. Aperta
Difficoltà 2/5 Meno di un'ora Idoneità per principianti 80/100
api-platform/core#8701 ·
I maintainer di solito rispondono entro 1 giorno
-
JSON:API: `JsonApiCollectionBaseSchemaNoPagination` declares `data` as `type: array` without `items`Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
api-platform/core#8699 ·
I maintainer di solito rispondono entro 1 giorno
-
api:openapi:export --spec-version=3.0.0 outputs `webhooks`, which is invalid in OpenAPI 3.0Forse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
api-platform/core#8690 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
api-platform/core#8680 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 68/100
api-platform/core#8725 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di api-platform/core
Issue simili
-
create:theme --tailwind scaffolds version.yaml at 1.0.0 while the LESS variant scaffolds 1.0.1Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 80/100
I maintainer di solito rispondono entro 1 giorno
-
PHP workflow streaming requests buffer the full SSE responseForse già presa @Winoren l’ha presa oggi. Apertareview: medium
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
langgenius/dify#44270 · 1 commento · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
bug customer-reported
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
MagnaCapax/PMSS#1085 ·
I maintainer di solito rispondono entro 5 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
nunomaduro/collision#375 ·