如何在swagger-spec中表达"任意JSON"?

2rs*_*2ts 8 rest json swagger

假设我有一个REST服务,它可以接受请求体中的任意JSON.如何使用swagger-spec对此进行建模?

我考虑过模型对象,但我只能想到将任意JSON(作为字符串)包装在容器JSON对象中,就像{"payload": "{ some JSON object serialized to a string }"}它实际上没用.

或者,是否有其他方式来表示端点可以在请求正文中接收任意JSON?

Pet*_*ons 6

parameters与 just 的架构一样对请求的正文有效负载进行建模"type": "object"。然后,swagger UI 编辑器将提示用户一个大文本区域,其中包含{}可以用 JSON 对象填充的文本区域。

"/endpoint": {
      "post": {
        "parameters": [
          {
            "description": "Arbitrary JSON object payload",
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "type": "object"
            }
          }
        ]
      }
Run Code Online (Sandbox Code Playgroud)


Ron*_*Ron 4

Swagger 试图在 API 方面保持确定性,因此您所要求的内容不会得到直接支持。

我能想到的实现您想要的效果的唯一方法是将“consumes”属性设置为“application/json”并添加字符串类型的“body”参数。理论上,这意味着只应发送 JSON,但实际上,可以发送任何字符串。

此外,如果某些第三方工具在将字符串发送到服务器之前尝试将其转换为 JSON 对象,则可能会破坏这些工具。