Method: OpenapiFirst::Definition#validate_response

Defined in:
lib/openapi_first/definition.rb

#validate_response(rack_request, rack_response, raise_error: false) ⇒ ValidatedResponse

Validates the response against the API description.

Parameters:

  • rack_request (Rack::Request)

    The Rack request object.

  • rack_response (Rack::Response)

    The Rack response object.

  • raise_error (Boolean) (defaults to: false)

    Whethir to raise an error if validation fails.

Returns:



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/openapi_first/definition.rb', line 86

def validate_response(rack_request, rack_response, raise_error: false)
  route = @router.match(rack_request.request_method, resolve_path(rack_request),
                        content_type: rack_request.content_type)
  return if route.error # Skip response validation for unknown requests

  response_match = route.match_response(status: rack_response.status, content_type: rack_response.content_type)
  error = response_match.error
  validated = if error
                ValidatedResponse.new(rack_response, error:)
              else
                response_match.response.validate(rack_response)
              end
  @config.after_response_validation&.each { |hook| hook.call(validated, rack_request, self) }
  raise validated.error.exception(validated) if raise_error && validated.invalid?

  validated
end