Swagger Validator жалуется на, казалось бы, правильно сформированный запрос - PullRequest
0 голосов
/ 05 сентября 2018

Я использую swagger-express-validator для проверки входных данных на небольшом сервере API (в формате Swagger 2)

Мое path определение выглядит следующим образом

/api/v1/users:
  post:
    produces:
      - "application/json"
    parameters:
      - in: body
        name: ids
        description: Array of user ids to be processed
        required: true
        schema:
          $ref: "#/definitions/ArrayOfIds"
    responses:
      200:
        description: success

ArrayOfIds определяется следующим образом

Id:
  type: string
ArrayOfIds:
  type: array
  items:
    $ref: "#/definitions/Id"

Отправка почтового запроса на сервер следующим образом:

POST /api/v1/users HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: localhost:3000
Connection: close
User-Agent: Paw/3.1.7 (Macintosh; OS X/10.13.6) GCDHTTPRequest
Content-Length: 35

{
  "ids": ["abcd12345"]
}

Приводит к ошибке

Request Invalid: POST /api/v1/users
 [ { keyword: 'type',
    dataPath: '',
    schemaPath: '#/type',
    params: { type: 'array' },
    message: 'should be array' } ]

Однако я могу получить доступ к req.body.ids в своем коде контроллера маршрутизации Express, и он содержит правильное значение ['1234abc'].

Есть ли у вас какие-либо идеи относительно того, почему валидатор жалуется на запрос? Это выглядит хорошо для меня.

1 Ответ

0 голосов
/ 05 сентября 2018

Тело вашего запроса не соответствует определению. Согласно определению, массив в теле запроса должен быть развернут:

POST /api/v1/users HTTP/1.1
Content-Type: application/json
...

["abcd12345"]

Если массив должен быть включен в свойство оболочки ids, тело запроса должно быть определено как type: object со свойством ids, которое содержит массив:

    parameters:
      - in: body
        name: ids
        description: Array of user ids to be processed
        required: true
        schema:
          type: object
          properties:
            ids:
              $ref: "#/definitions/ArrayOfIds"
...