gravitee-docs icon indicating copy to clipboard operation
gravitee-docs copied to clipboard

[swagger] Cannot validate JSON body schema of API policy update request

Open fmigneault opened this issue 6 years ago • 1 comments

Schema validation provided below fails although it shouldn't.

Giving following body to the PUT {GRAVITEE_APIM_URI}/management/apis/:id request, I get a successful update response (200). The API is also correctly updated when I go look at the policy definition within Gravitee APIM UI.

{
    "name": "test-api",
    "version": "3",
    "description": "test",
    "visibility": "public",
    "tags": [],
    "labels": [],
    "proxy": {
        "context_path": "/test-api",
        "strip_context_path": false,
        "groups": [
            {
                "name": "test-api",
                "endpoints": [
                    {
                        "name": "default",
                        "target": "http://api:5000",
                        "weight": 1,
                        "backup": false,
                        "type": "HTTP",
                        "inherit": true
                    }
                ],
                "load_balancing": {
                    "type": "ROUND_ROBIN"
                },
                "services": {
                    "discovery": {
                        "enabled": false
                    }
                },
                "proxy": {
                    "enabled": false,
                    "host": "null",
                    "port": 0,
                    "type": "HTTP"
                },
                "http": {
                    "connectTimeout": 5000,
                    "idleTimeout": 60000,
                    "keepAlive": true,
                    "readTimeout": 10000,
                    "pipelining": false,
                    "maxConcurrentConnections": 100,
                    "useCompression": true,
                    "followRedirects": false
                },
                "ssl": {
                    "trustAll": false,
                    "hostnameVerifier": false
                }
            }
        ]
    },
    "paths": {
        "/status": [
            {
                "methods": [
                    "DELETE",
                    "POST",
                    "PUT"
                ],
                "custom-policy": {
                    "field": "value"
                },
                "description": "Description of the Custom Gravitee Policy",
                "enabled": true
            },
       ],
   }
}

But using JSON schema validation between the Gravitee OpenAPI specification and the above body raises a validation error. Specifically, it doesn't like the following part of the definition:

"Path": {
	"type": "object",
	"properties": {
		"path": {
			"type": "string"
		},
		"rules": {
			"type": "array",
			"items": {
				"$ref": "#/definitions/Rule"
			}
		}
	}
},

The OpenAPI specification is invalid because the content under each path (ie: the policy definitions with its arguments) are indeed not formatted (nor expected by the API) with path and rules fields.

relates to #162

fmigneault avatar Sep 16 '19 20:09 fmigneault

Under UpdateApiEntity, the "paths" section:

"paths": {
	"type": "object",
	"additionalProperties": {
		"$ref": "#/definitions/Path"
	}
},

Should be replaced by something as follows :

"paths": {
	"type": "object",
	"additionalProperties": {
		"type": "array", 
                "items": { "$ref": "#/definitions/Rule" }
	}
},

fmigneault avatar Sep 16 '19 21:09 fmigneault