Skip to content

Reference Resolution

Alex Wichmann edited this page Feb 22, 2023 · 1 revision

Reference Resolution

References currently only work for "internal" as in, within the components section of the document. However any AsyncApiSchema (and by extension JsonSchema) type, can have a reference to the components section.

The default reference resolutions can be seen in the table below

Action Default
Writing DoNotInlineReferences
Reading ResolveReferences

Writing

Making an object model that contains references will yield those references written to yaml/json by default Looking something like

channels:
  mychannel:
    publish:
      message:
        payload:
          type: object
          required:
            - testB
          properties:
            testC:
              $ref: '#/components/schemas/testC'
            testB:
              $ref: '#/components/schemas/testB'
components:
  schemas:
    testD:
      type: string
      format: uuid
    testC:
      type: object
      properties:
        testD:
          $ref: '#/components/schemas/testD'
    testB:
      type: boolean
      description: test

Setting InlineReferences to true, will yield a document looking like the following

channels:
  mychannel:
    publish:
      message:
        payload:
          type: object
          required:
            - testB
          properties:
            testC:
              type: object
              properties:
                testD:
                  type: string
                  format: uuid
            testB:
              type: boolean
              description: test
components: { }

Notice that all of the references are in-lined, and removed from the components section, as they are not needed anymore.

Overriding default settings

You can set the ReferenceResolution mode by using custom (non-default) AsyncApiWriterSettings and setting the ReferenceInline property according to your needs.

Note that the default is DoNotInlineReferences.

var outputString = new StringWriter(CultureInfo.InvariantCulture);
var writer = new AsyncApiYamlWriter(outputString, new AsyncApiWriterSettings { ReferenceInline = ReferenceInlineSetting.InlineReferences });
asyncApiDocument.SerializeV2(writer);

Reading

Overriding default settings

You can set the ReferenceResolution mode by using custom (non-default) AsyncApiReaderSettings and setting the ReferenceResolution property according to your needs.

Note that the default is ResolveReferences.

var reader = new AsyncApiStringReader(new AsyncApiReaderSettings { ReferenceResolution = ReferenceResolutionSetting.DoNotResolveReferences });