Swagger php不同版本的定义

时间:2017-03-12 10:54:10

标签: php api swagger swagger-php

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

我有一个User课程,其中包含ID,电子邮件,密码和电话。

以下操作接收相应的参数

createemailpasswordphone

updateemailpasswordphoneoldPassword

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

所以这些中的每一个都使用了它自己对User的定义,我不确定如何整齐地定义它而不仅仅复制不同定义(DRY)的属性。

我考虑过创建一个

BaseUseremailphone

然后NewUser会添加password

然后UpdateUser添加oldPassword

FullUserBaseUser与只读关系属性相结合。

但该死的,对于这样一件微不足道的事情来说这太复杂了,所有这些参考地狱随后都会反映在swagger.json中。

这种问题有解决方案吗?

1 个答案:

答案 0 :(得分:0)

您可以将Swagger Definition与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. 创建UserCreate定义扩展BaseUser

/**
 * 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;
}

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

The output will be as shown.