swagger - Evitar envolver el objeto de solicitud en InlineObject1 en OpenAPI Generator desde la especificación OpenAPI 3.0 a Typescript
Estoy intentando generar un cliente de Typescript con OpenAPI Generator 4.0.0-SNAPSHOT (nuestro gerente nos pidió usar esa versión por alguna razón) que lea una especificación OpenAPI 3.0. Todos nuestros endpoints actuales aceptan datos ya sea en la cadena de consulta o como cuerpo de formulario, y todos funcionan perfectamente. Tengo un nuevo endpoint que leerá datos como JSON en el cuerpo de POST (otros endpoints eventualmente también se convertirán). Aceptará un objeto como el siguiente:
{email: "[email "}Estoy intentando documentar el endpoint en YAML de la siguiente manera:
/users/send-password-reminder:
post:
[...]
requestBody:
content:
application/json:
schema:
type: object
properties:
email:
type: string
responses:
[...]
Sin embargo, cuando genero el cliente de Typescript, genera un objeto SendPasswordReminderRequest, que envuelve un objeto InlineObject1 autogenerado, que envuelve mi email real.
Esto me hace usarlo así:
const req: SendPasswordReminderRequest = {
inlineObject1:{
email: "..."
}
};
APIClient.user.sendPasswordReminder(req, ...)
Lo que quiero en su lugar es deshacerme completamente de ese InlineObject1 y hacer que SendPasswordReminderRequest envuelva directamente la propiedad email, y poder usarlo como:
const req: SendPasswordReminderRequest = {
email: "..."
};
APIClient.user.sendPasswordReminder(req, ...)
He intentado definir el cuerpo en components/requestBodies y usar $ref, y todavía envuelve el cuerpo real aunque use el nombre de mi tipo de cuerpo de solicitud.
¿Cómo puedo deshacerme de este envoltorio?
Respuesta #1
No estoy seguro de si esto seguirá siendo relevante para ti, pero en el código encontré una forma de resolverlo para no generar InlineObjects en absoluto
Si defines "title" para tu esquema usado en requestBody, este usará este title para nombrar el objeto en línea.
Así que en lugar de obtener InlineObject, puedes obtener algo similar a: sendPasswordReminderRequestData, dependiendo de cómo nombres tu esquema.
Espero que esto te ayude a ti o a cualquier otra persona :).
Respuesta #2
Aquí hay un ejemplo de cómo agregar el título a una solicitud POST para que se genere con un nombre amigable a través de los generadores de cliente (otros datos omitidos por brevedad):
{
"openapi": "3.0.1",
"paths": {
"/Users/Hello": {
"post": {
"requestBody": {
"content": {
"application/json": {
"schema": {
"title": "UsersHelloRequest",
}
}
}
}
}
}
}
}
