Problem with multipart-multifile post-body
After creating the code for nodejs I tried to start the project by npm start in the out-folder.
But I get an error message:
API Errors:
#/paths/~1task~1/post/parameters/0: Not a valid parameter definition
#/paths/~1task~1/post/parameters/0: Not a valid parameter definition
#: Missing required property: schema
#: Not a valid undefined definition
#/type: No enum match for: object
#/type: No enum match for: object
#/type: No enum match for: object
#/type: No enum match for: object
#/paths/~1task~1/post/parameters/0: Missing required property: $ref
1 error and 0 warnings
The corresponding yaml-part:
/task:
post:
tags:
- app
summary: create task
operationId: createTask
description: |
todo
responses:
'200':
description: OK
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
offerNumber: # metadata part
description: 'todo'
type: string
trayImages: # image part
type: array
items:
type: string
format: base64
required:
- offerNumber
- trayImages
encoding:
trayImages:
contentType: image/png, image/jpeg
required: true
The idea behind this: The POST request must contain a kind of meta-data (the "offernumber"), and at least one image file. The number of images is not specified. It depends on how much the client wants to pass to the server.
See also: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#special-considerations-for-multipart-content
The API was designed with help of swaggerhub. And swagger-hub does not show me any error.
Can someone tell me what's wrong with my API?
@MikeRalphson Any idea? Is this a bug? Or is the yaml wrong?
The underlying issue is that the nodejs code generation is just a very thin wrapper around swagger-tools and swagger-tools only supports OAS 2.0. For that reason, your input OAS 3.0.x document has to be down-converted to OAS 2.0 and of course, not everything that can be expressed in OAS 3 can be expressed in OAS 2.0.
At the moment I'm not sure if the downconverter can be modified to make swagger-tools do the right thing when given your input OAS document. I'll have to brush up on whether OAS 2.0 supported arrays of file parameters...
In the meantime, it might be worth looking at something like https://github.com/exegesis-js/exegesis for node.js support of OAS 3, though we don't have a code-gen template for it, nor do I know if one would really be needed.