我正在使用 ROA(面向资源的架构)为我的应用程序构建一个 REST 接口(interface)。
我想让客户能够在 URL 中指定搜索参数。所以客户可以说“给我所有的人:
- “first_name”等于“BOB”
- “年龄”大于“30”
- 按“姓氏”排序
我在想:
GET /PEOPLE/{query_parameters}/{sort_parameters}
……或许
GET /PEOPLE?query=<query_string>&sort=<sort_string>
...但我不确定哪种语法适合在 COLUMN_NAME-OPERATOR-VALUE 一式三份中指定。我在想也许是这样的:
column_name.operator.value
所以客户可以说:
GET /PEOPLE?query=first_name.EQUALS.bob&query=age.GREATER_THAN.30&sort=last_name.ASCENDING
我真的不想在这里重新发明轮子,是否有一些公认的方法可以做到这一点?我正在使用 ReSTLets,我不知道这是否有所不同。
最佳答案
我会将搜索参数添加为单个参数。专用的子查询语言通常更难处理+阅读(尤其是因为您必须对其进行 url 编码)。所以我不会压缩一个完整功能的 sql 语法。仅添加您真正需要且对搜索有意义的参数,复杂性越低意味着处理越容易 :)
最小/最大的东西我会添加到同一个参数。
/人?年龄=10,20
请注意“,”,它隐含地为您提供了范围语法。我发现它具有 minAge 和 maxAge,因此更具可读性。
对于开放范围,您可以这样做:
/人?年龄=10,*
我会做的排序:
/people?sortField=name&sortOrder=ascending
关于url - REST/ROA 架构 - 在 URL 中发送数据库搜索/查询/过滤/排序参数? (>、<、IN 等...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2946683/