Skip to content

v2: Handle relative references in OpenApiSchemaReference type #2062

Closed

Description

The OpenApiSchemaReference type included in this package provides support for resolving schema references to the top-level components.schemas object. The object doesn't play nice if the reference is a relative reference to a property in a recursive schema.

The serializer seems to detect these relative references correctly and serialize the correct references. It would be great if these resolutions also worked in the object model, particularly for users taking advantage of consuming APIs' in ASP.NET Core like OpenAPI schema transformers.

For example, given the following type hierarchy:

public class A
{
	public B B { get; }
}

public class B
{
	public C C { get; }
}

public class C
{
	public B B { get; set; } 
}

And the following schema:

{
  "type": [
    "object",
    "null"
  ],
  "properties": {
    "b": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "c": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "b": {
              "$ref": "#/properties/b"
            }
          }
        }
      }
    }
  }
}

#/properties/b should map to the properties.b schema when interacting with the OpenApiSchemaReference object for the schema.

Activity

  1. baywet commented on Jan 31, 2025

    @baywet
    Member

    While working on the proxy design pattern fix, I came to the same conclusion!
    #2111 (comment)

    The good news is that with the work I've done, it should now be a single place fix + providing a recursion method to resolve the actual schema when necessary.

  2. added
    priority:p1High priority but not blocking. Causes major but not critical loss of functionality SLA <=7days
    on Jan 31, 2025
  3. RachitMalik12 commented on Feb 26, 2025

    @RachitMalik12
    Contributor

    Spec is being worked on. Waiting on this before beginning implementation.

  4. RachitMalik12 commented on Mar 17, 2025

    @RachitMalik12
    Contributor

    Darrel (@darrelmiller) will follow up with Vincent Biret (@baywet) to see if we can backport these fixes to 1.6.x

  5. baywet commented on May 13, 2025

    @baywet
    Member

    @darrelmiller will follow up with @baywet to see if we can backport these fixes to 1.6.x

    To answer that part: not without major rework and breaking changes. Which makes the cost prohibitive. So customers who want a great support for all reference scenarios will have to upgrade to 2.X.

    As an update, we have the spec mostly built (I need to review it to see if some gaps are still present), and we should be able to proceed with implementation soonish.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

priority:p1High priority but not blocking. Causes major but not critical loss of functionality SLA <=7days

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions