我看过许多关于REST的SO答案,但这个概念仍然不明确 至少,在我看来,正确地命名(URL)是REST的核心。
如何让我的地址方案变得安静? (我有图像列表,但对于每个请求,我提供了不同的子集)
image_list/recent (all image sorted in descending)
image_list/recent/front/ (to request newer images than a client has. client will provide the latest image id he has)
image_list/popular (sorted in popularity)
image_list/following/ (list of images of users that a client follows)
image_list/user_like/ (list of images a client likes)
当你有很多可以在资源上执行的操作时怎么样?
image/upload/
image/delete/
image/like/
image/dislike/
image/hide/
修改的
这是查看答案后的解决方案。 (但我仍然怀疑并且确实表明了这一点)
首先设置
images/?mode=recent
images/?mode=recent_front
images/?mode=popular
images/?mode=following&user_id=3
images/?mode=like&user_id=3
即使images/ for all images
不断变化,使用all images set
也不是惯例吗?
为什么我不能只使用images/recent
呢?
第二集
images/ POST (to create)
images/ DELETE
(to delete, ok but I have not seen anyone using `DELETE`. Does anyone use it?)
images/3/like POST (OK there's a `like` DB entity)
images/3/dislike POST (umm but there's no dislike DB entity)
images/3/hide .. (there's no hide entity, it's a merely a field on image)
答案 0 :(得分:1)
我相信您知道,REST不仅仅是URL的命名方案。
URI命名方案的重要之处在于URI唯一标识特定资源/实体。直接从Wiki页面引用:
REST中的一个重要概念是资源的存在(资源的来源) 特定信息),每个都用全局引用 标识符(例如,HTTP中的URI)。
在您的情况下,您希望您的URI结构化,以便它们可以唯一地标识图像或整个图像的集合。有不止一种方法可以做到这一点。有些人更喜欢查询字符串而其他人(包括我自己)更喜欢将标识符作为URI文件夹结构的一部分。 REST不会决定其中一个。
考虑识别图像所需的内容 - 它可以是文件名,但如果您的应用程序是数据库驱动的,那么您更有可能使用索引ID号。您可以这样设置您的URI:
http://YOURDOMAIN.TLD/API/IMAGE/232423
232423
唯一标识图像的位置。
现在回答你的第二个问题:
当你有很多可以在资源上执行的操作时怎么样?
通过HTTP上的REST API,操作通常由您使用的HTTP方法指定。 GET
用于检索数据,POST
用于更新/插入数据,DELETE
用于删除数据。让URI本身指定动作并不常见 - 正如您上面所做的那样。请注意,我正在谈论什么是常规练习 - REST的原则并没有规定应该使用什么HTTP方法或URI命名结构。
以图片上的喜欢为例,您应该将页面上的喜欢视为资源 - 一个独特的实体。您要对此实体执行不同的操作,例如:1。查找图像上的喜欢数量,2。添加新的喜欢的总数。
对于喜欢图像的REST方法,您可以将其设置为POST
到这样的URI:
http://YOURDOMAIN.TLD/API/IMAGE/232423/LIKE
其中232423
是图片的标识符,LIKE
表示该特定图片上的相似内容。
如果要检索图像上的喜欢数量,请使用相同的URI,但将HTTP方法切换为GET
。