Skip to content

Instantly share code, notes, and snippets.

@mikekistler
Created January 28, 2025 03:27
Show Gist options
  • Save mikekistler/9f599ee145f9df0216ad2d7c4e57ac1e to your computer and use it in GitHub Desktop.
Save mikekistler/9f599ee145f9df0216ad2d7c4e57ac1e to your computer and use it in GitHub Desktop.
Overlay example with Traits

This is my attempt to get the Traits overlay example working with Speakeasy's overlay tooling.

The original example is here.

Original OpenAPI

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

Overlay

overlay: 1.0.0
info:
  title: Apply Traits
  version: 1.0.0
actions:
  - target: $.paths.*.get[[email protected]]
    update:
      parameters:
        - name: top
          in: query
          schema:
            type: integer
        - name: skip
          in: query
          schema:
            type: integer
@mikekistler
Copy link
Author

mikekistler commented Jan 28, 2025

What about the JSON Path Plus package? It has an online tool too:

https://jsonpath.com

Interesting that I see it offers two modes -- "RFC 9535" and "JSONPath Plus".

Of course, it only accepts JSON and not YAML, so here's the same schemas as above but in JSON:

Original OpenAPI

{
  "openapi": "3.1.0",
  "info": {
    "title": "API with a paged collection",
    "version": "1.0.0"
  },
  "paths": {
    "/items": {
      "get": {
        "x-oai-paged": true,
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  }
}

And let's try a few queries:

  • RFC 9535 mode

    • $.paths.*.get[[email protected]] - syntax error
    • $.paths.*.get[?@['x-oai-paged']] - no syntax error but no nodes selected
    • $.paths[[email protected] && @.get['x-oai-paged']] -- works and selects the expect object
  • JSONPath Plus mode

    • $.paths.*.get[[email protected]] - no syntax error but no nodes selected
    • $.paths.*.get[?@['x-oai-paged']] - no syntax error but no nodes selected
    • $.paths[[email protected] && @.get['x-oai-paged']] -- no syntax error but no nodes selected
    • $.paths.*.get[?(@.x-oai-paged)] - syntax error
    • $.paths.*.get[?(@['x-oai-paged'])] -- no syntax error but no nodes selected
    • $.paths.*.get[?(@['x-oai-paged'] == true)] -- no syntax error but no nodes selected
    • $.paths[?(@.get && @.get['x-oai-paged'])] -- works and selects the expect object

HMMMMM.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment