图像列表的RESTful地址

时间:2013-01-17 00:48:42

标签: html api http rest

我看过许多关于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)  

1 个答案:

答案 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

相关问题