Как разместить файлы в Swagger (OpenAPI)?
Я использую Swagger для документирования моих услуг REST. Один из моих сервисов требует загрузки CSV файла. Я добавил следующее в раздел parameters
в своем определении JSON API:
{
"name": "File",
"description": "The file in zip format.",
"paramType": "body",
"required": true,
"allowMultiple": false,
"dataType": "file"
}
и теперь я вижу опцию загрузки файла на моей странице пользовательского интерфейса Swagger. Но когда я выбираю файл и нажимаю "попробовать", я получаю следующую ошибку:
NS_ERROR_XPC_BAD_OP_ON_WN_PROTO: недопустимая операция над объектом-прототипом WrappedNative в jquery-1.8.0.min.js (строка 2)
Страница постоянно обрабатывается, и я не получаю никакого ответа.
Есть идеи, что может быть не так?
Ответы
Ответ 1
Наконец, я нашел ответ для этого, фактически ранее не было поддержки загрузки файла, теперь они обновлены swagger-ui.js. Вам нужно заменить свой старый на новый, а также вы должны определить эти свойства в параметрах для определенного параметра:
"paramType": "body",
"dataType": "file",
Ответ 2
Спецификация OpenAPI 2.0
В Swagger 2.0 (спецификация OpenAPI 2.0) используйте параметр формы (in: formData
) с type
установленным в file. Кроме того, операция consumes
должна быть либо multipart/form-data
, application/x-www-form-urlencoded
или обоих.
consumes:
- multipart/form-data # and/or application/x-www-form-urlencoded
parameters:
- name: file
in: formData # <-----
description: The uploaded file data
required: true
type: file # <-----
Спецификация OpenAPI 3.0
В спецификации OpenAPI 3.0 файлы определяются как двоичные строки, то есть type: string
+ format: binary
(или format: byte
, в зависимости от варианта использования). Содержимое файла ввода/вывода описывается в той же семантике, что и любой другой тип схемы (в отличие от OpenAPI 2.0):
Многокомпонентный запрос, один файл:
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
# 'file' will be the field name in this multipart request
file:
type: string
format: binary
Многокомпонентный запрос, массив файлов:
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
# The property name 'file' will be used for all files.
file:
type: array
items:
type: string
format: binary
Файл POST/PUT напрямую (тело запроса - это содержимое файла):
requestBody:
content:
application/octet-stream:
# any media type is accepted, functionally equivalent to '*/*'
schema:
# a binary file of any type
type: string
format: binary
Примечание: семантика такая же, как и у других типов схем OpenAPI 3.0:
# content transferred in binary (octet-stream):
schema:
type: string
format: binary
Дальнейшая информация:
Ответ 3
Моя работа с
"paramType": "formData",
"dataType": "file",