我正在构建一个 RESTful API,它需要对其许多资源进行高级过滤。我需要支持几乎所有你可以在 SQL where 子句中做的事情。其他人是如何在他们的 API 中实现这个功能的?
我做的研究越多,看起来我需要为已经定义的语法(如 SQL 或 RQL)找到一个解析器,或者编写我自己的大大简化的语法。我正在使用 Python。
您正在寻找的是 OData 标准。OData 是一种 REST+ATOM 组合,包括一种 URL 内查询语言。
以下是 Web 服务上的 OData 查询调用示例:
http://services.odata.org/OData.svc/Category(1)/Products?$top=25&$orderby=name
此(虚构)查询从 OData.svc Web 服务中搜索按名称排序的类别 1 中的前 25 种产品。
查看http://www.odata.org/了解有关 OData 的更多信息。
有可用的 Python 实现,但我不确定它们在这个阶段有多先进。查看http://code.google.com/p/odata-py和https://bitbucket.org/dowski/myohdata/src。