我使用zircote/swagger-php
作为注解来为我的php WebApi生成swagger。
我有我的通用模型HttpResponse
,它有2个常见的属性(messages
和statusCode
),但data
是通用的,每个端点都有不同的类型。
我试图通过zircote/swagger-php
来注解它,并为每个端点的data
属性使用不同的模型。有人能告诉我怎么做吗?
现在我正在尝试下面的东西,但它给我的第一个那些anyOf
的每一个请求,而不是让我具体哪一个我想要的。
/**
* @OA\Schema()
*/
class HttpResponse
{
/**
* @OA\Property(anyOf={
* @OA\Schema(ref="#/components/schemas/HolidayRequestSpecificInput"),
* @OA\Schema(ref="#/components/schemas/AvailableHolidayDatesApiModel")
* })
*/
public $data;
/**
* @OA\Property(type="array", @OA\Items(ref="#/components/schemas/Message"))
*/
public $messages;
/**
* @OA\Property(ref="#/components/schemas/HttpResponseType")
*/
public $statusCode;
public function __construct($statusCode = HttpResponseType::Ok, $data = null)
{
$this->data = $data;
$this->messages = [];
$this->statusCode = $statusCode;
}
public function addMessages($messages)
{
foreach ($messages as $msg)
array_push($this->messages, $msg);
}
}
2条答案
按热度按时间dnph8jn41#
你应该使用
oneOf
而不是anyOf
。然而,这样设置的话,每个端点都会返回
HttpResponse
,并选择一个不理想的数据结构。恕我直言,更好的做法是让每个端点精确定义它返回的数据(除非我误解了您的代码)。
在这种情况下,我建议您将响应模式分为每个端点的基本和显式
@OA\Response
定义。缺点可能是注解不能准确地反映您的代码。但是,规范将更明确地反映端点返回的数据结构。
wxclj1h52#
也许你应该使用一个如这里所描述的插件:https://swagger.io/docs/specification/data-models/inheritance-and-polymorphism/