实现GET请求的RESTful方式是什么,它允许过滤可能数百个资源ID?

实现GET请求的RESTful方式是什么,它允许过滤可能数百个资源ID?,rest,Rest,假设我正在开发一个配方API,它提供了对配方资源的访问,这些资源包括配料、说明,当然还有配方的冗长背景故事): 现在,让我们假设我被要求实现一个功能,用户可以请求他们还没有尝试过的食谱。一个可能的要求是: GET /recipes?tried=false 因为管理菜谱的服务很可能与管理用户看到的菜谱的服务不同,所以这条路线听起来像是错误的方法 也许一个改进是: GET /user/{user_id}/recipes?tried=false 这表明用户服务可以获取用户尝试过的所有配方的列表,然

假设我正在开发一个配方API,它提供了对配方资源的访问,这些资源包括配料、说明,当然还有配方的冗长背景故事):

现在,让我们假设我被要求实现一个功能,用户可以请求他们还没有尝试过的食谱。一个可能的要求是:

GET /recipes?tried=false
因为管理菜谱的服务很可能与管理用户看到的菜谱的服务不同,所以这条路线听起来像是错误的方法

也许一个改进是:

GET /user/{user_id}/recipes?tried=false
这表明用户服务可以获取用户尝试过的所有配方的列表,然后向配方服务发送请求,以返回不包括用户已经尝试过的配方的分页列表

但这意味着会有这样一条路线:

GET /recipes?exclude=202,203,420,109,...,400
这可能超过URL的最大长度

有没有一种RESTful方式可以支持这些特性,而不冒URL过长的风险

我想创建一个名为过滤器的新资源,这将允许调用方创建一个过滤器,其中包含用户尝试过的配方ID列表,并将此过滤器的URL或ID传递给配方服务,然后删除过滤器资源,但这听起来太复杂了


提前谢谢

对我来说,这听起来更像是软件工程堆栈交换的一个问题,但无论如何,我会尝试给出一个答案


在我看来,这样做没有对错之分,但你可以这样做:用户/前台使用一个
未显示的
请求参数查询配方URL。背后的服务检索用户已从包含此信息的服务中看到的食谱列表。现在,您有两个选项:获取所有配方的列表并手动删除看到的配方,或者在配方后端有一个POST端点,数据库可以在该端点上处理作业,将JSON/xml编码的配方列表过滤掉。

我最喜欢您的第二个示例。即使“不同的服务”正在管理所查看的内容,该服务在配方服务中存储“尝试过的”信息可能也是最有意义的。但是另一种情况是,
GET/user/{user\u id}/collections/tryed
,其中“tryed”是集合的名称?
GET /recipes?exclude=202,203,420,109,...,400