假设我有一个网站,用户可以上传和显示他们的照片.该用户的单张图片的RESTful网址如下所示:
http://api.gallery.com/users/{user-id}/images/{image-id}
Run Code Online (Sandbox Code Playgroud)
但是image-id本身已经是唯一的了,所以这个url已经足够好了它:
http://api.gallery.com/images/{image-id}
Run Code Online (Sandbox Code Playgroud)
从REST的角度来看,第一个是有利的,但后来我应该验证,这个图像真的是来自这个用户,因为有人可以改变网址,将用户ID改为别人的.在后一种情况下,我不需要添加此检查,这意味着更少的处理时间.
在这种情况下RESTful仍然是首选吗?
小智 8
简而言之,两者都是首选; 两者都可以返回相同的"事物",但"上下文"是不同的.
我们来看看您的网址:
/users: 所有用户/users/1:用户#1/users/1/images:所有用户#1的图像/users/1/images/1:用户#1的图像#1所有上述URL都围绕"用户"资源.它是"所有用户","用户","用户的图像"等.
/images:所有图像/images/1:图像#1 所有上述URL都围绕"图像"资源.它是"所有图像"或"图像".
现在,从表面上看,这种区别似乎相对较小,但在构建API时,差异会对数据的消耗方式产生很大影响.
例如,假设您想要获取所有用户#1图像的列表,这是首选的?
/users/1/images
要么
/images?where=user.id eq 1
第一个代表我们想要的,更受限制,更容易理解,但是,它并不意味着我们不应该支持第二个形式,因为查询的能力非常有用.
现在,如果你想获得一个图像列表及其相关用户呢?
/users/???
要么
/images?include=user
在这种情况下,第一个URL根本没有多大意义,因为我们试图获取图像列表而不是用户,而第二个URL 正好代表我们想要的.
现在,关于安全性,理想情况下应该以对消费者完全透明的方式进行.消费者应该能够说"我想要所有图像".并且只接收他们可以访问的所有图像.如果他们尝试访问他们无权访问的特定资源,则应返回适当的HTTP错误代码.
| 归档时间: |
|
| 查看次数: |
1092 次 |
| 最近记录: |