在我的应用程序中,我有两种类型:user
和file
。 file
可以将user
标记为“收藏夹”,以便于访问。我目前在像这样“收藏” PUT
时使用file
方法:
PUT /user/fileList/
Body: { fileId: 'xxxx' }
然后,服务器会将给定的fileId
添加到用户的记录中(单独处理授权)。
这种PUT
的使用在语义上是不正确的还是其他不好的做法?有没有更好的方法来实现这种模式?在我看来(至少在语义上)是次优的解决方案。
答案 0 :(得分:1)
不。例如,Github会在其API中为存储库加注星标。
https://developer.github.com/v3/activity/starring/#star-a-repository
此处PUT和POST之间的相关区别在于,当客户端知道资源应位于的URL时,客户端应使用PUT,例如/user/starred/:owner/:repo
,并且客户端在不知道或不应该在何处创建资源时应使用POST,例如POST /users
,该链接应返回到/users/138
引用定义HTTP 1.1的RFC 2616:
PUT方法请求将封闭的实体存储在提供的Request-URI下...如果Request-URI没有指向现有资源,并且该URI为 能够由发出请求的用户代理定义为新资源,原始服务器可以创建资源 带有该URI。
POST方法用于请求源服务器接受请求中包含的实体作为新实体 在请求行中由Request-URI标识的资源的下属。
因此,在您的特定情况下,由于客户端知道资源的去向,因此我会将fileId
放在URL的某个位置(例如/user/fileList/:fileId
)而不是正文中。