Description
I've been writing up guides for contract testing with OpenAPI in a bunch of different languages, and the Ruby on Rails one using https://github.com/mkon/openapi_contracts/ gave this great example, letting me know an empty response has been defined, but a response has been provided by the API implementation.
1) widgets POST /widgets responds with 201 when valid
Failure/Error: expect(response).to match_openapi_doc(OPENAPI_DOC)
* Expected empty response body
# ./spec/requests/widgets_spec.rb:17:in `block (3 levels) in <top (required)>'
Here's some OpenAPI for visual people:
post:
summary: Create Widget
operationId: create-widget
requestBody:
description: Widget to create
required: true
content:
application/json:
schema:
$ref: "../components/schema/widget.yaml"
responses:
'201':
description: Created
Does this mean "There is definitely no content" or "I haven't bothered defining it but dont worry about it"?
There are ways to define a "dont worry about it" thats a bit more specific, like:
post:
summary: Create Widget
operationId: create-widget
requestBody:
description: Widget to create
required: true
content:
application/json:
schema:
$ref: "../components/schema/widget.yaml"
responses:
'201':
description: Created
content:
application/json:
schema:
type: object
Or you can pop an example in instead of worrying about defining a schema but still providing something tangible for docs/mocks to think about.
Scrabbling round the spec I coudn't find anything in 3.0 or 3.1 but the SmartBear Guide on Describing Responses does explicitly say:
Some responses, such as 204 No Content, have no body. To indicate the response body is empty, do not specify a content for the response:
This leads me to think all responses missing a content
should have no body, because otherwise there's going to be some weird logic going "If 204 then missing means definitely no body but otherwise it just means I dunno!"
Would that be a breaking change to 3.1.x if its clarifying intent? Or does this have to go to Moonwalk?