2

我正在使用注释 swagger-php 为我的 API 设置 Swagger。我无法理解的是如何定义资源的不同定义。

我有一个User有 ID、电子邮件、密码和电话的课程。

以下操作接收各自的参数

create: email, password,phone

update: email, password, phone,oldPassword

get操作将返回id, email, phone+ 一些通过不同端点创建和更新的相关模型。

因此,这些中的每一个都使用它自己的定义,User我不确定如何巧妙地定义它,而不仅仅是跨不同定义(DRY)复制属性。

我想过创建一个

BaseUseremail, phone,

那么NewUser那将添加password

然后UpdateUser添加oldPassword

并将与只读关系属性FullUser结合起来。BaseUser

但是该死的,对于这样一个微不足道的事情来说它是如此复杂,所有这些参考地狱然后都会反映在 swagger.json 中。

有解决此类问题的方法吗?

4

1 回答 1

0

您可以将 Swagger 定义与extends功能一起使用。

  1. 使用电子邮件和密码创建 BaseUser

/**
 * Class BaseUser
 * @SWG\Definition(
 *     type="object",
 *     required={"email", "password"},
 * )
 */
class BaseUser
{
    /**
     * User's email address.
     *
     * @var string
     * @SWG\Property(example="email@example.com")
     */
    public $email;

    /**
     * User's password.
     *
     * @var string
     * @SWG\Property(example="password")
     */
    public $password;
}

  1. 创建扩展 BaseUser 的 UserCreate 定义

/**
 * Class UserCreate
 * @SWG\Definition(
 *     type="object",
 *     required={"phone_number"},
 * )
 */
class UserCreate extends BaseUser
{
    /**
     * User's phone number.
     *
     * @var integer
     * @SWG\Property(example=9876543210)
     */
    public $phone_number;
}

  1. 创建扩展 UserCreate 的 UserUpdate 定义

/**
 * Class UserUpdate
 * @SWG\Definition(
 *     type="object",
 *     required={"old_password"},
 * )
 */
class UserUpdate extends UserCreate
{
    /**
     * User's old or existing password.
     *
     * @var string
     * @SWG\Property(example="old-password")
     */
    public $old_password;
}

您可以在任何级别扩展您的定义,但问题是您需要的属性必须在您的最后一个定义中列出。

输出将如图所示。

于 2018-07-11T08:37:42.343 回答