1

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

1 回答 1

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 方法喜欢图像,您可以将其设置为POSTURI,如下所示:

http://YOURDOMAIN.TLD/API/IMAGE/232423/LIKE

Where232423是图像的标识符,LIKE指的是该特定图像上的点赞数。

如果您想检索图像上的点赞数,请使用相同的 URI,但将 HTTP 方法切换为GET.

于 2013-01-17T00:54:36.853 回答