Почему здесь сбой валидатора swagger

#swagger

#swagger

Вопрос:

Кажется, я не могу понять, почему сбой проверки чванства

Странно то, что если я добавляю более одного пути, проверка жалуется только на последний. Затем, если я удалю последний, он начнет жаловаться на тот, что над ним.

При работе в редакторе swagger все, кажется, проверяется.

Документ swagger выглядит следующим образом:

 {
   "swagger":"2.0",
   "info":{
      "version":"0.0.1",
      "title":"Bla API"
   },
   "schemes":[
      "https"
   ],
   "produces":[
      "application/json"
   ],
   "host":"rest.bla.com",
   "basePath":"/api/v2/fleet",
   "paths":{
      "/{organisation_id}/access_groups":{
         "get":{
            "tags":[
               "Access Group"
            ],
            "summary":"Get access groupsn",
            "description":"Gets a list of 'access_group' objects based on the provided search criterian",
            "parameters":[
               {
                  "in":"path",
                  "name":"organisation_id",
                  "required":"true",
                  "type":"string"
               },
               {
                  "name":"term",
                  "in":"query",
                  "required":"false",
                  "type":"string"
               },
               {
                  "name":"take",
                  "in":"query",
                  "required":"true",
                  "type":"integer",
                  "format":"int32"
               },
               {
                  "name":"skip",
                  "in":"query",
                  "type":"integer",
                  "format":"int32",
                  "required":"true"
               },
               {
                  "name":"order",
                  "in":"query",
                  "type":"string"
               }
            ],
            "responses":{
               "403":{
                  "description":"Permission Denied",
                  "schema":{
                     "$ref":"#/definitions/error"
                  }
               },
               "200":{
                  "description":"OK",
                  "schema":{
                     "type":"object",
                     "properties":{
                        "data":{
                           "type":"array",
                           "items":{
                              "$ref":"#/definitions/access-group-response"
                           }
                        },
                        "pagination":{
                           "$ref":"#/definitions/pagination"
                        }
                     }
                  }
               }
            }
         }
      }
   },
   "definitions":{
      "access-group":{
         "description":"an object which provides the ability to grant access to specific assetsn",
         "properties":{
            "name":{
               "type":"string"
            }
         }
      },
      "access-group-response":{
         "properties":{
            "data":{
               "$ref":"#/definitions/access-group"
            },
            "links":{
               "type":"array",
               "items":{
                  "$ref":"#/definitions/link"
               }
            }
         }
      },
      "error":{
         "type":"array",
         "items":{
            "type":"object",
            "properties":{
               "type":{
                  "type":"string"
               },
               "code":{
                  "type":"string"
               },
               "message":{
                  "type":"string"
               },
               "key":{
                  "type":"string"
               }
            }
         }
      },
      "link":{
         "properties":{
            "href":{
               "type":"string"
            },
            "rel":{
               "type":"string"
            }
         }
      },
      "pagination":{
         "properties":{
            "page":{
               "type":"number",
               "format":"int32"
            },
            "total":{
               "type":"number",
               "format":"int32"
            }
         }
      }
   }
}
  

в то время как ошибка проверки выглядит следующим образом:

 {
   "schemaValidationMessages":[
      {
         "level":"error",
         "domain":"validation",
         "keyword":"oneOf",
         "message":"instance failed to match exactly one schema (matched 0 out of 2)",
         "schema":{
            "loadingURI":"http://swagger.io/v2/schema.json#",
            "pointer":"/definitions/parametersList/items"
         },
         "instance":{
            "pointer":"/paths/~1{organisation_id}~1access_groups/get/parameters/0"
         }
      },
      {
         "level":"error",
         "domain":"validation",
         "keyword":"oneOf",
         "message":"instance failed to match exactly one schema (matched 0 out of 2)",
         "schema":{
            "loadingURI":"http://swagger.io/v2/schema.json#",
            "pointer":"/definitions/parametersList/items"
         },
         "instance":{
            "pointer":"/paths/~1{organisation_id}~1access_groups/get/parameters/1"
         }
      },
      {
         "level":"error",
         "domain":"validation",
         "keyword":"oneOf",
         "message":"instance failed to match exactly one schema (matched 0 out of 2)",
         "schema":{
            "loadingURI":"http://swagger.io/v2/schema.json#",
            "pointer":"/definitions/parametersList/items"
         },
         "instance":{
            "pointer":"/paths/~1{organisation_id}~1access_groups/get/parameters/2"
         }
      },
      {
         "level":"error",
         "domain":"validation",
         "keyword":"oneOf",
         "message":"instance failed to match exactly one schema (matched 0 out of 2)",
         "schema":{
            "loadingURI":"http://swagger.io/v2/schema.json#",
            "pointer":"/definitions/parametersList/items"
         },
         "instance":{
            "pointer":"/paths/~1{organisation_id}~1access_groups/get/parameters/3"
         }
      }
   ]
}
  

Ответ №1:

required Свойство parameters объекта должно иметь логический тип, а не строку.

Если вы замените все "required":"true" s на "required":true и "required":"false" s на "required":false , ваш пример подтвердит правильность.