假设:
/images: list of all images
/images/{imageId}: specific image
/feed/{feedId}: potentially huge list of some images (not all of them)
如何在不下载完整列表的情况下查询特定Feed是否包含特定图像?换句话说,如何在不下载整个状态的情况下检查资源状态是否包含组件?想到的第一个想法是:
Alias /images/{imageId} to /feed/{feedId}/images/{imageId}
然后,客户端将针对/feed/{feedId}/images/{id}
发出HTTP GET以检查其是否存在。我用这种方法看到的缺点是,它迫使我将逻辑硬编码到客户端,将图像URI分解为其专有ID,这是REST所诟病的。理想情况下,我应该使用不透明图像URI。另一种选择是:
Issue HTTP GET against /feed/{feedId}?contains={imageURI} to check for existence
但是感觉RPC比我想要的更接近。有什么想法吗?
答案 0 :(得分:1)
这有什么问题?
HEAD /images/id
目前还不清楚“饲料”是什么意思,但假设它包含资源,那就是相同的:
HEAD /feed/id
答案 1 :(得分:1)
如果没有看到一些提供背景的例子,那就太狡猾了。
但您可以让客户调用HEAD /feed/images/{imageURI}
(假设您可能需要对imageURI进行编码)。服务器将使用通常的HEAD响应进行响应,如果资源不存在则使用404错误进行响应。您需要在服务器上编写一些逻辑来理解imageURI。
然后客户端使用头部中的图像元信息,或者优雅地处理404错误并执行其他操作(取决于我猜的应用程序)
答案 2 :(得分:0)
如何设置ImageQuery资源:
# Create a new query from form data where you could constrain results for a given feed. # May or may not redirect to /image_queries/query_id. POST /image_queries/ # Optional - view query results containing URIs to query resources. GET /image_queries/query_id
This video使用Rails演示了这个想法。
答案 3 :(得分:0)
没有什么“非RESTful”关于:
/feed/{feedId}?contains={imageURI}[,{imageURI}]
它返回指定的子集。资源/ feed / {feedid}是包含图像列表的列表资源。如何使用contains查询返回的资源有何不同?
URI是唯一的,并从应用程序返回适当的状态。不能说请求的缓存语义,但它们与原始/ feed / {feedid}的缓存语义完全相同,只是一个子集。
最后,没有任何内容表明甚至存在/ feed / {feedid} / image / {imageURL}。如果您想使用该级别的子资源,那么很好,但您不需要。返回的列表可能只是直接图像URL的列表,那么描述/ feed / {feedid} / image / {imageURL}关系的链接在哪里?你打算将它嵌入有效载荷中,对吗?