Swagger UI, кажется, не обрабатывает необязательные ключи с POST json body

Пакеты:

hapi-swagger: 9.0.1
joi: 13.0.2

Контекст:

Я использую swagger-ui с swagger.json файл, созданный hapi-swagger,

Я использую для hapi-swagger jsonEditor опция установлена ​​в true, Это означает, что я не вписываю свое тело в одну текстовую область, а использую непосредственно сгенерированные входные данные пользовательского интерфейса.

Выпуск:

Только ключ "name" требуется в полезной нагрузке, остальные необязательны по умолчанию, если я ссылаюсь на Joi док.

На самом деле Swagger-UI отправляет:

curl -X POST
--header 'Content-Type: application/json' 
--header 'Accept: application/json' 
-d '{
 "name":"fzef",

 "idsUser": [],

 "idsUsergroup":[]
}'

Вместо этого я хочу, чтобы Swagger-UI отправить запрос как:

curl -X POST 
--header 'Content-Type: application/json' 
--header 'Accept: application/json' 
-d '{
 "name":"fzef",
 }'

Swagger UI

введите описание изображения здесь

Джой Схема

Joi.object().keys({

 request: Joi.object().keys({

     name: Joi.string().required(),

     idsUser: Joi.array().items(Joi.string()),

     idsUsergroup: Joi.array().items(Joi.string()),
   }),
  }),
 });

Swagger.json

...
"paths": {
  "/addCompany": {
    "post": {
      "operationId": "postAddcompany",

       "parameters": [{
          "type": "string",
          "default": "1",
          "pattern": "/^v[0-9]+$/",
          "name": "apiVersion",
          "in": "path",
          "required": true
        },
        {
          "in": "body",
          "name": "body",
          "schema": {
            "$ref": "#/definitions/Model 208"
           }
         }
       ],

      "tags": ["api", "CompanyCommandsAPIPart"],

      "responses": {
        "default": {
          "schema": {
            "type": "string"
          },
         "description": "Successful"
        },
      }
    }
  }
}

"definitions": {
  ...
  "Model 208": {
    "type": "object",

    "properties": {
      "name": {
        "type": "string"
      },

      "idsUser": {
         "$ref": "#/definitions/Model 13",
        "type": "array",
        "x-alternatives": [{
          "$ref": "#/x-alt-definitions/idsFunctionality",
          "type": "array"
        }, {
          "type": "string"
        }]
      },

      "idsUsergroup": {
         "$ref": "#/definitions/Model 13",
         "type": "array",
        "x-alternatives": [{
          "$ref": "#/x-alt-definitions/idsFunctionality",
          "type": "array"
        }, {
          "type": "string"
        }]
      },
    },

    "required": ["name"]
  },
  ...
}

Что я могу сделать, чтобы получить это тело запроса?

Мне нужно уточнить joi метод для того, чтобы hapi-swagger парсер добавить параметр вроде 'optional' к swagger.json?

Я нашел ту же проблему для запроса метода GET, но не нашел решения:

https://github.com/swagger-api/swagger-editor/issues/684

1 ответ

Решение

Компонент JSON Editor предоставляет кнопки "Свойства" и "Редактировать JSON" для настройки полезной нагрузки JSON, как вы можете в демонстрации компонента здесь: http://jeremydorn.com/json-editor/. Однако Swagger UI 2.x (версия, используемая hapi-swagger на момент написания), инициализирует JSON Editor с помощью disable_properties: true а также disable_edit_json: true поэтому эти кнопки скрыты, а пользовательский интерфейс не предоставляет никаких параметров конфигурации для изменения параметров редактора JSON. В репозитории hapi-editor на GitHub есть открытая проблема: https://github.com/glennjones/hapi-swagger/issues/332.

Возможный обходной путь - настроить код пользовательского интерфейса Swagger. Предполагая, что ваш Swagger UI index.html использует unminified swagger-ui.jsнайдите следующие строки в <hapi-swagger>/public/swaggerui/swagger-ui.js:

disable_properties:true,
disable_edit_json:true,

и заменить их на:

disable_properties:false,
disable_edit_json:false,

Теперь редактор JSON будет иметь кнопку "Свойства объекта". Нажмите эту кнопку, чтобы выбрать свойства, которые будут отображаться в редакторе форм и включаться в тело запроса. Не выбранные свойства не будут отправлены в теле запроса.

Swagger UI - JSON Editor - исключая необязательные свойства

Другие вопросы по тегам