Как исключить некоторые (вложенные) свойства из моделей, используемых в @SWG\Response
Я пишу API в Php Laravel и использую аннотации 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 должен возвращать список пробелов (чтобы показать в таблице), но мне нужно только получить идентификатор и имя - однако в Space также есть очень тяжелые поля dataA и dataB - которые не нужны в таблице. Есть ли способ исключить эти поля без создания отдельного определения пространства для ответа (чтобы не нарушать правило "не повторяйся")? Есть ли какой-то механизм, чтобы сделать что-то вроде этого:
@SWG\Items(ref="#/definitions/Space", exclude={"dataA","dataB"}),
И / или исключить больше вложенных полей, таких как
exclude={"dataA.securityField","dataA.someList[].heavyField"}
?
PS: я также сообщаю об этом как вопрос / проблема здесь.
1 ответ
В настоящее время не существует реализации для такой функциональности, как exclude (смотрите здесь). Однако вы можете попробовать следовать частично приемлемому подходу (вы создаете новое определение, но в этом определении повторно используются части определения Space):
@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"),
Это решение частично удовлетворяет, но лучше, чем полная копия определения пространства.