#swagger #postman #openapi #postman-collection-runner #postman-pre-request-script
Вопрос:
Я получаю следующую ошибку при создании API в Postman: «Недопустимый тип данных. Должно быть либо массив, логическое значение, целое число, число, объект или строка»
Ошибка исправлена при преобразовании строки "type": "file"
в "type": "object"
, но я не уверен, есть ли правильный способ для этой ситуации. Потому что с этим обновлением запрос может не быть передан при отправке запроса в Postman.
"parameters": [
{
"in": "body",
"name": "file",
"description": "file",
"required": false,
"schema": {
"type": "array",
"items": {
"type": "file"
}
}
},
...
]
Итак, как я могу устранить проблему в Postman?
Ответ №1:
Проблема не в Почтальоне, а в определении API. "type": "file"
не является допустимым значением типа для использования в схемах и параметрах тела, этот тип можно использовать только в in: formData
параметрах.
С другой стороны, я не добавляю файл, пытаясь протестировать свое приложение через Postman. По этой причине я просто хочу подавить ошибки
В этом случае вы можете изменить "type": "file"
значение на "type": "string"
для подавления ошибок импорта. Или удалите всю проблемную операцию из определения API.
Как правильно определить загрузку файлов в OpenAPI
Определение API пытается описать загрузку массива файлов, но это не поддерживается в OpenAPI 2.0 ( swagger: '2.0'
). OAS2 поддерживает только загрузку отдельных именованных файлов через multipart/form-data
, и в этом случае определение API будет выглядеть следующим образом:
{
"swagger: "2.0",
...
"paths": {
"/something": {
"post": {
"consumes": [
"multipart/form-data"
],
"parameters": [
{
"in": "formData",
"name": "file1",
"type": "file" // A single file sent via form field "file1"
},
{
"in": "formData",
"name": "file2",
"type": "file" // Another file sent via form field "file2"
}
]
...
}
Однако загрузка массива файлов поддерживается в OpenAPI 3:
{
"openapi": "3.0.0",
...
"paths": {
"/something": {
"post": {
"requestBody": {
"content": {
"multipart/form-data": {
"schema": {
"type": "object",
"properties": {
"file": {
"type": "array",
"items": {
"type": "string",
"format": "binary"
}
}
}
}
}
}
},
...
}
}
}
}
Комментарии:
1. Большое вам спасибо за эти прекрасные объяснения, проголосовали. В этой сцене я должен использовать
object
илиtext
вместоfile
значения? Потому что я пытаюсь обновить"application/json"
до"multipart/form-data"
вconsumes
разделе, но проблема не устранена.2. Вам нужно не только изменить
consumes
, но и заменить"in": "body"
параметр одним или несколькими"in": "formData"
параметрами, как в моем первом примере. Но это, вероятно, все равно не приведет к желаемому результату, потому что это не массив файлов, а N отдельных параметров файла. OpenAPI 2 просто вообще не поддерживает файловые массивы. Правильное решение-преобразовать ваш файл OpenAPI 2.0 в OpenAPI 3.0, исправитьrequestBody
определение, как в моем 2-м примере, и вместо этого использовать исправленный файл OpenAPI 3.0 с Postman.3. На самом деле у меня нет шансов использовать OpenAPI v3.0 , и я должен продолжать использовать OpenAPI v2.0 . С другой стороны, я не добавляю файл, пытаясь протестировать свое приложение через Postman. По этой причине я просто хочу подавить ошибки и задаться вопросом, какой способ наиболее правильный. Что бы вы предложили в этой сцене?
4. В этом случае вы можете изменить
"type": "file"
"type": "string"
или полностью удалить проблемную операцию.