首页 > 解决方案 > 如何过滤 RESTful 集合资源?查询参数还是查询字符串?

问题描述

我需要过滤员工列表并支持简单和复杂的查询。RESTful API 具有查询参数,它们是在 ? 之后提供的键值对。

/employees?location=london

如果我想将列表减少为开始日期在 2020 年 1 月 1 日到 2020 年 1 月 5 日之间的员工,他们也是男性并且在伯明翰办公室工作,该怎么办?这是应该使用查询字符串 ?q=.... 的地方吗?有什么最佳实践可以遵循吗?

标签: apirest

解决方案


有什么最佳实践可以遵循吗?

任何与您的 API 中的其他标识符一致的东西都可以。

REST 不关心您对资源标识符使用什么拼写,只要它们与RFC 3986定义的生产规则一致。

application/x-www-form-urlencoded表示键值对的查询部分是一种流行的选择,因为 HTML 表单支持意味着这些资源标识符很容易使用 Web 浏览器进行测试。

?q=只是另一个键值对——你的值几乎可以是任何东西,只要它们被正确编码。现有技术见html中的文本区域输入控件。

键值对是一种将信息编码到查询部分的方法,但您不需要这样做。 http://example.org/?select%20%2A%20from%20students%3b从 REST 客户端的角度来看,它是一个完全令人满意的资源标识符。

(当然,您可能不希望获取未经处理的输入并使用授权执行任意操作的角色在您的生产关系数据库中运行它。)

您不仅限于在查询部分编码有用的信息;如果您更喜欢将信息编码到路径段中,那也没关系。HTML 不支持开箱即用,但 HTML 表单的一般化是URI Template,它为您提供更多选项来与客户端通信如何构造 URI。


推荐阅读