loopbackio / loopbackio/loopback-next
Overriding title in `getModelSchemaRef` causes duplication in OpenAPI schema
Personne n'a encore pris cette issue.
- Langage dominant
- TypeScript
- Étoiles
- 5.1k
- Forks
- 1.1k
- Merge moyen
- 2 j 21 h
- PR mergées (30 j)
- 27
Description
Steps to reproduce
Define a controller with getModelSchemaRef(SomeModel, {title: 'TitleOverride'}).
Controller definition
export class UserController {
@post('/users', {
security: OPERATION_SECURITY_SPEC,
responses: {
'200': {
description: 'User',
content: {
'application/json': {
schema: {
'x-ts-type': User,
},
},
},
},
},
})
async create(
@requestBody({
content: {
'application/json': {
schema: getModelSchemaRef(NewUserRequest, {
title: 'NewUser',
}),
},
},
})
newUserRequest: NewUserRequest,
): Promise<User> {
// implementation
}
}
Current Behavior
The controller above emits schema definitions for both NewUserRequest and NewUser. While NewUserRequest is not referenced anywhere else in the schema.
Expected Behavior
Only NewUser is present in OpenAPI schema.
Additional information
@loopback/repository-json-schema@2.4.2
@loopback/openapi-v3@3.4.1
I presume NewUserRequest is generated from getModelSchemaRef as it should while NewUser comes from parsing paramTypes where it causes a cache miss due to overridden title.
A probable fix could exclude a parameter corresponding to requestBody from enumeration here
Acceptance Criteria
- Don't generate unused schema for parameter decorated with
@requestBody
A solution I can think of is:
https://github.com/strongloop/loopback-next/blob/7f8d8356946dc236dd4daecbfae12e0a0662cf1c/packages/openapi-v3/src/controller-spec.ts#L329
should search through the content objects in the request body spec, if all contents' schemas exist in reference, then skip generating the one inferred from model ctor.
Guide de contribution
Ouvrir 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.
Piste de recherche
Commencez dans packages/openapi-v3/src/controller-spec.ts, autour de l’énumération de paramètres référencée, et suivez comment les schémas de requestBody et les constructeurs de modèles inférés arrivent dans les composants OpenAPI. Reproduisez le cas de surcharge de title, puis vérifiez qu’un corps de requête dont le schéma est déjà référencé ne génère pas de schéma dupliqué inutilisé.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- openapi, typescript
- Domaine
- api, backend-api-design
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 42/100