swagger - Undvik att kapsla in request-objektet i InlineObject1 i OpenAPI Generator från OpenAPI 3.0-specifikation till Typescript
Jag försöker generera en Typescript-klient med OpenAPI Generator 4.0.0-SNAPSHOT (vår chef bad oss använda den versionen av någon anledning) som läser en OpenAPI 3.0-specifikation. Alla våra nuvarande slutpunkter tar antingen emot data i frågesträngen eller som formulärkropp, och de fungerar alla perfekt. Jag har en ny slutpunkt som kommer att läsa data som JSON i POST-kroppen (andra slutpunkter kommer så småningom också att konverteras). Den kommer att acceptera ett objekt som följande:
{email: "[email "}Jag försöker dokumentera slutpunkten i YAML som följande:
/users/send-password-reminder:
post:
[...]
requestBody:
content:
application/json:
schema:
type: object
properties:
email:
type: string
responses:
[...]
Men när jag genererar Typescript-klienten genererar den ett SendPasswordReminderRequest-objekt, som kapslar in ett autogenererat InlineObject1-objekt, som kapslar in mitt faktiska email.
Detta får mig att använda det som:
const req: SendPasswordReminderRequest = {
inlineObject1:{
email: "..."
}
};
APIClient.user.sendPasswordReminder(req, ...)
Vad jag istället vill är att helt bli av med InlineObject1 och göra så att SendPasswordReminderRequest direkt omsluter email-egenskapen, och kunna använda det som:
const req: SendPasswordReminderRequest = {
email: "..."
};
APIClient.user.sendPasswordReminder(req, ...)
Jag har försökt definiera kroppen i components/requestBodies och använda $ref, och det omsluter fortfarande den faktiska kroppen även om det använder namnet på min request body-typ.
Hur kan jag bli av med detta omslag?
Svar #1
Jag är inte säker på om detta fortfarande kommer att vara relevant för dig, men i koden hittar jag ett sätt att lösa det så att InlineObjects inte genereras alls
Om du definierar "title" för ditt schema som används i requestBody, kommer det att använda denna title för att namnge inline-objektet.
Så istället för att få InlineObject kan du få något liknande: sendPasswordReminderRequestData, beroende på hur du namnger ditt schema.
Hoppas detta hjälper dig eller någon annan :).
Svar #2
Här är ett exempel på hur man lägger till titeln i en POST-begäran så att den genereras med ett vänligt namn via klientgeneratorer (andra uppgifter utelämnas för korthet):
{
"openapi": "3.0.1",
"paths": {
"/Users/Hello": {
"post": {
"requestBody": {
"content": {
"application/json": {
"schema": {
"title": "UsersHelloRequest",
}
}
}
}
}
}
}
}
