Skip to content

Commit

Permalink
protoc-gen-openapi: remove duplicate body params
Browse files Browse the repository at this point in the history
When a request has both path parameters and body = "*", the path
parameters were being repeated in the body. But according to the docs:
the special name `*` is used to define that every field not bound by the
path template should be mapped to the request body.

This commit does exactly that, when the body is `*` and there are some
path parameters, then the a new message schema is created that does not
include the path parameters. The name of the schema is the same as the
message name, with the `_Body` suffix.

fixes #323
  • Loading branch information
jagobagascon committed Jun 12, 2024
1 parent ad271d5 commit 96fb53b
Show file tree
Hide file tree
Showing 45 changed files with 1,756 additions and 227 deletions.
4 changes: 2 additions & 2 deletions COMPILE-PROTOS.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
# limitations under the License.
#

go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.34.1

protoc -I . -I ./third_party --go_out=. --go_opt=paths=source_relative plugins/*.proto
protoc -I . -I ./third_party --go_out=. --go_opt=paths=source_relative surface/*.proto
protoc -I . -I ./third_party --go_out=. --go_opt=paths=source_relative metrics/*.proto
protoc -I . -I ./third_party --go_out=. --go_opt=paths=source_relative metrics/*.proto
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,7 @@ paths:
content:
application/json:
schema:
$ref: '#/components/schemas/MoveBookRequest'
$ref: '#/components/schemas/MoveBookRequest_Body'
required: true
responses:
"200":
Expand Down Expand Up @@ -374,7 +374,7 @@ paths:
content:
application/json:
schema:
$ref: '#/components/schemas/MergeShelvesRequest'
$ref: '#/components/schemas/MergeShelvesRequest_Body'
required: true
responses:
"200":
Expand Down Expand Up @@ -469,36 +469,24 @@ components:
field in the subsequent call to `ListShelves` method to retrieve the next
page of results.
description: Response message for LibraryService.ListShelves.
MergeShelvesRequest:
MergeShelvesRequest_Body:
required:
- name
- other_shelf_name
type: object
properties:
name:
type: string
description: The name of the shelf we're adding books to.
other_shelf_name:
type: string
description: The name of the shelf we're removing books from and deleting.
description: |-
Describes the shelf being removed (other_shelf_name) and updated
(name) in this merge.
MoveBookRequest:
description: The body of LibraryService_MergeShelves
MoveBookRequest_Body:
required:
- name
- other_shelf_name
type: object
properties:
name:
type: string
description: The name of the book to move.
other_shelf_name:
type: string
description: The name of the destination shelf.
description: |-
Describes what book to move (name) and what shelf we're moving it
to (other_shelf_name).
description: The body of LibraryService_MoveBook
Shelf:
required:
- name
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,7 @@ paths:
content:
application/json:
schema:
$ref: '#/components/schemas/MoveBookRequest'
$ref: '#/components/schemas/MoveBookRequest_Body'
required: true
responses:
"200":
Expand Down Expand Up @@ -374,7 +374,7 @@ paths:
content:
application/json:
schema:
$ref: '#/components/schemas/MergeShelvesRequest'
$ref: '#/components/schemas/MergeShelvesRequest_Body'
required: true
responses:
"200":
Expand Down Expand Up @@ -469,36 +469,24 @@ components:
field in the subsequent call to `ListShelves` method to retrieve the next
page of results.
description: Response message for LibraryService.ListShelves.
MergeShelvesRequest:
MergeShelvesRequest_Body:
required:
- name
- otherShelfName
type: object
properties:
name:
type: string
description: The name of the shelf we're adding books to.
otherShelfName:
type: string
description: The name of the shelf we're removing books from and deleting.
description: |-
Describes the shelf being removed (other_shelf_name) and updated
(name) in this merge.
MoveBookRequest:
description: The body of LibraryService_MergeShelves
MoveBookRequest_Body:
required:
- name
- otherShelfName
type: object
properties:
name:
type: string
description: The name of the book to move.
otherShelfName:
type: string
description: The name of the destination shelf.
description: |-
Describes what book to move (name) and what shelf we're moving it
to (other_shelf_name).
description: The body of LibraryService_MoveBook
Shelf:
required:
- name
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,7 @@ paths:
content:
application/json:
schema:
$ref: '#/components/schemas/google.example.library.v1.MoveBookRequest'
$ref: '#/components/schemas/google.example.library.v1.MoveBookRequest_Body'
required: true
responses:
"200":
Expand Down Expand Up @@ -374,7 +374,7 @@ paths:
content:
application/json:
schema:
$ref: '#/components/schemas/google.example.library.v1.MergeShelvesRequest'
$ref: '#/components/schemas/google.example.library.v1.MergeShelvesRequest_Body'
required: true
responses:
"200":
Expand Down Expand Up @@ -461,36 +461,24 @@ components:
field in the subsequent call to `ListShelves` method to retrieve the next
page of results.
description: Response message for LibraryService.ListShelves.
google.example.library.v1.MergeShelvesRequest:
google.example.library.v1.MergeShelvesRequest_Body:
required:
- name
- otherShelfName
type: object
properties:
name:
type: string
description: The name of the shelf we're adding books to.
otherShelfName:
type: string
description: The name of the shelf we're removing books from and deleting.
description: |-
Describes the shelf being removed (other_shelf_name) and updated
(name) in this merge.
google.example.library.v1.MoveBookRequest:
description: The body of LibraryService_MergeShelves
google.example.library.v1.MoveBookRequest_Body:
required:
- name
- otherShelfName
type: object
properties:
name:
type: string
description: The name of the book to move.
otherShelfName:
type: string
description: The name of the destination shelf.
description: |-
Describes what book to move (name) and what shelf we're moving it
to (other_shelf_name).
description: The body of LibraryService_MoveBook
google.example.library.v1.Shelf:
required:
- name
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,7 @@ paths:
content:
application/json:
schema:
$ref: '#/components/schemas/MoveBookRequest'
$ref: '#/components/schemas/MoveBookRequest_Body'
required: true
responses:
"200":
Expand Down Expand Up @@ -374,7 +374,7 @@ paths:
content:
application/json:
schema:
$ref: '#/components/schemas/MergeShelvesRequest'
$ref: '#/components/schemas/MergeShelvesRequest_Body'
required: true
responses:
"200":
Expand Down Expand Up @@ -469,36 +469,24 @@ components:
field in the subsequent call to `ListShelves` method to retrieve the next
page of results.
description: Response message for LibraryService.ListShelves.
MergeShelvesRequest:
MergeShelvesRequest_Body:
required:
- name
- otherShelfName
type: object
properties:
name:
type: string
description: The name of the shelf we're adding books to.
otherShelfName:
type: string
description: The name of the shelf we're removing books from and deleting.
description: |-
Describes the shelf being removed (other_shelf_name) and updated
(name) in this merge.
MoveBookRequest:
description: The body of LibraryService_MergeShelves
MoveBookRequest_Body:
required:
- name
- otherShelfName
type: object
properties:
name:
type: string
description: The name of the book to move.
otherShelfName:
type: string
description: The name of the destination shelf.
description: |-
Describes what book to move (name) and what shelf we're moving it
to (other_shelf_name).
description: The body of LibraryService_MoveBook
Shelf:
required:
- name
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,7 @@ paths:
content:
application/json:
schema:
$ref: '#/components/schemas/MoveBookRequest'
$ref: '#/components/schemas/MoveBookRequest_Body'
required: true
responses:
"200":
Expand Down Expand Up @@ -374,7 +374,7 @@ paths:
content:
application/json:
schema:
$ref: '#/components/schemas/MergeShelvesRequest'
$ref: '#/components/schemas/MergeShelvesRequest_Body'
required: true
responses:
"200":
Expand Down Expand Up @@ -469,36 +469,24 @@ components:
field in the subsequent call to `ListShelves` method to retrieve the next
page of results.
description: Response message for LibraryService.ListShelves.
MergeShelvesRequest:
MergeShelvesRequest_Body:
required:
- name
- otherShelfName
type: object
properties:
name:
type: string
description: The name of the shelf we're adding books to.
otherShelfName:
type: string
description: The name of the shelf we're removing books from and deleting.
description: |-
Describes the shelf being removed (other_shelf_name) and updated
(name) in this merge.
MoveBookRequest:
description: The body of LibraryService_MergeShelves
MoveBookRequest_Body:
required:
- name
- otherShelfName
type: object
properties:
name:
type: string
description: The name of the book to move.
otherShelfName:
type: string
description: The name of the destination shelf.
description: |-
Describes what book to move (name) and what shelf we're moving it
to (other_shelf_name).
description: The body of LibraryService_MoveBook
Shelf:
required:
- name
Expand Down
Loading

0 comments on commit 96fb53b

Please sign in to comment.