我使用注释swagger-php为我的API设置Swagger。我无法理解的是如何定义资源的不同定义。
我有一个User
课程,其中包含ID,电子邮件,密码和电话。
以下操作接收相应的参数
create
:email
,password
,phone
update
:email
,password
,phone
,oldPassword
get
操作将返回id
,email
,phone
+一些通过不同端点创建和更新的相关模型。
所以这些中的每一个都使用了它自己对User
的定义,我不确定如何整齐地定义它而不仅仅复制不同定义(DRY)的属性。
我考虑过创建一个
BaseUser
与email
,phone
,
然后NewUser
会添加password
然后UpdateUser
添加oldPassword
和FullUser
将BaseUser
与只读关系属性相结合。
但该死的,对于这样一件微不足道的事情来说这太复杂了,所有这些参考地狱随后都会反映在swagger.json中。
这种问题有解决方案吗?
答案 0 :(得分:0)
您可以将Swagger Definition与extends
功能一起使用。
/**
* 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;
}
/**
* 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;
}
/**
* 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;
}
您可以在任何级别扩展定义,但是必须在最后一个定义中列出所需的属性。