2017-02-07 31 views
0

我看了一些其他相关的问题,我仍然无法找到我要找的东西。这是一个例子JSON有效载荷被发送到一个API我正在写:如何在swagger参数中描述这个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 

与产量扬鞭-UI的预期结果:

但现在我上面的例子JSON有效载荷的最后部分挣扎。我不确定如何表示energyProduction钥匙,该钥匙是一年中每个月的钥匙。我也不确定如何描述roofSections这是一个对象数组,systemConfiguration这是一个对象的属性inverters其值是一个对象数组。

我正在通过swagger documentation相当多,但我仍然很困惑,希望也许有人可以解释一些对我来说更好的事情。

回答

1

我想通了。原来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 Data Types。例如,我尝试使用double作为其中一个属性,Swagger抱怨说它无法解析类型double。我很困惑,直到我终于找到the section of the docs描述formData参数和body参数(其中只有一个,因为它描述了整个请求体)之间的差异。基本上你只能使用JSON模式支持的数据类型。

扬鞭-UI现在示出了单个的textarea而不是对每个参数的多个输入字段。不如漂亮,但效果很好。您可以单击右侧的“示例值”框,并在textarea中放置一个预定义的JSON模板,以便您填写值。

如果你只是像我一样学习Swagger,我希望这有助于!

相关问题