Как указать дополнительные свойства с помощью l5-swagger

#laravel #swagger #openapi

#laravel #swagger #openapi

Вопрос:

Я пытаюсь написать документацию OpenAPI для проекта (написанного с помощью Laravel) и борюсь с несколькими точками API.

Один возвращает

 {
    "active_options": {
        "1": {
            "name": "name1",
            "type": "type1"
        },
        "2": {
            "name": "name2",
            "type": "type2"
        },
        "3": {
            "name": "name3",
            "type": "type3"
        }
    },
    "server": {
        "url": "URL...",
        "settings1": "value"
    },
    "message": "Server settings retrieved."
}
 

Я изо всех сил пытаюсь написать эту аннотацию с помощью плагина l5-swagger.
The «1», «2», «3» являются необязательными, и любая их комбинация допустима.

Я хотел использовать optionalProperties , но я не знаю, как объединить их вместе.

Это самое близкое, что я получил:

      *   @OAResponse(
     *     response=200,
     *     description="Settings",
     *     @OAJsonContent(
     *       @OAProperty(property="options",
     *         @OAItems(
     *            @OAProperty(property="name", type="string"),
     *            @OAProperty(property="type", type="string")
     *         )
     *       ),
     *     )
     *   ),


 

Но образец генерирует это:

 {
  "options": [
    {
      "name": "string",
      "type": "string"
    }
  ]
}

 

В котором, очевидно, отсутствует "1": … часть.
Может быть, лучшим вопросом было бы, как сделать неназванные свойства?

Комментарии:

1. У меня такая же проблема. Документы не очень полные

2. @guergana смотрите мой ответ ниже

Ответ №1:

Это мое решение:

     /**
     *
     * @OASchema(
     *     schema="ExampleResponse",
     *   @OAXml(name="ExampleResponse"),
     *   @OAProperty(property="message", type="string", example="My solution."),
     *   @OAProperty(property="errors", type="object",
     *     @OAAdditionalProperties(type="array",
     *       @OAItems(
     *          @OAProperty(property="name", type="string"),
     *          @OAProperty(property="type", type="string")
     *       )
     *     )
     *   ),
     * )

     *
     */