用于过滤嵌套集合的 RESTful URI

标签 rest

我正在寻找一种为资源形成 URI 的好方法,该资源过滤记录中包含的值集合。例如,假设您有一个食谱数据库,并且您想要搜索包含“樱桃”的食谱(显然大多数食谱会包含多种成分)。

如果我只想过滤单个值,我可以执行类似于以下的操作:

/recipe/search/?name=Spaghetti

但是过滤多个值呢?我正在考虑以下内容:

/recipe/search/?ingredients=contains=cherry

对此有什么想法吗?这种过滤器有“标准”吗?

更新:我的想法有一个问题是后端处理它的方式(在我的例子中是 Rails)。当使用这种特定格式查询服务器时,Rails 会生成一个 Ruby 散列,它可能会像下面这样丑陋:

{"ingredients"=>"contains=cherry",
"action"=>"search",
"controller"=>"recipe"}

最佳答案

你的 URI

首先,与其他答案相比,我将从 REST 开始观点,然后找到适当的补充。我不擅长 Ruby,所以请忍受后端没有代码。

  1. 收件人是您想要展示的实体
    您的用户可以在 /recipies 找到它们
  2. HTTP 有用于过滤的 QUERYS
    想按日期对这些食谱进行排序吗?使用 /recipies/?sortby=date&sort=asc
  3. 只有樱桃的食谱是这样的:/recipies/?ingredients=cherry

这就是构建基本 URL 的 REST 方式。
对于多场比赛,没有官方的方式来做到这一点,但我会关注 user1758003。这是 url 的直观构造,很容易在后端解析,所以我们有 /recipies/?ingredients=cherry,chocolate

别忘了 /recipies/search不平静,因为它反射(reflect)了 recipies并且不代表一个独立的实体。但是,它是为您网站的访问者托管搜索表单的好地方。

现在有一些附加问题包含在第一个中,让我一一解决:

我有一个使用此 API 的网站,搜索表单应该是什么样子?

给您的访问者一个/recipie/search /recipies 上的页面或快速过滤可能性. 只需设置 <form action="/recipies" type="GET"> .浏览器会将所有参数作为查询字符串添加到 /recipies 之后.

高级功能

请求/recipies应该列出所有。如果添加查询,则必须考虑查询的每个参数。所以/recipies/?ingredients=cheese必须只返回俗气的食谱。 对于乘法查询参数值,没有固定的标准,但我希望服务直观。
我读了GET /recipies/?ingredients=cherry,chocolate作为Get me the recipies which have ingredients of cherry and chocolate .要获得包含樱桃或巧克力的食谱列表,我想将 URI 写成 /recipies/?ingredients=cherry|chocolate这使得它在视觉上与逗号截然不同,并且在编程上下文中具有预定义的含义 (OR)。

关于用于过滤嵌套集合的 RESTful URI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15527080/

相关文章:

java - 如何为客户端过滤器调用扩展 ClientRequestFilter 的类

python - 如何在 Restful Flask 中上传文件?

java - 创建计划任务,在指定时间后执行

c# - ASP.NET 和 C# : where do you store the rest client url?

.net - 确定 Application_BeginRequest 和 Application_EndRequest 何时绑定(bind)

java - Java REST WS 中的 POST header 问题

java - Jackson 与 JodaTime 和 Jax-rs

php - 如何将多个 GET 参数连接到准备好的语句中

java - REST lib 为 Java REST API 提供了什么

php - RESTful API错误的最佳实践