我在Php Laravel中编写API并使用swagger(2.0)注释(lib:darkaonline/l5-swagger使用swagger-php)来生成swagger.json。我有以下招摇:
@SWG\Definition(
definition="Space",
@SWG\Property( property="id", type="integer", example=33),
@SWG\Property( property="name", type="string" ),
@SWG\Property( property="dataA", type="string", example="very long data string" ),
@SWG\Property( property="dataB", type="string", example="very long data string" ),
),
@SWG\Get(
path="/api/v1/client/space/list",
@SWG\Response( response=200, description="OK",
@SWG\Schema(
type="array",
@SWG\Items(ref="#/definitions/Space"),
)
)
)
上面的api应该返回空格列表(显示在表格中)但我只需要 id 和名称 - 但是空间也有非常重的字段 dataA 和 dataB - 表格中不需要这些字段。有没有办法排除这些字段而不为响应创建单独的空间定义(以避免违反"不要重复自己" 规则)?是否有某种机制可以做这样的事情:
@SWG\Items(ref="#/definitions/Space", exclude={"dataA","dataB"}),
和/或排除更多嵌套字段,例如
exclude={"dataA.securityField","dataA.someList[].heavyField"}
PS:我也将此报告为问题/问题here。
答案 0 :(得分:1)
目前还没有像exclude(look here)这样的功能实现。但是,您可以尝试使用部分可接受的方法(您创建新的定义,但此定义重用空间定义的部分):
@SWG\Definition(
definition="SpaceListEntry",
@SWG\Property( property="id", ref="#/definitions/Space/properties/id" ),
@SWG\Property( property="name", ref="#/definitions/Space/properties/name" ),
)
并@SWG\Get
将@SWG\Items(ref="#/definitions/Space"),
更改为
@SWG\Items(ref="#/definitions/SpaceListEntry"),
此解决方案部分令人满意,但优于空间定义的完整副本。