Как исключить некоторые (вложенные) свойства из моделей, используемых в @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"),

Это решение частично удовлетворяет, но лучше, чем полная копия определения пространства.

Другие вопросы по тегам