Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RESTful,查询列表的有效方法。包含(元素)?_Rest_List - Fatal编程技术网

RESTful,查询列表的有效方法。包含(元素)?

RESTful,查询列表的有效方法。包含(元素)?,rest,list,Rest,List,鉴于: 在不下载完整列表的情况下,如何查询特定提要是否包含特定图像?换句话说,在不下载整个状态的情况下,如何检查资源状态是否包含组件?首先想到的是: /images: list of all images /images/{imageId}: specific image /feed/{feedId}: potentially huge list of some images (not all of them) 然后,客户端将针对/feed/{feedId}/images/{id}发出HTTP

鉴于:

在不下载完整列表的情况下,如何查询特定提要是否包含特定图像?换句话说,在不下载整个状态的情况下,如何检查资源状态是否包含组件?首先想到的是:

/images: list of all images
/images/{imageId}: specific image
/feed/{feedId}: potentially huge list of some images (not all of them)
然后,客户端将针对
/feed/{feedId}/images/{id}
发出HTTP GET以检查其存在性。我看到这种方法的缺点是,它迫使我将硬代码逻辑写入客户端,以便将图像URI分解为其专有id,这是REST不赞成的。理想情况下,我应该使用不透明的图像URI。另一个选择是:

Alias /images/{imageId} to /feed/{feedId}/images/{imageId}

但这感觉比我想要的更接近RPC。有什么想法吗?

这有什么问题吗

Issue HTTP GET against /feed/{feedId}?contains={imageURI} to check for existence
目前还不清楚“feed”是什么意思,但假设它包含资源,它将是相同的:

HEAD /images/id

在没有看到一些例子来提供上下文的情况下,很难说

但是您可以让客户端调用
HEAD/feed/images/{imageURI}
(假设您可能需要对imageURI进行编码)。服务器将使用通常的HEAD响应进行响应,如果资源不存在,则使用404错误进行响应。您需要在服务器上编写一些逻辑代码来理解imageURI


然后客户端使用头部的图像元信息,或者优雅地处理404错误并执行其他操作(取决于我猜的应用程序)

设置ImageQuery资源如何:

HEAD /feed/id
#从表单数据创建一个新查询,您可以在其中约束给定提要的结果。 #可以重定向到或不重定向到/image\u querys/query\u id。 POST/image\u查询/ #可选-查看包含URI的查询结果以查询资源。 获取/image\u查询/query\u id 演示使用Rails的想法。

以下内容没有什么“不安”:

它返回指定的子集。资源/feed/{feedid}是一个包含图像列表的列表资源。与contains查询一起返回的资源有什么不同

URI是唯一的,并从应用程序返回适当的状态。无法说明请求的缓存语义,但它们与原始/feed/{feedid}的缓存语义完全相同,它只是一个子集


最后,没有任何东西表明存在一个/feed/{feedid}/image/{imageURL}。若您想在那个级别使用子资源,那个么很好,但您不需要这样做。返回的列表可能只是一个直接图像URL列表,那么描述/feed/{feedid}/image/{imageURL}关系的链接在哪里?您打算将其嵌入有效负载中,对吗?

对不起,我澄清了这个问题/feed/{id}是表示图像列表的资源。不过,我不清楚在这种情况下发布HEAD/feed/id会有什么帮助。理想情况下,我不希望客户端能够将/images/id分解为“id”(我更希望资源之间的链接而不是硬代码逻辑)。我认为在技术上不可能点击/feed/images/{imageURI},因为{imageURI}可能包含必须引用的字符。假设我从URI中删除“http://”和任何查询/矩阵参数,那么您是对的。理想情况下,我不必提前对{imageURI}进行这样的限制。我投票支持你的答案,因为我相信尽管它有问题,但它可能是迄今为止最好的答案。希望有人能想出一个更干净的解决方案……当然,这是可能的,您可以在URI中表示“任何东西”。如果它们必须被引用,那么它们必须被引用。但是你应该有一个通用的逻辑来为你做这件事,不管怎样,你现在应该使用它。它可能很难看,但谁在乎呢?好的一面:它会起作用;坏的一面:它有变成非RESTful RPC的风险。如果重复使用同一个查询,每次都更改其设置,那么它开始听起来像一个真正的资源。这种情况是否存在值得怀疑,因为线程安全的contains()每次都需要创建一个新查询。在我看来,至少每个客户端都需要创建自己的查询资源以避免线程问题。我想在每个客户机内同步对列表的访问(每个客户机一个查询)是合理的,所以我将对此进行更多的思考。我希望我能做到这一点,但没有张贴。 # 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
/feed/{feedId}?contains={imageURI}[,{imageURI}]