Empty response body fails validation
Validation fails on 204 response, which has empty string as body.
Example:
paths:
/health_check:
get:
description: Health check
responses:
'204':
description: OK
Code
OpenAPIParser.load 'openapi.yml'
request_operation = root.request_operation :get, '/health_check'
validatable_response_body = OpenAPIParser::RequestOperation::ValidatableResponseBody.new(204, "", {})
response_validate_options = OpenAPIParser::SchemaValidator::ResponseValidateOptions.new
request_operation.validate_response_body(validatable_response_body, response_validate_options)
Expected result is truth-y, but actual result is nil.
This is btw similar to a bug in https://github.com/openapi-library/OpenAPIValidators/issues/54.
- This gem raise error when validation is failed.
- This gem return
nilwhen validation passed.- In this case, we can't find media type object so don't validate parameter and return nil
- https://github.com/ota42y/openapi_parser/blob/9c7a802866b272212dc55c1ccc454586727da773/lib/openapi_parser/schemas/response.rb#L26-L26
But I think it is better to return true when the validation was passed so we should change return value :)
To those who using openapi_parser via committee:
committee has validate_success_only option, which can turn off responseBody validation if the response status is 4xx or 5xx.
In my experience, API schemas often omit the response body content for error responses specifically.
If you're encountering issues with how openapi_parser via committee handles error responses, disabling validate_success_only might help resolve them.