设计用于不精确过滤的端点的正确,RESTful方法

时间:2018-12-11 20:31:23

标签: rest api-design

假设我有RESTful设计规定的GET /objects/{id},GET /objects/{code}和POST /objects的端点,而objects的字段为name,并且code(唯一)。

我想在另一个应用程序中使用objects数据,尤其是在namecode上都使用自动完成过滤功能。

如我所见,选项是

  • 获取/objects?q={user-input},其中q是用户输入的内容,后端使用LIKE '%{user-input}%'执行SELECT语句
  • 带有JSON负载的POST /objects/search

哪个更RESTful?还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

这取决于我的目标。

如果我所有的应用程序除了“压缩”对象之外,都是通过自动完成功能进行搜索,也许还有其他一些固定搜索,那么我将使用特定的端点和操作。

  • GET /objects/autocomplete?prefix=<>

这看起来可能很奇怪,因为它根本不是RESTful的,但是我的意思是要创建一个简单而特定的端点,以防万一这就是您的应用程序所要解决的问题。

但是,当然,如果应用程序需要支持更灵活的过滤,我会选择POST请求,并在有效负载中添加过滤器。

  • POST /objects/search

两者不一定都非常RESTful,在我看来,REST并不总是最好的策略,更重要的是用例。无论如何,对象“挤压”和关联动作都是(RESTful),所以我将保持不变,这就是为什么您可能更喜欢/objects/search(在GET和POST中)而不是/objects您不会影响域。

您可以在这里进一步了解:https://softwareengineering.stackexchange.com/questions/353086/what-is-a-proper-way-to-do-a-complex-restful-search-method