swagger-ui: Examples referenced with $ref are not rendered correctly
Not sure if a regression of https://github.com/swagger-api/swagger-ui/issues/4021
This renders the example but also adds the $$ref key
openapi: '3.0.0'
info:
title: 'test'
version: '1.0.0'
paths:
/hello:
get:
description: 'Get welcome message.'
responses:
'200':
description: 'welcome message'
content:
application/json:
schema:
$ref: '#/components/schemas/Welcome'
example:
$ref: '#/components/examples/WelcomeExample'
components:
schemas:
Welcome:
type: object
properties:
message:
type: string
examples:
WelcomeExample:
value:
api_identifier: act_12345
And this one shows the $ref key instead of parsing it (Although the editor shows an error if the $ref doesn’t exist):
openapi: '3.0.0'
info:
title: 'test'
version: '1.0.0'
paths:
/hello:
get:
description: 'Get welcome message.'
responses:
'200':
description: 'welcome message'
content:
application/json:
schema:
$ref: '#/components/schemas/Welcome'
example:
$ref: '#/components/examples/WelcomeExample'
components:
schemas:
Welcome:
type: object
properties:
message:
type: string
examples:
WelcomeExample:
value:
api_identifier: act_12345
All of this tested in the swagger editor.
About this issue
- Original URL
- State: closed
- Created 6 years ago
- Comments: 21 (6 by maintainers)
I would like add another argument to the case for resolution. Is the current behavior for schemas. As a developer trying to define an API, I don’t see why I can have nested schema references but not nested example references.
From my point of view, what is wrong in this example is the
valuekey being rendered. Why can I reuse schemas but not examples?Encountering the same issue. Is anyone working on it?
Just trying to clarify things.
So basically we cannot use examples not only in a good way, but in fact. Because no one in their clear mind would insert a huge block of example data right in the middle of definitions - and that is exactly what we’re forced to do, because:
exampleand notexamples,Did I get it right?
@webron, thanks for the response! I think there are two issues:
$ref, and b) renders an erroneous artifact of$$ref. I think that consistency needs to be achieved. Either$refs are not supported (and displayed literally), or they are supported (in which case, rendering$$refis a bug that needs to be fixed).$refs inside examples, I would like to make a case for resolution instead of literal rendering. I think this behavior is intuitively expected by a number of users as well as some on the swagger-ui team (see @shockey’s comment in #4931). What’s the most appropriate channel through which to make such a case or feature request?Thank you again.
I am surprised to find that this ticket is closed. Using references in component
examplesin a similar manner toschemaseems to be an intuitive and expected behaviour for many.A list endpoint which is making use of an enveloped response becomes difficult to create an example for without duplication of the single instance example data which is required for other endpoints.
What do you think about the issue where
$refused inexamples(plural, which is valid, and part of the OpenAPI specification as opposed to insideexample(singular)) is dereferenced properly, but also causes an artifact of$$refbeing added to the dereferenced object?So for example this:
Renders as this (in JSON):
Notice the
"$$ref": "#/components/examples/User*/value"as the last property. This seems to be an issue regardless what’s going on withexample(singular) also mentioned in https://github.com/swagger-api/swagger-ui/issues/4924#issuecomment-428411720Should that be opened as a separate issue than?