Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes examples for compliance with RFC-9535 #118

Open
wants to merge 3 commits into
base: v1.0-dev
Choose a base branch
from

Conversation

mikekistler
Copy link
Contributor

This PR makes a few minor fixes to the overlay examples to ensure they are compliant with RFC-9535.

I tested all the examples in the spec with Speakeasy's overlay playground and only these two had problems.

Note that any examples that use filters need

x-speakeasy-jsonpath: rfc9535

but I did not include that in the examples.

@mikekistler mikekistler changed the base branch from main to v1.0-dev February 11, 2025 16:30
lornajane
lornajane previously approved these changes Feb 11, 2025
Copy link
Contributor

@lornajane lornajane left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

@kevinswiber
Copy link

kevinswiber commented Feb 11, 2025

@mikekistler @gregsdennis Will this query work if we keep the original x-oai-traits example?

$.paths[[email protected]['x-oai-traits'][?@ == 'paged']].get
openapi: 3.1.0
info:
  title: API with a paged collection
  version: 1.0.0
paths:
  /items:
    get:
      x-oai-traits: ['paged']
      responses:
        200:
          description: OK

EDIT: It appears to work with Speakeasy's tooling.

@gregsdennis
Copy link
Contributor

Yeah, that's compliant @kevinswiber.

@mikekistler
Copy link
Contributor Author

Thanks @kevinswiber and @gregsdennis for puzzling out how to use the original x-oai-traits with array value. I've updated the PR to incorporate this.

Comment on lines +215 to +216
- name: newParam
in: query
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The spec says

If the target selects an array, the value of this field MUST be an entry to append to the array.

The original example appended a Parameter Object to an array of Parameter Objects, which feels correct.

The modified example appends a one-element array to an array, so I would expect the result be an array whose last element is the one-element array.

If we want "append to an array" to mean "concatenate two arrays", we should make that really clear in the text.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ralfhandl I don't think we do want that. I think the behavior you described is what I would expect. We had a whole issue and PR discussing arrays. I think it's #30?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ralfhandl can you take another look at this? Do we need to make the changes you requested?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well, that depends 😎

The Overlay specification says for action field update

If the target selects an array, the value of this field MUST be an entry to append to the array.

I would interpret this as

  • If I want to add a Tag Object to the tags array, the value of update must be single the Tag Object I want to add.
  • If I want to add two entries, I need two actions, each of which appends one entry to the array.

This interpretation is supported by the first Array Modification Example in the 1.0.0 spec.

However, both Bump.sh and Speakeasy require update to be an array with one or more entries, and this array is concatenated with the target.

If we want to keep the spec as it is now, the array modification example must not be changed, and we live with the fact that the two first implementations of the spec got array modification wrong.

If we want to make the example compatible with the two first implementations, we also must change the specification and say something like

If the target selects an array, the value of this field MUST be an array of entriesentry to append to the array.

or

If the target selects an array, the value of this field MUST be an arrayentry to concatenate withappend to the target array.

This however would be a breaking change and should be done in a new major version of the spec.

Copy link
Contributor

@lornajane lornajane left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm happy to approve this but we still have some requested changes to look at.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants