OpenAPITools / OpenAPITools/openapi-generator
[REQ] [Javascript] Support multiple media types in responses
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 26.8k
- Forks
- 7.7k
- PR merge metrics
- PR metrics pending
Description
Is your feature request related to a problem? Please describe.
This is a very similar issue as #440 but for Javascript. Here is an example endpoint with multiple representations that could be returned (csv or json):
/endpoint-returning-csv/:
get:
responses:
'200':
content:
text/csv:
schema:
format: binary
type: string
description: Retrieve CSV data
default:
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorSchema'
description: Default error response
summary: Retrieve CSV export
tags:
- default
This generates the following API:
endpointReturningCsvGet(opts, callback) {
opts = opts || {};
let postBody = null;
let pathParams = {
};
let queryParams = {
};
let headerParams = {
};
let formParams = {
};
let authNames = ['AuthToken'];
let contentTypes = [];
let accepts = ['text/csv', 'application/json'];
let returnType = File;
return this.apiClient.callApi(
'/endpoint-returning-csv/', 'GET',
pathParams, queryParams, headerParams, formParams, postBody,
authNames, contentTypes, accepts, returnType, null, callback
);
}
This all looks correct. But, the generated apiClient.callApi only ever returns a single mime type, and always application/json if it is included:
Describe the solution you'd like
I would like to be able to describe multiple produces parameters with different content types as documented in OpenAPI 3 and all of those be passed to the server. It would be nice to have full deserialization support for all of the different content types like in the Python PR, but at a minimum all content types should be sent in the Accept header.
Describe alternatives you've considered
A workaround for me is to remove the secondary JSON response altogether, leaving only the CSV response. Since I was coming from Swagger 2 codegen anyway that only allowed a single media type, this solution worked for me as a stop-gap.
Additional context
None!
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 modules/openapi-generator/src/main/resources/Javascript/es6/ApiClient.mustache, especially the callApi sections linked in the issue, and trace the generated endpointReturningCsvGet entry point. Verify how multiple response media types are selected and determine what changes are needed so all listed types reach the Accept header; done means the CSV and JSON responses are handled without dropping the secondary type.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript, openapi
- Domain
- api, tooling
- Issue type
- Feature
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100