OpenAPITools / OpenAPITools/openapi-generator
[BUG][Go] Latest Go client generator incorrectly handles explode keyword for query parameters
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 26.8k
- Forks
- 7.7k
- PR merge metrics
- PR metrics pending
Description
Bug Report Checklist
- Have you provided a full/minimal spec to reproduce the issue?
- Have you validated the input using an OpenAPI validator (example)?
- Have you tested with the latest master to confirm the issue still exists?
- Have you searched for related issues/PRs?
- What's the actual output vs expected output?
- [Optional] Sponsorship to speed up the bug fix or feature request (example)
Description
In v6.2.1 exploded and unexploded query parameter lists are handled correctly by the Go client generator. This is an example of a URL that has been created by an example client. explode is a query parameter with explode=true. noexplode is a query parameter with explode=false:
/v1/dummy?explode=e1&explode=e2&noexplode=n1%2Cn2
The same code generates this URL with the latest Docker image. The unexploded parameter list is exploded, whilst the exploded parameter list has reflect.Value value for each supplied value:
/v1/dummy?explode=reflect.Value+value&explode=reflect.Value+value&noexplode=n1&noexplode=n2
openapi-generator version
Works as expected in v6.2.1. Bug observed with latest Docker image (uploaded to DockerHub on Nov 20, 2022 at 9:15 am).
OpenAPI declaration file content or url
openapi: 3.0.0
info:
title: Explode demo
version: 1.0.0
servers:
- url: http://api.example.com/v1
paths:
/dummy:
get:
summary: Dummy endpoint.
description: Dummy endpoint to highlight explode.
parameters:
- name: explode
in: query
description: Parameters that should be exploded.
explode: true
schema:
type: array
items:
type: string
- name: noexplode
in: query
description: Parameters that should not be exploded
explode: false
schema:
type: array
items:
type: string
responses:
'200': # status code
description: Dummy response
Generation Details
Generated client using Docker image:
docker run --rm -v "${PWD}:/local" openapitools/openapi-generator-cli:latest generate -i /local/explode.yaml -g go -o /local/out/go
Steps to reproduce
I used a main.go based on an auto-generated example in out/go/docs/DefaultApi.md. configuration.Debug is set to true to enable printing of URLs:
package main
import (
"context"
"fmt"
"os"
openapiclient "example.com/autogen/openapi"
)
func main() {
explode := []string{"e1", "e2"} // []string | Parameters that should be exploded. (optional)
noexplode := []string{"n1", "n2"} // []string | Parameters that should not be exploded (optional)
configuration := openapiclient.NewConfiguration()
configuration.Debug = true
apiClient := openapiclient.NewAPIClient(configuration)
r, err := apiClient.DefaultApi.DummyGet(context.Background()).Explode(explode).Noexplode(noexplode).Execute()
if err != nil {
fmt.Fprintf(os.Stderr, "Error when calling `DefaultApi.DummyGet``: %v\n", err)
fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
}
}
I used the replace keyword in the go.mod file to point to the autogenerated client library:
replace example.com/autogen/openapi => ./out/go
Building and running main.go shows the malformed URL. The actual query fails due to using a dummy host.
$ go run main.go
2022/11/22 11:33:27
GET /v1/dummy?explode=reflect.Value+value&explode=reflect.Value+value&noexplode=n1&noexplode=n2 HTTP/1.1
...
Rebuilding the client with latest-release version of Docker image results in correct URL:
$ go run main.go
2022/11/22 11:29:33
GET /v1/dummy?explode=e1&explode=e2&noexplode=n1%2Cn2 HTTP/1.1
...
Related issues/PRs
Can't find any.
Suggest a fix
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the OpenAPI declaration in explode.yaml and reproduce generation using the documented Docker command with the Go generator. Inspect the generated client and the request path exercised by main.go, comparing the latest output with v6.2.1 or latest-release. Done means exploded query values remain separate and unexploded values remain comma-separated, without reflect.Value text.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- docker, go
- Domain
- api, tooling
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 48/100