openapi_first is a Ruby gem for request / response validation and contract-testing against an OpenAPI API description. It makes APIFirst easy and reliable.
New option for Middlewares::ResponseValidation: :raise_error (default: true). If set to false, the middleware will not aise an error if the response is invalid.
Hooks (see Readme for details):
after_request_validation
after_response_validation
after_request_body_property_validation
after_request_parameter_property_validation
Validation failures returned by ValidatedRequest#error always returns a #message. So you can call my_validated_request.error.message if validated_request.invalid? and always get a human-readable error message.
Performance improvements.
More useful error messages
Breaking Changes
Drop Ruby 3.1 support
Manual validation
Definition#request.validate was removed. Please use Definition#validate_request instead.
Definition#validate_request returns a ValidatedRequest which delgates all methods to the original (rack) request, except for #valid?#parsed_body. #parsed_query, #operation etc. See Readme for details.
The Operation class was removed. ValidatedRequest#operation now returns the OpenAPI 3 operation object as a plain Hash. So you can still call ValidatedRequest#operation['x-foo']. You can call ValidatedRequest#operation_id if you just need the operationId.
Inspecting OpenAPI files
Definition#operations has been removed. Please use Definition#routes, which returns a list of routes. Routes have a #path, #request_method, #requests and #responses.
A route has one path and one request method, but can have multiple requests (one for each supported content-type) and responses (statuses + content-type).
Other
Several internal changes to make the code more maintainable, more performant , support hooks and prepare for OpenAPI 4. If you have monkey-patched OpenapiFirst, you might need to adjust your code. Please contact me if you need help.
New Features
Test Assertions
assert_api_conform
New option for
Middlewares::ResponseValidation
::raise_error
(default: true). If set tofalse
, the middleware will not aise an error if the response is invalid.Hooks (see Readme for details):
after_request_validation
after_response_validation
after_request_body_property_validation
after_request_parameter_property_validation
Validation failures returned by
ValidatedRequest#error
always returns a#message
. So you can callmy_validated_request.error.message if validated_request.invalid?
and always get a human-readable error message.Performance improvements.
More useful error messages
Breaking Changes
Manual validation
Definition#request.validate
was removed. Please useDefinition#validate_request
instead.Definition#validate_request
returns aValidatedRequest
which delgates all methods to the original (rack) request, except for#valid?
#parsed_body
.#parsed_query
,#operation
etc. See Readme for details.Operation
class was removed.ValidatedRequest#operation
now returns the OpenAPI 3 operation object as a plain Hash. So you can still callValidatedRequest#operation['x-foo']
. You can callValidatedRequest#operation_id
if you just need the operationId.Inspecting OpenAPI files
Definition#operations
has been removed. Please useDefinition#routes
, which returns a list of routes. Routes have a#path
,#request_method
,#requests
and#responses
. A route has one path and one request method, but can have multiple requests (one for each supported content-type) and responses (statuses + content-type).Other