php-openapi icon indicating copy to clipboard operation
php-openapi copied to clipboard

Missing functions to remove elements ?

Open Herrick19 opened this issue 3 years ago • 1 comments

Hi,

I've been working on a project that would allow to take a full OAS Definition file and create a stripped down version using only a subset of the original endpoints, tags, webhooks, etc.

I want to remove internal functions based on a "x-internal" attributes.

I also want to create different versions of an api definition based on a "x-presentations" attributes.

So Far, I was able to remove uneeded:

  • "paths" using paths->removePath('/path')
  • "operations" using unset(pathItem->post)

But now I am struggling to find a way to remove other types of elements. For example:

  • Trying to remove a schema using unset($openapi->components->schemas['foo']); Give an error: "PHP Notice: Indirect modification of overloaded property cebe\openapi\spec\Components::$schemas has no effect"
  • Trying to delete an element from x-Webhooks gives the same kind of error
  • Tags doesn't seem to be possible at all since Tag Item are added to an unindexed array...

I am considering forking the project and starting to work on fixes for that but before I do I'd like to know: 1- If I'm doing something wrong and it's already possible to remove object. If so, I would appreciate a pointer. 2- If it's not possible, would you consider to improve the library to include the new functionality ? Or are you considering this as irrelevant to the project ? I'd be willing to help if you do.

If we can find a way to remove elements, I would also implement a function to remove unused elements automatically using a recursive referencing counter algorithm detecting unused elements.

Thanks in advance

Herrick19 avatar Feb 22 '22 02:02 Herrick19

Good point, changing the OpenAPI definitions was implemented only afterwards, the library was initally implemented for reading schema only. Functions for deleting should definitively be added.

cebe avatar Feb 24 '22 23:02 cebe