RequestBody не отображается в вызове

Когда я определяю requestBody, он не отображается в документах swagger. Я хочу создать массив изображений и загрузить один файл для файла gpx в файле swagger. Как я могу добиться того, чтобы requestBody отображалось так же, как свойство параметров?

До сих пор я пытался объявить это как код ниже. Я не пытался сделать из него компонент requestBodies и вызывать эту ссылку, но я не думаю, что это проблема.

/**
 * @openapi
 * /routes:
 *   post:
 *     description: Create a route
 *     tags:
 *       - Routes
 *     security:
 *       - CustomToken: []
 *     requestBody:
 *       content:
 *         multipart/form-data:
 *           schema:
 *             type: object
 *             required:
 *               - images
 *               - track
 *             properties:
 *               images:
 *                 type: array
 *                 minItems: 1
 *                 maxItems: 3
 *                 items:
 *                   type: string
 *                   format: binary
 *               track:
 *                 type: string
 *                 format: binary
 *             encoding:
 *               images:
 *                 contentType: image/png, image/jpeg
 *     parameters:          
 *       - name: name
 *         description: Name of the route.
 *         in: query
 *         required: true
 *         type: string
 *         example: Utrecht naar Den Bosch
 *       - name: description
 *         description: Description of the route.
 *         in: query
 *         required: true
 *         type: string
 *         example: Een route die langs de prachtigste punten gaat op de route van utrecht naar Den Bosch.
 *       - name: price
 *         description: The price of the route using the purchasable coins as the currency.
 *         in: query
 *         required: true
 *         type: integer
 *         minimum: 0
 *         example: 1
 *       - name: rating
 *         description: The rating the route has been given.
 *         in: query
 *         required: false
 *         type: integer
 *         minimum: 1
 *         maximum: 5
 *         example: 5
 *       - name: tags
 *         description: The tags that define if the route contains dikes, forests, mountains or cities. To select multiple values hold ctrl and click on the values you want.
 *         in: query
 *         required: true
 *         type: array
 *         minItems: 1
 *         maxItems: 4
 *         uniqueItems: true
 *         items:
 *           type: string
 *           enum:
 *             - Dike
 *             - Forest
 *             - Mountain
 *             - City
 *         example:
 *           - Dike
 *           - Forest
 *     responses:
 *       200:
 *         description: succesfully created a route
 */

Согласно примерам, которые я нашел, именно так вы объявляете requestBody. Но значения не отображаются в файле документации swagger, как показано здесь: RequestBody не отображается в вызове

Используете ли вы OpenAPI 2.0 (обозначается swagger: "2.0" в сгенерированном файле определения API) или OpenAPI 3.0 (openapi: 3.0.0)? В ваших аннотациях используется сочетание синтаксиса 2.0 и 3.0, возможно, поэтому он не работает.

Helen 04.06.2019 12:49

@Helen Я использую OpenAPI 3.0, если я просматриваю сгенерированный файл json, он показывает следующее: {"info":{"title":"<main-service-gateway>","version":"1.0.0"}‌​,"openapi":"3.0.0","‌​servers":[]

Geordi Rugenbrink 04.06.2019 13:10

@Helen, а также какие части написаны в OpenAPI 2.0? Потому что я недавно перешел с 2.0 на 3.0, и мне все еще нужно кое-что изменить, чтобы получить синтаксис 3.0. Я думал, что все изменил, поэтому хотел бы знать, что я забыл изменить. Заранее спасибо!

Geordi Rugenbrink 04.06.2019 13:26

Какую библиотеку/фреймворк вы используете для создания файла OpenAPI из этих аннотаций? Кроме того, какая у вас версия пользовательского интерфейса Swagger? (Откройте инструменты разработчика браузера > Консоль и оцените versions.)

Helen 04.06.2019 15:12

Я использую библиотеку openapi-jsdoc npmjs.com/package/openapi-jsdoc. Версия swagger-ui — «3.0.12/g2567e51-dirty».

Geordi Rugenbrink 04.06.2019 15:16
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
5
812
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

3.0.12 — это очень старая версия пользовательского интерфейса Swagger, которая не поддерживает OpenAPI 3.0 (поддержка OAS3 была добавлена ​​в пользовательский интерфейс Swagger версия 3.1). Вам необходимо обновить пользовательский интерфейс Swagger. Последняя версия (3.22 на момент написания) правильно отображает тела запросов OpenAPI 3.0.

Есть также несколько проблем с аннотациями:

  • В теле запроса encoding должен быть на том же уровне, что и schema, а не внутри schema.

  • Определения типов параметров должны быть заключены в schema, например:

    *       - name: price
    *         description: The price of the route using the purchasable coins as the currency.
    *         in: query
    *         required: true
    *         schema:          # <------
    *           type: integer
    *           minimum: 0
    *         example: 1
    
    ...
    
    *       - name: tags
    *         description: The tags that define if the route contains dikes, forests, mountains or cities. To select multiple values hold ctrl and click on the values you want.
    *         in: query
    *         required: true
    *         schema:          # <------
    *           type: array
    *           minItems: 1
    *           maxItems: 4
    *           uniqueItems: true
    *           items:
    *             type: string
    *             enum:
    *               - Dike
    *               - Forest
    *               - Mountain
    *               - City
    *         example:
    *           - Dike
    *           - Forest
    

Возможно, вы знаете, как я могу обновить версию swagger-ui? У меня есть папка в моем API, которая содержит все компоненты swagger-ui, такие как: swagger-ui-bundle.js, swagger-ui-standalone-preset.js, swagger-ui.css и swagger-ui.js.

Geordi Rugenbrink 04.06.2019 16:01

Если у вас есть swagger-ui в качестве зависимости в package.json, обновите там версию. Если вы добавили эти файлы вручную, загрузите Репозиторий пользовательского интерфейса Swagger и возьмите соответствующие файлы из папки dist.

Helen 04.06.2019 16:11

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