Closed
Description
I only recently learned about the bundle
command and it promised to be exactly what I was looking for. After taking it for a test ride I'm left with mixed feeling. There's some behavior that feels illogical to me. However, there may be perfectly sensible explanations for what I'm seeing.
API file
swagger: '2.0'
info:
version: "1.0"
title: test API
paths:
/foo:
get:
summary: Find foos
parameters:
- $ref: 'shared.yaml#/parameters/Page'
- $ref: 'shared.yaml#/parameters/PageSize'
- $ref: 'shared.yaml#/parameters/Sort'
- name: topic
in: query
description: topic
required: false
type: string
responses:
200:
description: OK
schema:
type: array
items:
$ref: '#/definitions/Foo'
400:
$ref: 'shared.yaml#/responses/clientErrorMessage'
500:
$ref: 'shared.yaml#/responses/internalErrorMessage'
/bar:
get:
summary: Returns all bars
responses:
200:
description: OK
schema:
$ref: "#/definitions/Bar"
400:
$ref: 'shared.yaml#/responses/clientErrorMessage'
500:
$ref: 'shared.yaml#/responses/internalErrorMessage'
definitions:
Bar:
type: object
required:
- channel
properties:
channel:
type: string
Foo:
type: object
required:
- id
properties:
id:
type: integer
format: int64
shared.yaml
The content of the file shared across multiple APIs contains the expected stuff. Snippet:
parameters:
Page:
name: page
in: query
minimum: 1
type: integer
default: 1
required: false
...
responses:
internalErrorMessage:
description: yadayada
schema:
$ref: '#/definitions/InternalError'
...
Bundled result
I run swagger-cli bundle --outfile bundle.yaml --type yaml api.yaml && swagger-cli validate bundle.yaml
and verify the output. bundle.yaml
is reported to be valid, that's cool.
- Oddity 1: rather than creating a (shared)
#/responses
section in the output from theshared.yaml#/responses
references the bundler dereferenced the response once and then points from a response in one path to the response in the other$ref: '#/paths/~1bar/get/responses/400'
. It's certainly valid OpenAPI but it doesn't feel clean to me. - Oddity 2: the
$ref
ed path parameters are dereferenced inline in thepaths:/foo:get:parameters:
section rather than just bundled. I guess it's actually the same pattern as above. I was expectingshared.yaml#/parameters/Page
to lead to a localparameters:
section.