-
Notifications
You must be signed in to change notification settings - Fork 9.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Making representations a first class concept to address a number of structural concerns #721
Comments
I'm not sure that your |
@ePaul I wasn't sure about that, but I ran it through YAMLLint and it validated ok. |
And is it parsed as an empty object or an empty array? Or a |
Yay +1. |
Just ran this through with YAMLLint using a format for the content type that includes the profile. It validated it as valid YAML, but only after it reformatted it a bit like so:
I'm not familiar enough with obscure (to me) YAML syntax to know whether it's appropriately treating that as a key for that value. Can someone with more knowledge confirm, please? |
@vrrobz The ? is a way of being explicit about something being a key. I don't think there is any ambiguity in our case. http://yaml.org/spec/1.2/spec.html#id2798057 |
Awesome, that's what I needed to know. Thanks! |
What is the JSON equivalent of yaml ? : notation? (We should be careful to not use YAML specific constructs) |
The JSON equivalent to the first example is: {
"get": {
"description": "Returns pets based on ID",
"summary": "Find pets by ID",
"operationId": "getPetsById",
"responses": {
"200": {
"description": "pet response",
"representations" : {
"application/json" : {
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/Pet"
}
}
},
"text/html" : {}
}
},
"default": {
"description": "error payload",
"representations" : {
"application/json" : {
"schema": {
"$ref": "#/definitions/ErrorModel"
}
},
"text/html" : {}
}
}
}
},
"parameters": [
{
"name": "id",
"in": "path",
"description": "ID of pet to use",
"required": true,
"type": "array",
"items": {
"type": "string"
},
"collectionFormat": "csv"
}
]
} To my knowledge, I didn't use anything that can't be done in JSON. The : operator in Yaml is just a map, which maps to a JSON object. |
For representations in |
@ralfhandl I agree. Supporting different schemas like XML Schema, Relax NG, Schematron, and alternative JSON validation like JCR seems like a ideal goal to me. The challenge is that we would need to find a way to decouple the OpenAPI description mechanisms from the schema validation process. The benefit is that OpenAPI tooling would not have to reinvent schema validation mechanisms. But, tooling would have to deal with the fact that it might run into a validation mechanism that it doesn't know how to process. |
In #333 a That way tools can skip schemas whose language they can't cope with. |
representing the schema for non-JSON structures is something we'll tackle outside of this PR. but I do think that this fixes the association between the content format and |
Will turn this into a PR for both the input (requestBody) parameter, and for response representations. We will keep the parameter serialization outside of the scope of the PR. |
consider having |
This has been implemented in 3.0.0-RC0! 🎉 |
This is a proposal to address a number of the issues aggregated under #560.
Specifically:
The basic premise is that OpenAPI models
operations
that interact withresources
using a specific HTTP method. The interaction involves sendingrepresentations
and retrieving thoserepresentations
. A singleoperation
may support differentrepresentations
identified by amedia-type
.Consider the following
GET
operation that returns one of tworepresentations
.The
description
andheaders
properties of a response object stay, but theschema
andexamples
move under therepresentation object
that is defined as a property of therepresentations object
. Theexamples
property will need to change to either an array of objects, or a single object because all examples would be for the same media type.By defining the supported media types on the
representations object
, there is no longer a need for aproduces
array.It is important to note that different
representations
should not be semantically different when accompanied with the same class of status code. A request to a resource should always the same thing (for some unfortunately nebulous definition of thing). However, the syntax of that representation may be different and the amount of information contained may be different, but from a consumer's perspective. it is same concept, regardless of the representation. This is why thedescription
property is the same for all representations.The following is an example of a POST request that may send a HTML form as a request body.
The structure of the HTML form that is passed as a body are no longer intermixed with the URI parameters and are described by a
schema object
in therepresentation object
. This enables us to support all the different form related media types. There would no longer be any need for theformData
parameter type and no need for theconsumes
array.One open question is whether there is a value to allowing
representation object
s (media type, schema and examples) to be defined within the reusablecomponents
section.The text was updated successfully, but these errors were encountered: