api - 如何过滤 RESTful 集合资源?查询参数还是查询字符串?
问题描述
我需要过滤员工列表并支持简单和复杂的查询。RESTful API 具有查询参数,它们是在 ? 之后提供的键值对。
/employees?location=london
如果我想将列表减少为开始日期在 2020 年 1 月 1 日到 2020 年 1 月 5 日之间的员工,他们也是男性并且在伯明翰办公室工作,该怎么办?这是应该使用查询字符串 ?q=.... 的地方吗?有什么最佳实践可以遵循吗?
解决方案
有什么最佳实践可以遵循吗?
任何与您的 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。
推荐阅读
- angular - 如何保持我的日期值正确以提交给 API?
- javascript - 我如何在 Python 3 上执行此 javascript 代码?
- python - 在我的有效前沿没有得到子弹形状
- mysql - Wordpress 和 mysql pod 推出正确,但 wordpress 未显示在我的浏览器上
- javascript - 如何使用 JQuery Dropzone 将额外参数传递给我的 java 控制器方法
- bash - 难倒:这个脚本没有按预期工作?
- python - 为什么我的矩形不起作用并使玩家与门交互,因为它应该在 pygame
- javascript - 如何更改范围输入滑块拇指值的边框半径?
- php - wordpress(elementor)如何将内容从一个页面插入另一个页面
- javascript - 行情留言 | 不和谐.js