Внедрить раздел определений для схемы JSON из swagger для параметров запроса (NestJs) - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть серверная часть NestJ, в которой я хочу сгенерировать схему JSON из моих @ nestjs / swagger аннотаций для проверки (с AJV ).Это работает довольно хорошо, но у меня есть конечная точка, где я использую параметры @Query.Я создал DTO и правильно аннотировал свойства с помощью @ApiModelProperty и использую его для соответствующего параметра @Query.Документ swagger хорош, но когда я генерирую свою схему JSON, что мне нужно для проверки, я не получаю раздел definitions, где схема для моего DTO определяется нормально.Если я использую свой DTO на @Body, он работает довольно хорошо.

Вот пример DTO:

export class Cat {
  @ApiModelProperty()
  public name!: string;

  @ApiModelProperty()
  public breed!: number;
}

Конечная точка:

@Get('cat')
public async cat(@Query() cat: Cat) {
  return cat;
}

Это приведет к:

Everything fine

И, к сожалению, для JSON без секции definition и параметры запроса будут выглядеть так:

 "paths": {
        "/animals/cat": {
            "get": {
                "parameters": [
                    {
                        "type": "string",
                        "name": "name",
                        "required": true,
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "name": "breed",
                        "required": true,
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": ""
                    }
                },
                "tags": [
                    "animals"
                ],
                "produces": [
                    "application/json"
                ],
                "consumes": [
                    "application/json"
                ]
            }
        },

Теперь я изменяю только @Query на @Body:

  @Get('cat')
  public async cat(@Body() cat: Cat) {
    return cat;
  }

Теперь результат JSON будет выглядеть следующим образом:

"paths": {
        "/animals/cat": {
            "get": {
                "parameters": [
                    {
                        "name": "Cat",
                        "required": true,
                        "in": "body",
                        "schema": {
                            "$ref": "#/definitions/Cat"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": ""
                    }
                },
                "tags": [
                    "animals"
                ],
                "produces": [
                    "application/json"
                ],
                "consumes": [
                    "application/json"
                ]
            }
        },

И с требуемый definitions раздел (с помощью которого я могу проверять свои объекты, используя AJV ):

"definitions": {
        "Cat": {
            "type": "object",
            "properties": {
                "name": {
                    "type": "string"
                },
                "breed": {
                    "type": "string"
                }
            },
            "required": [
                "name",
                "breed"
            ]
        }
    }

Учитывая это, мне будет хорошо с одним из этих двух решений:

  1. Каким-то образом, как я могу "принуждать" @ nestjs / swagger всегда генерировать definitions разделы моих определенных DTO в сгенерированном JSON.файл схемы JSON только для моих DTO.Другими словами, допустимый файл схемы JSON, который содержит (только) раздел definitions, потому что это то, что мне нужно для проверки моих DTO.

Мотивация для этого, как правило, состоит в том, чтобы аннотировать толькомоя программа с аннотациями swagger, а затем получить из нее документацию и схему проверки для моих DTO.Если у вас есть другое решение или я что-то делаю не так, пожалуйста, дайте мне знать.Такие библиотеки, как class-validator не являются решением, потому что тогда мне нужно две ( duplication !) Аннотации для всех моих DTO.Мне известна проблема , которая относится к этой проблеме, но я хочу обойти одно из двух решений, которые я упомянул выше.

...