Skip to content

OpenApiSchemaReference allows Description alongside $ref producing non-spec-compliant output in OAS 3.0 (clone of #2745) #2763

Description

@mdaneri

Description

The Microsoft.OpenApi library allows setting Description on OpenApiSchemaReference, which results in serialized output containing both $ref and description.

However, according to OpenAPI 3.0.x specification:

When a $ref is used, all other properties SHALL be ignored.

This makes $ref effectively a replacement, meaning sibling keywords like description should not appear.


Example

Code

usingSystem;usingSystem.IO;usingMicrosoft.OpenApi.Models;usingMicrosoft.OpenApi.Writers;classProgram{staticvoidMain(){vardocument=newOpenApiDocument{Info=newOpenApiInfo{Title="Ref Description Test",Version="1.0.0"},Components=newOpenApiComponents{Schemas={["Pet"]=newOpenApiSchema{Type="object",Properties={["name"]=newOpenApiSchema{Type="string"}}}}},Paths=newOpenApiPaths{["/test"]=newOpenApiPathItem{Operations={[OperationType.Get]=newOpenApiOperation{Responses={["200"]=newOpenApiResponse{Description="OK",Content={["application/json"]=newOpenApiMediaType{Schema=newOpenApiSchemaReference("Pet"){Description="Local description"}}}}}}}}}};usingvarstream=newMemoryStream();usingvarwriter=newOpenApiJsonWriter(newStreamWriter(stream));document.SerializeAsV3(writer);writer.Flush();stream.Position=0;Console.WriteLine(newStreamReader(stream).ReadToEnd());}}

Output

$ref: '#/components/schemas/Pet'description: Local description

Expected behavior

One of:

  1. Serializer wraps in allOf
allOf:
- $ref: '#/components/schemas/Pet'description: Local description
  1. Description ignored when targeting OAS 3.0

  2. Validation warning


Notes


Question

What is the intended behavior when serializing references with annotations for OAS 3.0 vs 3.1?

Metadata

Metadata

Labels

help wantedpriority:p1High priority but not blocking. Causes major but not critical loss of functionality SLA <=7daystype:bugA broken experience

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions