microsoft / microsoft/typespec

Support multiple content types for OpenAPI 3 request body

Open
#2,154 4 comments 1 reaction 0 assignees View on GitHub
design:needed
Dominant language
Java
Stars
5.9k
Forks
394
Avg merge
1d 23h
Merged PRs (30d)
104

Description

How can I write TypeSpec to produce an Operation in OpenAPI 3 that has a request body with multiple content types?

As an example, what I want is:

```
paths:
/widgets:
post:
tags:
- Widgets
operationId: Widgets_process
parameters: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Widget'
text/csv:
schema:
type: string
responses:
'200':
description: The request has succeeded.
```

I tried [this (playground)][try1] but it gives an error "Model already has a property named contentType"

I also tried [this (playground)][try2] but it gives the error: "Operation has multiple @body parameters declared"

Finally I tried [this (playground)][try3] but it lumps both bodies under "application/json" -- not what I want.

So is there a way to do this and if so how?

[try1]: https://cadlplayground.z22.web.core.windows.net/?c=aW1wb3J0ICJAdHlwZXNwZWMvaHR0cCI7Cgp1c2luZyBUeXBlU3BlYy5IdHRwOwpAc2VydmljZSh7CiAgdGl0bGU6ICJXaWRnZXQgU8YbIiwKICB2ZXJzaW9uOiAiMS4wLjAiLAp9KQpuYW1lc3BhY2UgRGVtb8cvOwoKbW9kZWwgx0bEWUB2aXNpYmlsaXR5KCJyZWFkIiwgInVwZGF0ZSIpxCBwYXRoCiAgaWQ6IHN0cmluZzsKCiAgd2VpZ2h0OiBpbnQzMjsKICBjb2xvcj86ICJyZWQiIHwgImJsdWUiOwp9CgpAZXJyb3LHe0XEDMV6Y29kZctBbWVzc2FnZcpmfegArkpzb25Cb2R5PFQ%2BxTlAaGVhZGVyIGNvbnRlbnTkATc6ICJhcHBsaWNhdGlvbi9qc29uIsRVQGJvZHkgxA86IFTLU0NzdsRS2090ZXh0L2NzdstHxAXtAJ9Acm91dGUoIi935QFQcyIpCkB0YWco5wGmxBBpbnRlcmbkAYjHFMZzcG9zdCBwcm9jZXNzKAogICAgLi4u6QDoxis%2B5AHdxRnnAK4KICApOsdIIHzmAUrkAIg%3D&e=%40typespec%2Fopenapi3&options=%7B%7D
[try2]: https://cadlplayground.z22.web.core.windows.net/?c=aW1wb3J0ICJAdHlwZXNwZWMvaHR0cCI7Cgp1c2luZyBUeXBlU3BlYy5IdHRwOwpAc2VydmljZSh7CiAgdGl0bGU6ICJXaWRnZXQgU8YbIiwKICB2ZXJzaW9uOiAiMS4wLjAiLAp9KQpuYW1lc3BhY2UgRGVtb8cvOwoKbW9kZWwgx0bEWUB2aXNpYmlsaXR5KCJyZWFkIiwgInVwZGF0ZSIpxCBwYXRoCiAgaWQ6IHN0cmluZzsKCiAgd2VpZ2h0OiBpbnQzMjsKICBjb2xvcj86ICJyZWQiIHwgImJsdWUiOwp9CgpAZXJyb3LHe0XEDMV6Y29kZctBbWVzc2FnZcpmfegArkpzb25Cb2R5PFQ%2BxTlAaGVhZGVyKCJjb250ZW50LeQBUCIpIGpz5QEGYXBwbGljYXRpb24vxBMixF4uLi5Uy1NDc3bEUt1PdGV4dENzdjogIsQKL2NzdsVKQGLEOWPGQe0ArkByb3V0ZSgiL3flAV9zIikKQHRhZyjnAbXEEGludGVyZuQBl8cU5gCCcG9zdCBwcm9jZXNzKAogIMhmxAU66gEAxjQ%2B5AH15QDS5wDGCiAgKTrHUSB85gFi5ACR&e=%40typespec%2Fopenapi3&options=%7B%7D
[try3]: https://cadlplayground.z22.web.core.windows.net/?c=aW1wb3J0ICJAdHlwZXNwZWMvaHR0cCI7Cgp1c2luZyBUeXBlU3BlYy5IdHRwOwpAc2VydmljZSh7CiAgdGl0bGU6ICJXaWRnZXQgU8YbIiwKICB2ZXJzaW9uOiAiMS4wLjAiLAp9KQpuYW1lc3BhY2UgRGVtb8cvOwoKbW9kZWwgx0bEWUB2aXNpYmlsaXR5KCJyZWFkIiwgInVwZGF0ZSIpxCBwYXRoCiAgaWQ6IHN0cmluZzsKCiAgd2VpZ2h0OiBpbnQzMjsKICBjb2xvcj86ICJyZWQiIHwgImJsdWUiOwp9CgpAZXJyb3LHe0XEDMV6Y29kZctBbWVzc2FnZcpmfegArkpzb25Cb2R5PFQ%2BxTlAaGVhZGVyKCJjb250ZW50LeQBUCIpIGpz5QEGYXBwbGljYXRpb24vxBMixF4uLi5Uy1NDc3bEUt1PdGV4dENzdjogIsQKL2NzdsVKQGLEOWPGQe0ArkByb3V0ZSgiL3flAV9zIikKQHRhZyjnAbXEEGludGVyZuQBl8cU5gCCcG9zdCBwcm9jZXNzKAogIMhmxAU66gEAxjQ%2BIHzoAMAKICApOsdLIHzmAVzkAIs%3D&e=%40typespec%2Fopenapi3&options=%7B%7D

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.