Forum Discussion
This article explains how to use the Xamarin.Forms WebView class to present local or network web content and documents to users.
Hi Marc,
OpenAPI does not have a way to vary payloads based on server variables. The most consumer-friendly approach is to provide separate API definitions for different API versions.
If you want to use a single API definition, you can try one of the following:
1) Remove the version from the server URL and instead define different path versions as separate path items:
paths: /v1/something: ... /v2/something: ...
2) Use a single path with oneOf or anyOf to specify the possible schemas:
paths: /something: post: requestBody: description: API version 1 uses `ConfigStructure` and version 2 uses `ConfigStructure2`. content: application/json: schema: anyOf: - $ref: '#/components/schemas/ConfigStructure' - $ref: '#/components/schemas/ConfigStructure2'
2) Use a single ConfigStructure schema containing all properties from all versions, and use the description or extensions to document which properties are required/returned by later versions of the API.
Thanks for the reply the proposed solution works, I used the second option.
Here is my code:
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/ConfigStructure'
- $ref: '#/components/schemas/ConfigStructureV3'What I now observe is that my "Example Value" no longer appears. If I use one or the other of my defined components my example appears, but if I use the above syntax I get (no example available). The schema is behaving as it should I see both versions of my structure.
Question: Is my syntax incorrect, or do I need to specify the example separately from my reference?
Thanks for your help,
Marc
Hi Marc,
Your syntax is correct. This is a limitation of Swagger UI, currently it doesn't automatically generate examples for anyOf/oneOf schemas:
https://github.com/swagger-api/swagger-ui/issues/3803
As a workaround you can provide request and response examples manually:
content: application/json: schema: anyOf: - $ref: '#/components/schemas/Foo' - $ref: '#/components/schemas/Bar' examples: ConfigStructure: value: prop1: value1 ConfigStructureV3: value: prop2: value2
Related Content
Recent Discussions
- 6 hours ago
- 7 hours ago