Избегайте переноса объекта запроса в InlineObject1 в генераторе OpenAPI из спецификации OpenAPI 3.0 в Typescript

Я пытаюсь создать клиент Typescript с помощью OpenAPI Generator 4.0.0-SNAPSHOT (наш менеджер по какой-то причине попросил нас использовать эту версию), который читает спецификацию OpenAPI 3.0. Все наши текущие конечные точки принимают данные либо в строке запроса, либо в теле формы, и все они работают безупречно. У меня есть новая конечная точка, которая будет считывать данные как JSON в теле POST (другие конечные точки тоже будут преобразованы). Он примет такой объект, как следующий:

{email: "[email protected]"}

Я пытаюсь задокументировать конечную точку в YAML следующим образом:

 /users/send-password-reminder:
    post:
      [...]
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
      responses:
        [...]

Однако, когда я генерирую клиент Typescript, он генерирует объект SendPasswordReminderRequest, который обертывает автоматически сгенерированный объект InlineObject1, который обертывает мой фактический email.

Это заставляет меня использовать его как:

const req: SendPasswordReminderRequest = {
    inlineObject1:{
      email: "..."
  }
};

APIClient.user.sendPasswordReminder(req, ...)

Вместо этого я хочу полностью избавиться от этого InlineObject1 и сделать SendPasswordReminderRequest напрямую обертывать свойство email и иметь возможность использовать его как:

const req: SendPasswordReminderRequest = {
   email: "..."
};

APIClient.user.sendPasswordReminder(req, ...)

Я пробовал определить тело в components/requestBodies и использовать $ref, но он по-прежнему обертывает фактическое тело, даже несмотря на то, что он использует имя моего типа тела запроса.

Как мне избавиться от этой упаковки?


person Can Poyrazoğlu    schedule 13.05.2019    source источник
comment
Какой тип клиента TypeScript вы создаете?   -  person Shaun Luttin    schedule 14.05.2019
comment
Я думал, что у меня есть для вас ответ, но я неправильно понял ваш вопрос. Вы пытаетесь полностью избежать обертывания, тогда как я думал, что вы только пытались заменить inlineObject1 на User.   -  person Shaun Luttin    schedule 14.05.2019
comment
@ShaunLuttin именно так. если я создаю схему явно с именем и ссылаюсь на нее с помощью $ref, InlineObject1 заменяется на MyNameThatIChoose, но я хочу полностью удалить обертку.   -  person Can Poyrazoğlu    schedule 14.05.2019
comment
Насколько я могу судить, то, что вы хотите сделать, не встроено ни в один из существующих генераторов. Один из подходов - создать собственный генератор, который разветвляет существующий.   -  person Shaun Luttin    schedule 14.05.2019


Ответы (1)


Я не уверен, будет ли это по-прежнему актуально для вас, но в коде я нахожу способ разрешить вообще не генерировать InlineObjects.

Если вы определяете заголовок для своей схемы, используемой в requestBody, он будет использовать этот title для наименования встроенного объекта.

Таким образом, вместо получения InlineObject вы можете получить что-то подобное: sendPasswordReminderRequestData, в зависимости от того, как вы называете свою схему.

Надеюсь, это поможет Вам или кому-то еще :).

person Tomáš Zábranský    schedule 17.02.2021
comment
Вы можете привести пример такого поведения? Спасибо ❤️ - person CacheGhost; 06.07.2021