如何在Swagger(优先Swagger-Lume)中描述JSON数组及指定结构?
如何在Swagger(含Swagger-Lume)中描述JSON数组及示例结构
嘿,我来帮你搞定这个问题——不管是通用的JSON数组描述,还是你给出的那个汽车厂商+车型的嵌套结构,用Swagger(特别是你提到的Swagger-Lume)都很清晰,下面一步步来:
一、Swagger中描述JSON数组的通用方法
Swagger(基于OpenAPI 2.0,也就是Swagger-Lume默认支持的版本)里描述数组核心靠两个字段:
type: array:标记当前字段是数组类型items:定义数组里每个元素的结构,分两种情况:- 简单类型数组(比如纯字符串/数字数组):直接在
items里指定type,比如字符串数组就写items: { type: string } - 对象数组:在
items里完整定义对象的Schema,包括对象的所有属性、类型和描述
- 简单类型数组(比如纯字符串/数字数组):直接在
二、针对你给出的JSON结构的具体写法
先再明确下你提供的JSON结构:
{
"cars": [
{ "name":"Ford", "models":[ "Fiesta", "Focus", "Mustang" ] },
{ "name":"BMW", "models":[ "320", "X3", "X5" ] },
{ "name":"Fiat", "models":[ "500", "Panda" ] }
]
}
这是一个嵌套数组结构:根对象的cars是对象数组,每个对象里又包含models这个字符串数组。下面给出Swagger-Lume支持的两种常见写法:
1. 直接编写Swagger YAML配置文件(swagger.yml)
Swagger-Lume可以直接读取项目里的swagger.yml文件生成文档,写法如下:
swagger: '2.0' info: title: 汽车数据API version: '1.0.0' paths: /cars: get: summary: 获取汽车厂商及对应车型列表 responses: 200: description: 请求成功,返回完整汽车数据 schema: type: object required: - cars # 标记cars是必填字段 properties: cars: type: array description: 汽车厂商列表 items: type: object required: - name - models # 每个厂商对象的必填字段 properties: name: type: string description: 汽车厂商的品牌名称 models: type: array description: 该厂商旗下的车型列表 items: type: string description: 具体车型名称
2. Laravel控制器注解写法(Swagger-Lume推荐方式)
如果你的项目是Laravel,用Swagger-Lume的注解方式更贴合开发流程,直接在控制器方法上添加Swagger注释即可:
/** * @SWG\Get( * path="/cars", * summary="获取汽车厂商及对应车型列表", * @SWG\Response( * response=200, * description="请求成功,返回完整汽车数据", * @SWG\Schema( * type="object", * required={"cars"}, * @SWG\Property( * property="cars", * type="array", * description="汽车厂商列表", * @SWG\Items( * type="object", * required={"name", "models"}, * @SWG\Property( * property="name", * type="string", * description="汽车厂商的品牌名称" * ), * @SWG\Property( * property="models", * type="array", * description="该厂商旗下的车型列表", * @SWG\Items( * type="string", * description="具体车型名称" * ) * ) * ) * ) * ) * ) * ) */ public function getCarList() { // 这里写你的业务逻辑,返回对应格式的JSON }
关键要点总结
- 嵌套数组的核心就是层层定义:外层数组的
items是对象,对象里的数组字段再用type: array+items定义元素类型 required字段可以标记必须存在的属性,让文档更严谨,也能帮助调用方明确参数/返回值的必填项
内容的提问来源于stack exchange,提问作者Veljko Sirovljević
相关产品推荐
相关产品推荐

