如何在swagger参数中描述这个JSON对象?

rnmwe5a2  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(121)

我已经看了一些其他相关的问题,我似乎仍然找不到我要找的东西。这是一个发送到我正在编写的API的JSON负载示例:

{
    "publishType": "Permitable",
    "electricalPanelCapacity": 0.0,
    "roofConstruction": "Standard/Pitched",
    "roofType": "Composition Shingle",
    "systemConstraint": "None",
    "addedCapacity": 0.0,
    "isElectricalUpgradeRequired": false,
    "cadCompletedBy": "94039",
    "cadCompletedDate": "2017-02-01T02:18:15Z",
    "totalSunhourDeficit": 5.0,
    "designedSavings": 5.0,
    "isDesignedWithinTolerance": "N/A",
    "energyProduction": {
        "january": 322.40753170051255,
        "february": 480.61501312589826,
        "march": 695.35215022905118,
        "april": 664.506907341219,
        "may": 877.53769491124172,
        "june": 785.56924358327,
        "july": 782.64347308783363,
        "august": 760.1123565793057,
        "september": 574.67050827435878,
        "october": 524.53797441350321,
        "november": 324.31132291046379,
        "december": 280.46921069200033
    },
    "roofSections": [{
        "name": "North East Roof 4",
        "roofType": "Composition Shingle",
        "azimuth": 55.678664773137086,
        "tilt": 15.0,
        "solmetricEstimate": 510.42831656979456,
        "shadingLoss": 14.0,
        "systemRating": 580.0,
        "sunHours": 0.88004882167205956,
        "moduleCount": 2,
        "modules": [{
            "moduleRating": 290.0,
            "isovaPartNumber": "CDS-MON-007070",
            "partCount": 2
        }]
    }, {
        "name": "South West Roof 3",
        "roofType": "Composition Shingle",
        "azimuth": 235.67866481720722,
        "tilt": 38.0,
        "solmetricEstimate": 3649.1643776261653,
        "shadingLoss": 59.0,
        "systemRating": 5220.0,
        "sunHours": 0.69907363556056812,
        "moduleCount": 18,
        "modules": [{
            "moduleRating": 290.0,
            "isovaPartNumber": "CDS-MON-007070",
            "partCount": 18
        }]
    }, {
        "name": "South East Roof",
        "roofType": "Composition Shingle",
        "azimuth": 145.67866477313709,
        "tilt": 19.0,
        "solmetricEstimate": 2913.1406926526984,
        "shadingLoss": 31.0,
        "systemRating": 2900.0,
        "sunHours": 1.0045312733285168,
        "moduleCount": 10,
        "modules": [{
            "moduleRating": 290.0,
            "isovaPartNumber": "CDS-MON-007070",
            "partCount": 10
        }]
    }],
    "SystemConfiguration": {
        "inverters": [{
            "isovaPartNumber": "ENP-INV-007182",
            "partCount": 30
        }]
    }
}

字符串
描述所有的初始参数很容易。

/post/new-cad/{serviceNumber}:
    post:
      summary: Publish a new CAD record.
      description: Creates a new CAD record under the provided service number and returns the name of the new CAD record, the unique SF ID, and the deep link URL for Salesforce.
      parameters:
        - name: serviceNumber
          in: path
          description: The service number for the solar project you're interested in publishing to.
          required: true
          type: string
        - name: publishType
          in: formData
          description: The type of CAD record to publish (Proposal, Permitable, or AsBuilt).
          required: true
          type: string
        - name: electricalPanelCapacity
          in: formData
          required: true
          type: number
          format: double
        - name: roofConstruction
          in: formData
          description: New, Flat Roof, Open Beam, Standard/Pitched
          required: true
          type: string
        - name: roofType
          in: formData
          description: Composition Shingle, Membrane (Rubber, TPO, PVC, EPDM), Metal - Corrugated (S-Curve), Metal - Standing Seam, Metal - Trapezoidal, Multi Roof Type, Rolled Comp, Silicone, Tar & Gravel, Tile - Flat, Tile - S-Curve, or Tile - W-Curve
          type: string
        - name: systemConstraint
          in: formData
          description: Usage, None, Roof, Electrical, Shading, or 10kW Max
          required: true
          type: string
        - name: addedCapacity
          in: formData
          required: true
          type: number
          format: double
        - name: isElectricalUpgradeRequired
          in: formData
          type: boolean
        - name: cadCompletedBy
          in: formData
          description: Employee ID of record author.
          type: number
          required: true
        - name: cadCompletedDate
          in: formData
          description: The date the CAD record was completed.
          type: string
          format: date
          required: true
        - name: totalSunhourDeficit
          in: formData
          type: number
          format: double
        - name: designedSavings
          in: formData
          type: number
          format: double
        - name: isDesignedWithinTolerance
          in: formData
          type: string
          description: Yes, No, or N/A


并在Swagger-UI中生成预期结果:
x1c 0d1x的数据
但现在我正在努力解决上面示例JSON有效负载的最后部分。我不确定如何表达energyProduction键,它是一个对象,每个月都有一个键。我也不确定如何描述roofSections,它是一个对象数组,systemConfiguration是一个具有inverters属性的对象,其值是一个对象数组。
我正在仔细检查swagger documentation,但我仍然很困惑,希望这里有人能给我解释得更好。

qjp7pelc

qjp7pelc1#

我想出来了原来formData不是我应该使用的参数。相反,我需要使用body并定义将填充正文的JSON结构。下面是使用body参数和对象模式完成的设计文件,并描述了所有嵌套的对象和数组。

/new-cad/{serviceNumber}:
    post:
      summary: Publish a new CAD record.
      description: Creates a new CAD record under the provided service number and returns the name of the new CAD record, the unique SF ID, and the deep link URL for Salesforce.
      parameters:
        - name: serviceNumber
          in: path
          description: The service number for the solar project you're interested in publishing to.
          required: true
          type: string
        - name: cadData
          in: body
          description: A JSON payload containing the data required to publish a new CAD record.
          required: true
          schema:
            type: object
            properties:
              publishType:
                type: string
                default: "Proposal"
                enum: ["Proposal","Permitable","AsBuilt"]
              electricalPanelCapacity:
                type: number
              roofConstruction:
                type: string
                default: "New"
                enum: ["New","Flat Roof","Open Beam","Standard/Pitched"]
              roofType:
                type: string
                enum: ["Composition Shingle","Membrane (Rubber, TPO, PVC, EPDM)","Metal - Corrugated (S-Curve)","Metal - Standing Seam","Metal - Trapezoidal","Multi Roof Type","Rolled Comp","Silicone","Tar & Gravel","Tile - Flat","Tile - S-Curve","Tile - W-Curve"]
              systemConstraint:
                type: string
                default: "None"
                enum: ["None","Usage","Roof","Electrical","Shading","10kW Max"]
              addedCapacity:
                type: number
                default: 0
              isElectricalUpgradeRequired: 
                type: boolean
              cadCompletedBy:
                type: string
              cadCompletedDate:
                type: string
              totalSunhourDeficit:
                type: number
              designedSavings:
                type: number
              isDesignedWithinTolerance:
                type: string
                default: "N/A"
                enum: ["N/A","Yes","No"]
              energyProduction:
                type: object
                properties:
                  january:
                    type: number
                  february:
                    type: number
                  march:
                    type: number
                  april:
                    type: number
                  may:
                    type: number
                  june:
                    type: number
                  july:
                    type: number
                  august:
                    type: number
                  september:
                    type: number
                  october:
                    type: number
                  november:
                    type: number
                  december:
                    type: number
              roofSections:
                type: array
                items:
                  type: object
                  properties:
                    name:
                      type: string
                    roofType:
                      type: string
                      enum: ["Composition Shingle","Membrane (Rubber, TPO, PVC, EPDM)","Metal - Corrugated (S-Curve)","Metal - Standing Seam","Metal - Trapezoidal","Multi Roof Type","Rolled Comp","Silicone","Tar & Gravel","Tile - Flat","Tile - S-Curve","Tile - W-Curve"]
                    azimuth:
                      type: number
                    tilt:
                      type: number
                    solmetricEstimate:
                      type: number
                    shadingLoss:
                      type: number
                    systemRating:
                      type: number
                    sunHours:
                      type: number
                    moduleCount:
                      type: integer
                    modules:
                      type: array
                      items:
                        type: object
                        properties:
                          moduleRating:
                            type: number
                          isovaPartNumber:
                            type: string
                          partCount:
                            type: integer
              systemConfiguration:
                type: object
                properties:
                  inverters:
                    type: array
                    items:
                      type: object
                      properties:
                        isovaPartNumber:
                          type: string
                        partCount:
                          type: integer
      tags:
       - NEW-CAD
      responses:
        200:
          description: CAD record created successfully.
          schema:
            type: object
            properties:
              cadName:
                type: string
              sfId:
                type: string
              sfUrl:
                type: string
          examples:
            cadName: some name
            sfId: a1o4c0000000GGAQA2
            sfUrl: http://some-url-to-nowhere.com
        204:
          description: No project could be found for the given service number.
        500:
          description: Unexpected error. Most likely while communicating with Salesforce.
          schema:
            type: string

字符串
所以现在我仍然可以从路径中获取serviceNumber,而其他所有内容都在请求体中。这里需要记住的一点是,您不能使用所有相同的Swagger数据类型。例如,我试图使用double作为其中一个属性,但Swagger抱怨说它无法解析类型double。我非常困惑,直到我最终找到文档中描述formData参数和body参数之间差异的部分(您只能有一个,因为它描述了整个请求主体)。基本上,您只能使用JSON模式支持的数据类型。
x1c 0d1x的数据
Swagger-UI现在为每个参数显示单个文本区域而不是多个输入字段。不是那么漂亮,但效果很好。你可以点击右边的“Example Value”框,它会在文本区域中为你放置一个预定义的JSON模板,这样你就可以只填写值了。
如果你只是像我一样学习Swagger,我希望这对你有帮助!

相关问题