HTTP API中的搜索动词

Rom*_*per 8 api rest restful-url restful-architecture

在API中进行搜索的最佳做法是什么?

  • GET +查询参数,例如:GET / search?q = phone
  • 主体中的GET +参数,例如:GET / search {“ query”:“ phone”}
  • 正文中的POST +参数,例如:POST / search {“ query”:“ phone”}

Eri*_*ein 6

不要在 GET 请求中包含正文。这违反了规范

GET 请求消息中的负载没有定义的语义;在 GET 请求上发送有效负载正文可能会导致某些现有实现拒绝该请求。

其他两个选项之间存在权衡。GET 请求是可缓存的、安全的和幂等的。它们的尺寸有限。

POST 请求不能可靠地缓存、安全或幂等,并且没有大小限制。还有更多的灵活性 - 除了返回搜索结果之外,您可以稍后在服务器端创建过滤器资源,稍后搜索可以使用该过滤器,可能使用 GET,但如果您允许缓存和更改创建后的过滤器定义。

查看您的具体示例,支持单个“搜索”端点可能会很快变得混乱。如果您还没有,我鼓励您考虑其他选择。

  • Elasticsearch 使用带有正文的 GET 来进行搜索请求。 (3认同)

Tob*_*ias 0

POST 请求被认为是在服务器上更改或创建数据。GET 被认为是一种“安全方法”,对服务器数据库没有影响。

由于搜索请求通常不会更改任何数据,因此您应该使用 GET 请求。限制至少为 2000 个符号 (IE),因此大多数时候您是相当安全的。