2017-02-07 604 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,我希望這有助於!

相關問題