簡體   English   中英

如何使用 OpenAPI 3 在 multipart/form-data 請求的請求正文中格式化 JSON 數組?

[英]How to format a JSON array in the request body of a multipart/form-data request with OpenAPI 3?

我正在嘗試為現有端點編寫 OpenAPI 3 規范。 端點使用multipart/form-data Content-Type ,其中一個參數接受 JSON 數組字符串。 以下 curl 顯示了此端點正常工作的示例:

curl -X 'POST' \
  'https://testing.org/test/' \
  -H 'accept: */*' \
  -H 'Content-Type: multipart/form-data' \
  -F 'simple=abc' \
  -F 'complex=[{"key": "string", "size": 0}"]'

我的 OpenAPI 3 規范目前如下所示:

openapi: 3.0.3
info:
  title: Simple
  description: Testing
  version: '1.0'
servers:
  - url: 'https://testing.org'
paths:
  /test/:
    post:
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                simple: 
                  type: string
                complex:
                  type: array
                  items:
                      type: object
                      properties:
                        key: 
                          type: string
                        size: 
                          type: integer
            encoding:
              complex:
                contentType: application/json
      responses:
        '200':
          description: OK

但是,在swagger 編輯器中使用“test it out”功能會產生如下所示的請求:

curl -X 'POST' \
  'https://testing.org/test/' \
  -H 'accept: */*' \
  -H 'Content-Type: multipart/form-data' \
  -F 'simple=abc' \
  -F 'complex=["{\n  \"key\": \"string\",\n  \"size\": 0\n}"]'

complex參數的格式不正確。 如果我刪除了規范的encoding部分,這就是請求的樣子:

curl -X 'POST' \
  'https://testing.org/test/' \
  -H 'accept: */*' \
  -H 'Content-Type: multipart/form-data' \
  -F 'simple=abc' \
  -F 'complex={
  "key": "string",
  "size": 0
}'

這是一個 JSON 對象,但不是一個 JSON 數組。

關於如何格式化 OpenAPI 3 規范以便將complex表單參數格式化為一個簡單的 JSON 數組[{"key": "string", "size": 0}"] ?謝謝!

您的 API 定義是正確的。 它甚至應該在沒有encoding的情況下工作,因為對象和對象數組的Content-Type默認情況下是application/json

問題是 Swagger UI 和 Swagger Editor 還沒有正確支持多部分主體中的 JSON。 以下是您可以跟蹤的相關問題:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM