我正在实现RESTfull API与AWS RDS通信,security_groups资源支持典型的CRUD谓词。当谈到“授权”和“撤销”时,我不确定什么是最佳做法,你认为哪一个最好?
自定义操作,网址中的参数
PUT agifog:3000/rds/security_groups/:security_group/authorize?ec2name='default'&ec2owner='0123456789'
自定义操作,传递参数
PUT agifog:3000/rds/security_groups/:security_group/authorize
{
"ec2name": "default"
"ec2owner": "0123456789"
}
标准更新
PUT agifog:3000/rds/security_groups/:security_group
{
"operation": "authorize"
"ec2name": "default"
"ec2owner": "0123456789"
}
答案 0 :(得分:3)
PUT
并不意味着"更新"超过POST
意味着"插入"。 PUT
表示"把它放在这里"。
RESTful实践围绕将您的URL视为资源,在您的域中具有某些含义的实体,您对其执行操作(HTTP请求的动词)。
您可以做的是将安全组视为您正在采取行动的资源,PUT
用户加入群组或DELETE
来自群组:
PUT agifog:3000/rds/security_groups/:security_group/default
{
"ec2owner": "0123456789"
}
DELETE agifog:3000/rds/security_groups/:security_group/default
这些可以对应于授权和撤销操作,并且可以轻松查看组中的GET
如何生成当前组中所有用户的列表。
答案 1 :(得分:1)
第二个似乎是最RESTful的。您有一个资源(安全组)和一个自定义操作(授权),它将响应您的请求的动词(PUT)。
PUT agifog:3000/rds/security_groups/:security_group/authorize
{
"ec2name": "default"
"ec2owner": "0123456789"
}
同样地:
PUT agifog:3000/rds/security_groups/:security_group/revoke
(注意:如果它会生成会话或其他一些身份验证数据/令牌,我可能更喜欢上面的POST。)
为了进行比较,如果您有兴趣更新该资源的属性,那么您需要执行以下操作:
PUT agifog:3000/rds/security_groups/:security_group
{
"some_attr1": "some_val"
"some_other_attr": "some_val"
}
在这种情况下,PUT意味着它是该资源的更新。