Resolve: Better way to resolve allOf - #208
Conversation
Requirements:Simple example of resolving a property: Schema: openapi: 3.0.3info:
title: Resolve propertyversion: 1.0.0components:
schemas:
User:
type: objectrequired:
- id
- nameproperties:
id:
type: integername:
type: stringPost:
type: objectproperties:
id:
type: integercontent:
type: stringuser:
$ref: '#/components/schemas/User'paths:
'/':
get:
responses:
'200':
description: OKAfter resolving the references: components:
schemas:
User:
type: objectrequired:
- id
- nameproperties:
id:
type: integername:
type: stringPost:
type: objectproperties:
id:
type: integercontent:
type: stringuser:
type: objectrequired:
- id
- nameproperties:
id:
type: integername:
type: stringIn the same manner Post:
type: objectproperties:
id:
type: integercontent:
type: stringuser:
allOf:
- $ref: '#/components/schemas/User'
- x-faker: falsemust be resolved as: Post:
type: objectproperties:
id:
type: integercontent:
type: stringuser:
type: objectrequired:
- id
- nameproperties:
id:
type: integername:
type: stringx-faker: falseSo we can access /** @var \cebe\openapi\spec\Schema $user A property (similar to "content" and "id") of a Post component schema */$user->type # 'object'$user->required # [0 => 'id', 1 => 'name']$user->{'x-faker'} # `false`At this moment references are resolved but not |
SOHELAHMED7
commented
Sep 23, 2024
If a duplicate property is found components:
schemas:
User:
type: objectrequired:
- id
- name # <--------------------------------------------------------------properties:
id:
type: integername: # <--------------------------------------------------------------type: stringmaxLength: 10# <--------------------------------------------------------------Pet:
type: objectrequired:
- id2
- name # <--------------------------------------------------------------properties:
id2:
type: integername: # <--------------------------------------------------------------type: stringmaxLength: 12# <--------------------------------------------------------------Post:
type: objectproperties:
id:
type: integercontent:
type: stringuser:
allOf:
- $ref: '#/components/schemas/User'
- $ref: '#/components/schemas/Pet'
- x-faker: truethen property from the last component schema will be considered: Post:
type: objectproperties:
id:
type: integercontent:
type: stringuser:
type: objectrequired:
- id
- name # <--------------------------------------------------------------
- id2properties:
id:
type: integername: # <--------------------------------------------------------------type: stringmaxLength: 12# <--------------------------------------------------------------id2:
type: integerx-faker: true |
This reverts commit b4c19c7.
simPod
commented
Sep 23, 2024
You'll have better chance in https://github.com/DEVizzent/cebe-php-openapi since this repo is abandoned. |
cebe
left a comment
There was a problem hiding this comment.
Not sure about the recursive call. This can be a significant performance problem. I'd keep the resolveAllOf part on the Schema only and call it if needed.
Uh oh!
There was an error while loading. Please reload this page.
cebe
commented
Nov 15, 2024
@SOHELAHMED7 can you explain more about why you implemented the recursive resolution of allOf? allOf is a property of Schema and it only make sense to call it on a schema object. I'd expect the resolveAllOf() function inside of Schema and see it applied to sub-schemas only. |
I think So I implemented resolving |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Co-authored-by: Carsten Brandt <mail@cebe.cc>
Co-authored-by: Carsten Brandt <mail@cebe.cc>
Co-authored-by: Carsten Brandt <mail@cebe.cc>
Fixescebe/yii2-openapi#165
Also part of php-openapi/yii2-openapi#10
@cebe
At this moment
allOfwiil be only resolved for OpenAPI entities classes inheriting from SpecBaseObject.If this pull request is approved and merged I will create similar pull request for Callbacks, Responses and Paths