Использование дискриминатора вместе с allOf

Я пытаюсь задокументировать конечную точку API, используя swagger-php v2.0, но документация по swagger не корректно сгенерировано.

Мой вариант использования заключается в том, что мне нужно принять 2 разных полезных нагрузки с одной и той же конечной точки, а некоторые ключи могут присутствовать только в данном контексте.

Что касается официальной документации, это можно сделать, используя discriminator вместе с allOf и это пример, приведенный в спецификации OpenAPI (Swagger).

Для ясности я опубликую уменьшенную версию здесь

{
    "definitions": {
        "FooBar": {
        "type": "object",
        "discriminator": "type",
        "properties": {
            "name": {
            "type": "string"
            },
            "type": {
            "type": "string"
            }
        },
        "required": [
            "name",
            "type"
        ]
        },
        "foo": {
        "allOf": [
            {
            "$ref": "#/definitions/FooBar"
            },
            {
            "type": "object",
            "properties": {
                "unique_to_foo_field": {
                "type": "string",
                }
            },
            "required": [
                "unique_to_foo_field"
            ]
            }
        ]
        },
        "bar": {
        "allOf": [
            {
            "$ref": "#/definitions/FooBar"
            },
            {
            "type": "object",
            "properties": {
                "unique_to_bar_field": {
                "type": "string",
                }
            },
            "required": [
                "unique_to_bar_field"
            ]
            }
        ]
        }
    }
}

И я хочу преобразовать это для swagger-php, и тот, который я придумал, выглядит следующим образом, но кажется, что это неправильно. Прошу совета исправить, спасибо.

/**
* @SWG\Definition(
*      definition="model:FooBar",
*      type="object",
*      discriminator="type",
*      required={"type", "name"},
*      @SWG\Property(property="type", type="string"),
*      @SWG\Property(property="name", type="string"),
* )
*
* @SWG\Definition(
*      definition="model:foo",
*      allOf={
*          @SWG\Schema(ref="#/definitions/model:FooBar"),
*          @SWG\Schema(
*              required={"unique_to_foo_field"},
*              type="object",
*              @SWG\Property(property="unique_to_foo_field", type="integer")
*          )
*      }
* )
*
* @SWG\Definition(
*      definition="model:bar",
*      allOf={
*          @SWG\Schema(ref="#/definitions/model:FooBar"),
*          @SWG\Schema(
*              required={"unique_to_bar_field"},
*              type="object",
*              @SWG\Property(property="unique_to_foo_field", type="integer")
*          )
*      }
* )
*/

person Gayan    schedule 13.05.2019    source источник


Ответы (1)


Хорошо, мне удалось найти ответ с помощью друга.

И для других, которые могут наткнуться на ту же проблему, я отправляю свой собственный ответ на это.

/**
* @SWG\Post(
*   @SWG\Parameter(
*       name="Create a foo",
*       in="body",
*       @SWG\Schema(ref="#/definitions/foo")
*   ),
*   @SWG\Parameter(
*       name="create a bar",
*       in="body",
*       @SWG\Schema(ref="#/definitions/bar")
*   )
* )
*
* @SWG\Definition(
*      definition="FooBar",
*      discriminator="type",
*      required={"type", "name"},
*      @SWG\Property(property="type", type="string", enum={"foofoo","barbar"}),
*      @SWG\Property(property="name", type="string"),
* )
*
* @SWG\Definition(
*      definition="foo",
*      allOf={
*          @SWG\Schema(ref="#/definitions/FooBar"),
*          @SWG\Schema(
*              required={"unique_to_foo_field"},
*              type="object",
*              @SWG\Property(property="unique_to_foo_field", type="integer"),
*              @SWG\Property(property="type", type="string", default="foofoo"),
*          )
*      }
* )
*
* @SWG\Definition(
*      definition="bar",
*      allOf={
*          @SWG\Schema(ref="#/definitions/FooBar"),
*          @SWG\Schema(
*              required={"unique_to_bar_field"},
*              type="object",
*              @SWG\Property(property="unique_to_foo_field", type="integer"),
*              @SWG\Property(property="type", type="string", default="barbar"),
*          )
*      }
* )
*/
person Gayan    schedule 15.05.2019