-
Notifications
You must be signed in to change notification settings - Fork 9.2k
Description
Hi,
I recently came across an OpenAPI Spec file from a customer where some path-level parameters/responses/headers/schemas were defined through an internal reference, but having $ref pointing to a parameter/response/header/schema defined in a previous path and not to one of the Components Object fixed fields, like in:
openapi: 3.0.2
paths:
'/a':
parameters:
- name: myParam
in: header
get:
responses:
'200':
description: some description
headers:
header1:
schema:
type: string
'/b':
parameters:
- $ref: '#/paths/~1a/parameters/0'
get:
responses:
'200':
description: some description
headers:
header1:
$ref: '#/paths/~1a/parameters/get/responses/200/headers/header1'
For parameters and responses the spec is somehow normative and says for instance (parameters property of the Operation Object) : "The list can use the Reference Object to link to parameters that are defined at the OpenAPI Object's components/parameters."
Questions:
- Does such a formulation forbid the use of a Reference Object pointing outside of #/components/parameters or not? If yes, shouldn't we make it even more clear that the targetted parameters/responses MUST be defined in OpenAPI Object's components/parameters or components/responses
- Does this forbid also the use of external references for parameters and responses?
For request bodies, callbacks, examples, schemas, links and headers the spec is not normative at all when it comes to where should be put the targets of JSON References, like for instance the definition of the schema property of the Media Type Object: "The schema defining the content of the request, response, or parameter."
Question: Is the difference between parameters/responses and the others on purpose? If yes, would someone be so kind as to explain me why (apart from the reason that external references can be used), and if not would it be possible to amend the spec so that it says that internal references MUST be linked to components defined in the corresponding fixed field of the Components Object?
I've read #1679 but I'm not sure what is the answer, between @darrelmiller position and @MikeRalphson one.
Thanks!